mailcowdockerized.sh 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/usr/bin/env bash
  2. while true;do ls | grep -q dockerbunker.sh;if [[ $? == 0 ]];then BASE_DIR=$PWD;break;else cd ../;fi;done
  3. SERVICE_HOME="${BASE_DIR}"/data/docker-compose/mailcowdockerized
  4. PROPER_NAME="Mailcow (Dockerized)"
  5. SERVICE_NAME="$(echo -e "${PROPER_NAME,,}" | tr -cd '[:alnum:]')"
  6. PROMPT_SSL=1
  7. declare -a environment=( "data/include/init.sh" "data/env/dockerbunker.env" "data/docker-compose/${SERVICE_NAME}/mailcow.conf" )
  8. for env in "${environment[@]}";do
  9. [[ -f "${BASE_DIR}"/$env ]] && source "${BASE_DIR}"/$env
  10. done
  11. declare -A WEB_SERVICES
  12. declare -a containers=( "mailcowdockerized_acme-mailcow_1" "mailcowdockerized_rspamd-mailcow_1" "mailcowdockerized_nginx-mailcow_1" "mailcowdockerized_netfilter-mailcow_1" "mailcowdockerized_php-fpm-mailcow_1" "mailcowdockerized_redis-mailcow_1" "mailcowdockerized_unbound-mailcow_1" "mailcowdockerized_ipv6nat_1" "mailcowdockerized_postfix-mailcow_1" "mailcowdockerized_memcached-mailcow_1" "mailcowdockerized_sogo-mailcow_1" "mailcowdockerized_watchdog-mailcow_1" "mailcowdockerized_dockerapi-mailcow_1" "mailcowdockerized_clamd-mailcow_1" "mailcowdockerized_dovecot-mailcow_1" "mailcowdockerized_mysql-mailcow_1" )
  13. declare -A volumes=( [mailcowdockerized_crypt-vol-1]="/var/lib/zeyple" [mailcowdockerized_mysql-vol-1]="/var/lib/mysql/" [mailcowdockerized_postfix-vol-1]="/var/spool/postfix" [mailcowdockerized_redis-vol-1]="/data" [mailcowdockerized_rspamd-sock]="/rspamd-sock" [mailcowdockerized_rspamd-vol-1]="/var/lib/rspamd" [mailcowdockerized_vmail-vol-1]="/var/vmail" )
  14. declare -a networks=( )
  15. declare -a add_to_network=( "mailcowdockerized_nginx-mailcow_1" )
  16. unset images
  17. for image in ${IMAGES[@]};do
  18. images+=( $image )
  19. done
  20. DOCKER_COMPOSE=1
  21. [[ -z $1 ]] && options_menu
  22. upgrade() {
  23. echo ""
  24. echo "Please manually update the mailcow repository first, before continuing."
  25. echo "The repository is located in ${SERVICE_HOME}"
  26. echo ""
  27. echo "For instructions refer to:"
  28. echo "https://mailcow.github.io/mailcow-dockerized-docs/install-update/"
  29. echo ""
  30. prompt_confirm "Continue?"
  31. if [[ $? == 0 ]];then
  32. pull_and_compare
  33. delete_old_images
  34. restart_nginx
  35. else
  36. exit 0
  37. fi
  38. }
  39. configure() {
  40. pre_configure_routine
  41. ! [[ -d "${BASE_DIR}"/data/docker-compose ]] && mkdir -p "${BASE_DIR}"/data/docker-compose
  42. pushd "${BASE_DIR}" >/dev/null
  43. ! [[ -d "${SERVICE_HOME}" ]] \
  44. && git clone https://github.com/mailcow/mailcow-dockerized.git data/docker-compose/mailcowdockerized >/dev/null
  45. popd >/dev/null
  46. echo -e "# \e[4mMailcow Dockerized Settings\e[0m"
  47. pushd "${SERVICE_HOME}" >/dev/null
  48. echo -e "\n\e[3m\xe2\x86\x92 Running external script generate_config.sh\e[0m"
  49. echo -e "\nThis script is required by mailcow. It generates the file "mailcow.conf". Both files can be found in the following directory\e"
  50. echo ""
  51. echo " ${SERVICE_HOME}"
  52. echo ""
  53. ./generate_config.sh
  54. popd >/dev/null
  55. echo -e "\n\e[3m\xe2\x86\x92 Finished running generate_config.sh\e[0m"
  56. echo ""
  57. for i in $(grep "image:" "${SERVICE_HOME}"/docker-compose.yml | awk '{print $NF}');do IMAGES+=( \"$i\" );done
  58. configure_ssl
  59. [[ -f "${SERVICE_HOME}"/mailcow.conf ]] && source "${SERVICE_HOME}"/mailcow.conf || echo "Could not find mailcow.conf. Exiting."
  60. sed -i "s/HTTP_PORT=.*/HTTP_PORT=8080/" "${SERVICE_HOME}"/mailcow.conf
  61. sed -i "s/HTTPS_PORT=.*/HTTPS_PORT=8443/" "${SERVICE_HOME}"/mailcow.conf
  62. sed -i "s/HTTP_BIND=.*/HTTP_BIND=127\.0\.0\.1/" "${SERVICE_HOME}"/mailcow.conf
  63. sed -i "s/HTTPS_BIND=.*/HTTPS_BIND=127\.0\.0\.1/" "${SERVICE_HOME}"/mailcow.conf
  64. cat <<-EOF >> "${SERVICE_ENV}"
  65. SERVICE_HOME="${SERVICE_HOME}"
  66. PROPER_NAME="${PROPER_NAME}"
  67. SERVICE_NAME="${SERVICE_NAME}"
  68. SSL_CHOICE=${SSL_CHOICE}
  69. LE_EMAIL=${LE_EMAIL}
  70. DOCKER_COMPOSE=${DOCKER_COMPOSE}
  71. SERVICE_DOMAIN="${MAILCOW_HOSTNAME}"
  72. DOMAIN=${MAILCOW_HOSTNAME#*.}
  73. IMAGES=( ${IMAGES[@]} )
  74. EOF
  75. post_configure_routine
  76. }
  77. setup() {
  78. initial_setup_routine
  79. which docker-compose >/dev/null
  80. if [[ $? == 1 ]];then
  81. echo -e "docker-compose not found. You can now automatically be installed via\n\n\
  82. curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose\n"
  83. prompt_confirm "Continue?"
  84. if [[ $? == 0 ]];then
  85. curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
  86. chmod +x /usr/local/bin/docker-compose
  87. else
  88. echo "Please install docker-compose and try again."
  89. exit 0;
  90. fi
  91. fi
  92. SUBSTITUTE=( "\${SERVICE_DOMAIN}" "\${DOMAIN}" )
  93. basic_nginx
  94. pushd "${SERVICE_HOME}" >/dev/null
  95. docker-compose up -d
  96. popd >/dev/null
  97. connect_containers_to_network
  98. restart_nginx
  99. [[ SSL_CHOICE == "le" ]] && echo -e "\nMake sure to add autodiscover.${DOMAIN} and autoconfig.${DOMAIN} to your Let's Encrypt certificate."
  100. post_setup_routine
  101. }
  102. if [[ $1 == "letsencrypt" ]];then
  103. $1 $*
  104. else
  105. $1
  106. fi