diff --git a/.env.example b/.env.example index 2b26e4c..ed6b2d7 100644 --- a/.env.example +++ b/.env.example @@ -4,7 +4,6 @@ DOMAIN_NAME=example.com # Subdomain Information (DO NOT EDIT AFTER RUNNING ONCE) WEBMAIL_SUBDOMAIN=mail MAIL_SUBDOMAIN=mx -AUTH_SUBDOMAIN=auth # Secret Keys # This should be generated automatically. diff --git a/docker-compose.yml b/docker-compose.yml index d075a8c..8a7922f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,6 @@ services: - ./service_data/reverse_proxy:/etc/caddy - caddy-data:/data environment: - - CADDY_TLS=${CADDY_TLS} - DOMAIN_NAME=${DOMAIN_NAME} - MAIL_SUBDOMAIN=${MAIL_SUBDOMAIN} - WEBMAIL_SUBDOMAIN=${WEBMAIL_SUBDOMAIN} @@ -23,16 +22,13 @@ services: 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" - - "587:587" - "465:465" - - "143:143" - "993:993" - - "110:110" - - "995:995" - "4190:4190" networks: - proxy-net @@ -43,8 +39,6 @@ services: restart: unless-stopped environment: - JMAP_SERVER_URL=https://${MAIL_SUBDOMAIN}.${DOMAIN_NAME} - - NODE_TLS_REJECT_UNAUTHORIZED=0 # DEFINITELY REMOVE AFTER TESTING - - OAUTH_ALLOW_PRIVATE_ENDPOINTS=true # ALSO DEFINITELY REMOVE THIS - SESSION_SECRET=${BULWARK_SECRET} - OAUTH_ENABLED=true - OAUTH_ONLY=true @@ -57,12 +51,26 @@ services: 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 + volumes: stalwart-etc: stalwart-data: + stalwart-certs: caddy-data: bulwark-config: bulwark-state: + networks: proxy-net: diff --git a/service_data/cert_sync/sync-certs.sh b/service_data/cert_sync/sync-certs.sh new file mode 100644 index 0000000..d8f7284 --- /dev/null +++ b/service_data/cert_sync/sync-certs.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ ! -d /caddy-data ] || [ ! -d /stalwart-certs ]; then + echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] FATAL: Required volume mounts (/caddy-data or /stalwart-certs) are missing!" >&2 + exit 1 +fi + +echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Certificate sync container initialized. Checking every 12 hours..." + +while true; do + if [ -d /caddy-data/caddy/certificates ] && [ "$(ls -A /caddy-data/caddy/certificates 2>/dev/null)" ]; then + echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Syncing Caddy certificates to Stalwart..." + + cp -a /caddy-data/caddy/certificates/. /stalwart-certs/ + + chown -R 2000:2000 /stalwart-certs + chmod -R 755 /stalwart-certs + find /stalwart-certs -type f -name '*.key' -exec chmod 600 {} + + find /stalwart-certs -type f -name '*.crt' -exec chmod 644 {} + + else + echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Waiting for certificates in /caddy-data/caddy/certificates..." + fi + + sleep 43200 & + wait $! +done diff --git a/service_data/reverse_proxy/Caddyfile b/service_data/reverse_proxy/Caddyfile index c41dba1..7725ca3 100644 --- a/service_data/reverse_proxy/Caddyfile +++ b/service_data/reverse_proxy/Caddyfile @@ -1,10 +1,8 @@ {$WEBMAIL_SUBDOMAIN}.{$DOMAIN_NAME} { - {$CADDY_TLS} - reverse_proxy email_frontend:3000 + reverse_proxy email_frontend:3000 } {$MAIL_SUBDOMAIN}.{$DOMAIN_NAME} { - {$CADDY_TLS} reverse_proxy email_backend:8080 header {