Files
vps_server/docker-compose.yml
T
2026-08-11 08:21:56 +00:00

95 lines
2.7 KiB
YAML

services:
reverse_proxy:
image: caddy:latest
container_name: reverse_proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./service_data/reverse_proxy:/etc/caddy
- caddy-data:/data
environment:
- DOMAIN_NAME=${DOMAIN_NAME}
- MAIL_SUBDOMAIN=${MAIL_SUBDOMAIN}
- WEBMAIL_SUBDOMAIN=${WEBMAIL_SUBDOMAIN}
networks:
- proxy-net
email_backend:
image: stalwartlabs/stalwart:latest
container_name: email_backend
restart: unless-stopped
volumes:
- stalwart-etc:/etc/stalwart
- stalwart-data:/var/lib/stalwart
- stalwart-certs:/certs:ro
environment:
- STALWART_PUBLIC_URL=https://${MAIL_SUBDOMAIN}.${DOMAIN_NAME}
ports:
- "25:25"
- "465:465"
- "993:993"
- "4190:4190"
networks:
- proxy-net
email_frontend:
image: ghcr.io/bulwarkmail/webmail:latest
container_name: email_frontend
restart: unless-stopped
environment:
- JMAP_SERVER_URL=https://${MAIL_SUBDOMAIN}.${DOMAIN_NAME}
- SESSION_SECRET=${BULWARK_SECRET}
- OAUTH_ENABLED=true
- OAUTH_ONLY=true
- OAUTH_CLIENT_ID=bulwark-webmail
- OAUTH_CLIENT_SECRET=${OAUTH_SECRET}
- AUTO_SSO_ENABLED=true
volumes:
- bulwark-config:/app/data/admin
- bulwark-state:/app/data/admin-state
networks:
- proxy-net
cert_sync:
image: alpine:latest
container_name: cert_sync
restart: unless-stopped
depends_on:
- reverse_proxy
volumes:
- caddy-data:/caddy-data:ro
- stalwart-certs:/stalwart-certs
- ./service_data/cert_sync:/data
command: sh /data/sync-certs.sh
backup:
image: mazzolino/restic
container_name: backup
restart: unless-stopped
hostname: ${RESTIC_HOSTNAME}
profiles:
- backup-enabled
environment:
- BACKUP_CRON="0 2 * * *"
- RUN_ON_STARTUP=true
- RESTIC_REPOSITORY=${RESTIC_REPOSITORY}
- RESTIC_PASSWORD=${RESTIC_PASSWORD}
- RESTIC_FORGET_ARGS=--keep-last 7 --keep-daily 7 --keep-weekly 4 --prune
volumes:
- ~/.ssh:/run/secrets/.ssh:ro
- /var/lib/docker/volumes:/data/volumes:ro
volumes:
stalwart-etc:
stalwart-data:
stalwart-certs:
caddy-data:
bulwark-config:
bulwark-state:
networks:
proxy-net:
external: true