mailcowdockerized.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 -d '[:space:]')"
  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" "mailcowdockerized_dkim-vol-1" "mailcowdockerized_mysql-vol-1" "mailcowdockerized_postfix-vol-1" "mailcowdockerized_redis-vol-1" "mailcowdockerized_rspamd-sock" "mailcowdockerized_rspamd-vol-1" "mailcowdockerized_vmail-vol-1" )
  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. && echo -n "Cloning Mailcow Dockerized repository into "${BASE_DIR}"/data/docker-compose/mailcowdockerized" \
  45. && git submodule add https://github.com/mailcow/mailcow-dockerized.git data/docker-compose/mailcowdockerized >/dev/null \
  46. && exit_response
  47. popd >/dev/null
  48. echo -e "# \e[4mMailcow Dockerized Settings\e[0m"
  49. pushd "${SERVICE_HOME}" >/dev/null
  50. echo -e "\n\e[3m\xe2\x86\x92 Running external script generate_config.sh\e[0m"
  51. echo -e "\nThis script is required by mailcow. It generates the file "mailcow.conf". Both files can be found in the following directory\e"
  52. echo ""
  53. echo " ${SERVICE_HOME}"
  54. echo ""
  55. ./generate_config.sh
  56. popd >/dev/null
  57. echo -e "\n\e[3m\xe2\x86\x92 Finished running generate_config.sh\e[0m"
  58. echo ""
  59. for i in $(grep "image:" "${SERVICE_HOME}"/docker-compose.yml | awk '{print $NF}');do IMAGES+=( \"$i\" );done
  60. configure_ssl
  61. [[ -f "${SERVICE_HOME}"/mailcow.conf ]] && source "${SERVICE_HOME}"/mailcow.conf || echo "Could not find mailcow.conf. Exiting."
  62. sed -i "s/HTTP_PORT=.*/HTTP_PORT=8080/" "${SERVICE_HOME}"/mailcow.conf
  63. sed -i "s/HTTPS_PORT=.*/HTTPS_PORT=8443/" "${SERVICE_HOME}"/mailcow.conf
  64. sed -i "s/HTTP_BIND=.*/HTTP_BIND=127\.0\.0\.1/" "${SERVICE_HOME}"/mailcow.conf
  65. sed -i "s/HTTPS_BIND=.*/HTTPS_BIND=127\.0\.0\.1/" "${SERVICE_HOME}"/mailcow.conf
  66. cat <<-EOF >> "${SERVICE_ENV}"
  67. SERVICE_HOME="${SERVICE_HOME}"
  68. PROPER_NAME="${PROPER_NAME}"
  69. SERVICE_NAME="${SERVICE_NAME}"
  70. SSL_CHOICE=${SSL_CHOICE}
  71. LE_EMAIL=${LE_EMAIL}
  72. DOCKER_COMPOSE=${DOCKER_COMPOSE}
  73. SERVICE_DOMAIN="${MAILCOW_HOSTNAME}"
  74. DOMAIN=${MAILCOW_HOSTNAME#*.}
  75. IMAGES=( ${IMAGES[@]} )
  76. EOF
  77. post_configure_routine
  78. }
  79. setup() {
  80. initial_setup_routine
  81. which docker-compose >/dev/null
  82. if [[ $? == 1 ]];then
  83. echo -e "docker-compose not found. You can now automatically be installed via\n\n\
  84. 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"
  85. prompt_confirm "Continue?"
  86. if [[ $? == 0 ]];then
  87. 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
  88. chmod +x /usr/local/bin/docker-compose
  89. else
  90. echo "Please install docker-compose and try again."
  91. exit 0;
  92. fi
  93. fi
  94. SUBSTITUTE=( "\${SERVICE_DOMAIN}" "\${DOMAIN}" )
  95. basic_nginx
  96. pushd "${SERVICE_HOME}" >/dev/null
  97. docker-compose up -d
  98. popd >/dev/null
  99. connect_containers_to_network
  100. restart_nginx
  101. [[ SSL_CHOICE == "le" ]] && echo -e "\nMake sure to add autodiscover.${DOMAIN} and autoconfig.${DOMAIN} to your Let's Encrypt certificate."
  102. post_setup_routine
  103. }
  104. if [[ $1 == "letsencrypt" ]];then
  105. $1 $*
  106. else
  107. $1
  108. fi