mail-server/docker-compose.yml.template
2026-07-04 23:03:51 +03:00

123 lines
3.6 KiB
Plaintext

services:
stalwart:
image: stalwartlabs/stalwart:latest
container_name: stalwart
restart: unless-stopped
env_file: .env
ports:
- "25:25" # SMTP (входящая почта)
- "465:465" # SMTP over TLS (SMTPS)
- "587:587" # SMTP submission (клиенты)
- "143:143" # IMAP
- "993:993" # IMAP over TLS
- "4190:4190" # ManageSieve
- "8080:8080" # HTTP: WebAdmin + JMAP + autodiscovery
- "443:443" # HTTPS (если не используется внешний reverse proxy)
volumes:
- ./data/stalwart:/opt/stalwart
- ./config/stalwart:/etc/stalwart
#- STALWART_RECOVERY_ADMIN=admin:MyStrongPassword123
#- STALWART_RECOVERY_MODE=1
environment:
- TZ=${TZ:-UTC}
depends_on:
rspamd:
condition: service_started
clamav:
condition: service_healthy
networks:
- mail
rspamd:
image: rspamd/rspamd:latest
container_name: rspamd
restart: unless-stopped
env_file: .env
volumes:
- ./config/rspamd:/etc/rspamd/local.d
- ./data/rspamd:/var/lib/rspamd
networks:
- mail
# Milter порт 11332 доступен только внутри сети
clamav:
image: clamav/clamav:stable
container_name: clamav
restart: unless-stopped
env_file: .env
volumes:
- ./data/clamav/db:/var/lib/clamav
- ./data/clamav/run:/run/clamav
- ./config/clamav/clamav-milter.conf:/etc/clamav/clamav-milter.conf
environment:
- CLAMAV_NO_FRESHCLAMD=false
- CLAMAV_NO_MILTERD=false
- CLAMAV_MILTER_PORT=7357
healthcheck:
test: ["CMD", "clamdcheck.sh"]
interval: 60s
retries: 3
start_period: 120s # ClamAV долго стартует (загрузка сигнатур)
networks:
- mail
roundcube:
build: ./config/roundcube
#image: roundcube/roundcubemail:latest-apache
container_name: roundcube
restart: unless-stopped
ports:
- "8888:80" # веб-интерфейс почты, менять при конфликте
volumes:
- ./data/roundcube:/var/roundcube/db
environment:
# IMAP — подключаемся к stalwart внутри сети
ROUNDCUBEMAIL_DEFAULT_HOST: "ssl://stalwart"
ROUNDCUBEMAIL_DEFAULT_PORT: "993"
# SMTP — через STARTTLS
ROUNDCUBEMAIL_SMTP_SERVER: "tls://stalwart"
ROUNDCUBEMAIL_SMTP_PORT: "587"
# Домен по умолчанию — пользователь вводит только логин, домен подставляется
ROUNDCUBEMAIL_USERNAME_DOMAIN: "${MAIL_DOMAIN}"
# SQLite — не нужна отдельная БД
ROUNDCUBEMAIL_DB_TYPE: "sqlite"
# Плагины
ROUNDCUBEMAIL_PLUGINS: "archive,zipdownload,managesieve"
ROUNDCUBEMAIL_SKIN: "elastic"
ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE: "25M"
depends_on:
- stalwart
networks:
- mail
autoheal:
image: willfarrell/autoheal:latest
container_name: autoheal
restart: unless-stopped
environment:
- AUTOHEAL_CONTAINER_LABEL=all
volumes:
- /var/run/docker.sock:/var/run/docker.sock
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
ports:
- "8091:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
privileged: true
networks:
- mail
networks:
mail:
name: mail
driver: bridge