Skip to content

Instantly share code, notes, and snippets.

@austonpramodh
Last active January 23, 2025 23:10
Show Gist options
  • Select an option

  • Save austonpramodh/57c43ec13786dd0c109c4d7d40ee962a to your computer and use it in GitHub Desktop.

Select an option

Save austonpramodh/57c43ec13786dd0c109c4d7d40ee962a to your computer and use it in GitHub Desktop.
Caddy-MailcowDockerized: Copy Certs to Mailcow from Caddy
services:
caddy:
image: caddy:2-alpine
container_name: caddy
restart: unless-stopped
volumes:
- caddy-config:/config
- caddy-data:/data
- ./Caddyfile:/etc/caddy/Caddyfile:ro
ports:
- "80:80"
- "443:443"
mailcow-certs-copier:
image: docker:27.4.0-cli
command: >
sh -c "echo 'Docker-Crontab starting...'
touch /var/log/cron.log
crontab /etc/cron.d/cron-tab
crond
tail -f /var/log/cron.log"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy-data:/var/lib/caddy/.local/share/:ro
- /opt/mailcow-dockerized/data/assets/ssl:/opt/mailcow-dockerized/data/assets/ssl:rw
- ./mailcow-certs-copy.sh:/var/lib/mailcow-certs-copy.sh:ro
- ./cron-tab.txt:/etc/cron.d/cron-tab
depends_on:
- caddy
volumes:
caddy-data:
caddy-config:
#!/bin/sh
MAILCOW_HOSTNAME=example.com
CADDY_CERTS_DIR=/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory
if [ -f $CADDY_CERTS_DIR/$MAILCOW_HOSTNAME/$MAILCOW_HOSTNAME.crt ]; then
MD5SUM_CURRENT_CERT=`md5sum /opt/mailcow-dockerized/data/assets/ssl/cert.pem | awk '{ print $1 }'`
MD5SUM_NEW_CERT=`md5sum $CADDY_CERTS_DIR/$MAILCOW_HOSTNAME/$MAILCOW_HOSTNAME.crt | awk '{ print $1 }'`
if [ $MD5SUM_CURRENT_CERT != $MD5SUM_NEW_CERT ]; then
cp $CADDY_CERTS_DIR/$MAILCOW_HOSTNAME/$MAILCOW_HOSTNAME.crt /opt/mailcow-dockerized/data/assets/ssl/cert.pem
cp $CADDY_CERTS_DIR/$MAILCOW_HOSTNAME/$MAILCOW_HOSTNAME.key /opt/mailcow-dockerized/data/assets/ssl/key.pem
mkdir -p /opt/mailcow-dockerized/data/assets/ssl/$MAILCOW_HOSTNAME
cp $CADDY_CERTS_DIR/$MAILCOW_HOSTNAME/$MAILCOW_HOSTNAME.crt /opt/mailcow-dockerized/data/assets/ssl/$MAILCOW_HOSTNAME/cert.pem
cp $CADDY_CERTS_DIR/$MAILCOW_HOSTNAME/$MAILCOW_HOSTNAME.key /opt/mailcow-dockerized/data/assets/ssl/$MAILCOW_HOSTNAME/key.pem
# Permissions fixing!
chmod -R 775 /opt/mailcow-dockerized/data/assets/ssl
find /opt/mailcow-dockerized/data/assets/ssl -type f | xargs chmod 664
postfix_c=$(docker ps -qaf name=postfix-mailcow)
dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
nginx_c=$(docker ps -qaf name=nginx-mailcow)
docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
echo "Certs copied, docker containers restarted."
else
echo "Certs not copied from Caddy (Not needed)"
fi
else
echo "ERR: Certs not found on Caddy!"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment