Initial commit on Forgejo
Some checks are pending
CI and deploy / Test (push) Waiting to run
CI and deploy / Build, push, and deploy (push) Blocked by required conditions

Fresh repository history for elektrine/elektrine-haraka hosted at
https://git.elektrine.com/elektrine/elektrine-haraka.
This commit is contained in:
Maxfield Luke 2026-07-29 04:43:42 -04:00
commit 67c1d41a0c
82 changed files with 8713 additions and 0 deletions

View file

@ -0,0 +1,223 @@
services:
haraka-inbound:
image: ${HARAKA_IMAGE:-git.elektrine.com/elektrine/elektrine-haraka}:${HARAKA_IMAGE_TAG:-latest}
ports:
- "25:25"
volumes:
- ../logs:/app/logs
- ../config:/app/config
- ../config/dkim:/data/haraka/dkim
- ../plugins:/app/plugins:ro
- ../lib:/app/lib:ro
- ../scripts:/app/scripts:ro
- ssl-certs:/app/ssl
environment:
- NODE_ENV=production
- HARAKA_ROLE=inbound-mx
- HARAKA_API_KEY=${HARAKA_API_KEY:-}
- PHOENIX_API_KEY=${PHOENIX_API_KEY:-}
- PHOENIX_WEBHOOK_URL=${PHOENIX_WEBHOOK_URL:-}
- PHOENIX_VERIFY_URL=${PHOENIX_VERIFY_URL:-}
- PHOENIX_DOMAINS_URL=${PHOENIX_DOMAINS_URL:-}
- LOCAL_DOMAINS=${LOCAL_DOMAINS:-}
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
- ELEKTRINE_QUEUE_NAME=${ELEKTRINE_QUEUE_NAME:-elektrine:inbound}
- ELEKTRINE_DLQ_NAME=${ELEKTRINE_DLQ_NAME:-elektrine:inbound:dlq}
- HARAKA_DOMAIN=${HARAKA_DOMAIN:-mail.example.com}
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- haraka-network
- main-app-network
depends_on:
- redis
- clamav
- spamassassin
haraka-submission:
image: ${HARAKA_IMAGE:-git.elektrine.com/elektrine/elektrine-haraka}:${HARAKA_IMAGE_TAG:-latest}
volumes:
- ../logs:/app/logs
- ../config:/app/config
- ../config/dkim:/data/haraka/dkim
- ../plugins:/app/plugins:ro
- ../lib:/app/lib:ro
- ../scripts:/app/scripts:ro
- ssl-certs:/app/ssl
environment:
- NODE_ENV=production
- HARAKA_ROLE=submission
- HARAKA_API_KEY=${HARAKA_API_KEY:-}
- PHOENIX_API_KEY=${PHOENIX_API_KEY:-}
- PHOENIX_VERIFY_URL=${PHOENIX_VERIFY_URL:-}
- PHOENIX_DOMAINS_URL=${PHOENIX_DOMAINS_URL:-}
- LOCAL_DOMAINS=${LOCAL_DOMAINS:-}
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
- HARAKA_DOMAIN=${HARAKA_DOMAIN:-mail.example.com}
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- haraka-network
- main-app-network
depends_on:
- redis
haraka-outbound:
image: ${HARAKA_IMAGE:-git.elektrine.com/elektrine/elektrine-haraka}:${HARAKA_IMAGE_TAG:-latest}
ports:
- "127.0.0.1:${HARAKA_HTTP_BIND_PORT:-18080}:8080"
volumes:
- ../logs:/app/logs
- ../config:/app/config
- ../config/dkim:/data/haraka/dkim
- ../plugins:/app/plugins:ro
- ../lib:/app/lib:ro
- ../scripts:/app/scripts:ro
- ssl-certs:/app/ssl
environment:
- NODE_ENV=production
- HARAKA_ROLE=outbound-relay
- HARAKA_API_KEY=${HARAKA_API_KEY:-}
- PHOENIX_API_KEY=${PHOENIX_API_KEY:-}
- HARAKA_HTTP_API_KEY=${HARAKA_HTTP_API_KEY:-}
- PHOENIX_WEBHOOK_URL=${PHOENIX_WEBHOOK_URL:-}
- PHOENIX_VERIFY_URL=${PHOENIX_VERIFY_URL:-}
- PHOENIX_DOMAINS_URL=${PHOENIX_DOMAINS_URL:-}
- LOCAL_DOMAINS=${LOCAL_DOMAINS:-}
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
- HARAKA_HTTP_PORT=8080
- HARAKA_HTTP_HOST=0.0.0.0
- HARAKA_DOMAIN=${HARAKA_DOMAIN:-mail.example.com}
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- haraka-network
- main-app-network
depends_on:
- redis
haraka-worker:
image: ${HARAKA_IMAGE:-git.elektrine.com/elektrine/elektrine-haraka}:${HARAKA_IMAGE_TAG:-latest}
command: ["node", "/app/scripts/elektrine-worker.js"]
volumes:
- ../logs:/app/logs
- ../config:/app/config
- ../config/dkim:/data/haraka/dkim
- ../plugins:/app/plugins:ro
- ../lib:/app/lib:ro
- ../scripts:/app/scripts:ro
environment:
- NODE_ENV=production
- HARAKA_ROLE=worker
- HARAKA_API_KEY=${HARAKA_API_KEY:-}
- PHOENIX_API_KEY=${PHOENIX_API_KEY:-}
- PHOENIX_WEBHOOK_URL=${PHOENIX_WEBHOOK_URL:-}
- PHOENIX_VERIFY_URL=${PHOENIX_VERIFY_URL:-}
- PHOENIX_DOMAINS_URL=${PHOENIX_DOMAINS_URL:-}
- LOCAL_DOMAINS=${LOCAL_DOMAINS:-}
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
- ELEKTRINE_QUEUE_NAME=${ELEKTRINE_QUEUE_NAME:-elektrine:inbound}
- ELEKTRINE_DLQ_NAME=${ELEKTRINE_DLQ_NAME:-elektrine:inbound:dlq}
- WEBHOOK_MAX_RETRIES=${WEBHOOK_MAX_RETRIES:-5}
- WEBHOOK_RETRY_BASE_MS=${WEBHOOK_RETRY_BASE_MS:-1000}
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- haraka-network
- main-app-network
depends_on:
- redis
cert-copier:
image: ${CERT_COPIER_IMAGE:-alpine:3.20}
volumes:
- main-caddy-data:/caddy-data:ro
- ssl-certs:/ssl-certs
environment:
- HARAKA_DOMAIN=${HARAKA_DOMAIN:-mail.example.com}
command: >
sh -c "
while true; do
if [ -f /caddy-data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.elektrine.com/wildcard_.elektrine.com.crt ]; then
cp /caddy-data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.elektrine.com/wildcard_.elektrine.com.crt /ssl-certs/cert.crt
cp /caddy-data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.elektrine.com/wildcard_.elektrine.com.key /ssl-certs/cert.key
chmod 644 /ssl-certs/cert.crt
chmod 600 /ssl-certs/cert.key
elif [ -f /caddy-data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/$$HARAKA_DOMAIN/$$HARAKA_DOMAIN.crt ]; then
cp /caddy-data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/$$HARAKA_DOMAIN/$$HARAKA_DOMAIN.crt /ssl-certs/cert.crt
cp /caddy-data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/$$HARAKA_DOMAIN/$$HARAKA_DOMAIN.key /ssl-certs/cert.key
chmod 644 /ssl-certs/cert.crt
chmod 600 /ssl-certs/cert.key
fi
sleep 30
done
"
networks:
- haraka-network
restart: unless-stopped
redis:
image: ${REDIS_IMAGE:-redis:7-alpine}
command:
- redis-server
- --appendonly
- yes
- --appendfsync
- everysec
- --save
- "900 1"
- --save
- "300 10"
- --save
- "60 10000"
ports:
- "127.0.0.1:6379:6379"
volumes:
- redis-data:/data
restart: unless-stopped
networks:
- haraka-network
clamav:
image: ${CLAMAV_IMAGE:-clamav/clamav:stable}
ports:
- "127.0.0.1:3310:3310"
volumes:
- clamav-data:/var/lib/clamav
environment:
- CLAMAV_NO_FRESHCLAM=false
restart: unless-stopped
networks:
- haraka-network
spamassassin:
image: ${SPAMASSASSIN_IMAGE:-dinkel/spamassassin:latest}
ports:
- "127.0.0.1:783:783"
volumes:
- spamassassin-data:/var/lib/spamassassin
environment:
- SA_UPDATE=1
restart: unless-stopped
networks:
- haraka-network
networks:
haraka-network:
driver: bridge
main-app-network:
external: true
name: ${MAIN_APP_NETWORK:-docker_elektrine_network}
volumes:
main-caddy-data:
external: true
name: ${MAIN_CADDY_VOLUME:-elektrine_caddy_data}
redis-data:
ssl-certs:
clamav-data:
spamassassin-data: