docker-entrypoint.sh 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/bin/bash
  2. ACME_BASE=/var/lib/acme
  3. mkdir -p ${ACME_BASE}/acme/private
  4. restart_containers(){
  5. for container in $*; do
  6. curl -X POST \
  7. --unix-socket /var/run/docker.sock \
  8. "http/containers/${container}/restart"
  9. done
  10. }
  11. while true; do
  12. AUTODISCOVER=
  13. AUTODISCOVER_A=$(dig a autodiscover.${MAILCOW_HOSTNAME#*} +short @208.67.220.222)
  14. if [[ ! -z ${AUTODISCOVER_A} ]]; then
  15. if [[ $(curl -4s https://mailcow.email/ip.php) == ${AUTODISCOVER_A} ]]; then
  16. AUTODISCOVER="autodiscover.${MAILCOW_HOSTNAME#*}"
  17. fi
  18. fi
  19. AUTOCONFIG=
  20. AUTOCONFIG_A=$(dig a autoconfig.${MAILCOW_HOSTNAME#*} +short @208.67.220.222)
  21. if [[ ! -z ${AUTOCONFIG_A} ]]; then
  22. if [[ $(curl -4s https://mailcow.email/ip.php) == ${AUTOCONFIG_A} ]]; then
  23. AUTOCONFIG="autoconfig.${MAILCOW_HOSTNAME#*}"
  24. fi
  25. fi
  26. acme-client \
  27. -v -b -N -n \
  28. -f ${ACME_BASE}/acme/private/account.key \
  29. -k ${ACME_BASE}/acme/private/privkey.pem \
  30. -c ${ACME_BASE}/acme \
  31. ${MAILCOW_HOSTNAME} ${AUTOCONFIG} ${AUTODISCOVER} ${ADDITIONAL_SAN}
  32. case "$?" in
  33. 0) # new certs
  34. # cp the new certificates and keys
  35. cp ${ACME_BASE}/acme/fullchain.pem ${ACME_BASE}/cert.pem
  36. cp ${ACME_BASE}/acme/private/privkey.pem ${ACME_BASE}/key.pem
  37. # restart docker containers
  38. restart_containers ${CONTAINERS_RESTART}
  39. ;;
  40. 1) # failure
  41. exit 1;;
  42. 2) # no change
  43. ;;
  44. *) # unspecified
  45. exit 1;;
  46. esac
  47. echo "ACME certificate validation done. Sleeping for another day."
  48. sleep 86400
  49. done