generate_config.sh 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. #!/usr/bin/env bash
  2. set -o pipefail
  3. if [[ "$(uname -r)" =~ ^4\.15\.0-60 ]]; then
  4. echo "DO NOT RUN mailcow ON THIS UBUNTU KERNEL!";
  5. echo "Please update to 5.x or use another distribution."
  6. exit 1
  7. fi
  8. if [[ "$(uname -r)" =~ ^4\.4\. ]]; then
  9. if grep -q Ubuntu <<< $(uname -a); then
  10. echo "DO NOT RUN mailcow ON THIS UBUNTU KERNEL!";
  11. echo "Please update to linux-generic-hwe-16.04 by running \"apt-get install --install-recommends linux-generic-hwe-16.04\""
  12. fi
  13. exit 1
  14. fi
  15. if grep --help 2>&1 | grep -q -i "busybox"; then
  16. echo "BusybBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\""
  17. exit 1
  18. fi
  19. if cp --help 2>&1 | grep -q -i "busybox"; then
  20. echo "BusybBox cp detected, please install coreutils, \"apk add --no-cache --upgrade coreutils\""
  21. exit 1
  22. fi
  23. if [ -f mailcow.conf ]; then
  24. read -r -p "A config file exists and will be overwritten, are you sure you want to contine? [y/N] " response
  25. case $response in
  26. [yY][eE][sS]|[yY])
  27. mv mailcow.conf mailcow.conf_backup
  28. chmod 600 mailcow.conf_backup
  29. ;;
  30. *)
  31. exit 1
  32. ;;
  33. esac
  34. fi
  35. echo "Press enter to confirm the detected value '[value]' where applicable or enter a custom value."
  36. while [ -z "${MAILCOW_HOSTNAME}" ]; do
  37. read -p "Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: " -e MAILCOW_HOSTNAME
  38. DOTS=${MAILCOW_HOSTNAME//[^.]};
  39. if [ ${#DOTS} -lt 2 ] && [ ! -z ${MAILCOW_HOSTNAME} ]; then
  40. echo "${MAILCOW_HOSTNAME} is not a FQDN"
  41. MAILCOW_HOSTNAME=
  42. fi
  43. done
  44. if [ -a /etc/timezone ]; then
  45. DETECTED_TZ=$(cat /etc/timezone)
  46. elif [ -a /etc/localtime ]; then
  47. DETECTED_TZ=$(readlink /etc/localtime|sed -n 's|^.*zoneinfo/||p')
  48. fi
  49. while [ -z "${MAILCOW_TZ}" ]; do
  50. if [ -z "${DETECTED_TZ}" ]; then
  51. read -p "Timezone: " -e MAILCOW_TZ
  52. else
  53. read -p "Timezone [${DETECTED_TZ}]: " -e MAILCOW_TZ
  54. [ -z "${MAILCOW_TZ}" ] && MAILCOW_TZ=${DETECTED_TZ}
  55. fi
  56. done
  57. MEM_TOTAL=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
  58. if [ ${MEM_TOTAL} -le "2621440" ]; then
  59. echo "Installed memory is <= 2.5 GiB. It is recommended to disable ClamAV to prevent out-of-memory situations."
  60. echo "ClamAV can be re-enabled by setting SKIP_CLAMD=n in mailcow.conf."
  61. read -r -p "Do you want to disable ClamAV now? [Y/n] " response
  62. case $response in
  63. [nN][oO]|[nN])
  64. SKIP_CLAMD=n
  65. ;;
  66. *)
  67. SKIP_CLAMD=y
  68. ;;
  69. esac
  70. else
  71. SKIP_CLAMD=n
  72. fi
  73. if [ ${MEM_TOTAL} -le "2097152" ]; then
  74. echo "Disabling Solr on low-memory system."
  75. SKIP_SOLR=y
  76. elif [ ${MEM_TOTAL} -le "3670016" ]; then
  77. echo "Installed memory is <= 3.5 GiB. It is recommended to disable Solr to prevent out-of-memory situations."
  78. echo "Solr is a prone to run OOM and should be monitored. The default Solr heap size is 1024 MiB and should be set in mailcow.conf according to your expected load."
  79. echo "Solr can be re-enabled by setting SKIP_SOLR=n in mailcow.conf but will refuse to start with less than 2 GB total memory."
  80. read -r -p "Do you want to disable Solr now? [Y/n] " response
  81. case $response in
  82. [nN][oO]|[nN])
  83. SKIP_SOLR=n
  84. ;;
  85. *)
  86. SKIP_SOLR=y
  87. ;;
  88. esac
  89. else
  90. SKIP_SOLR=n
  91. fi
  92. [ ! -f ./data/conf/rspamd/override.d/worker-controller-password.inc ] && echo '# Placeholder' > ./data/conf/rspamd/override.d/worker-controller-password.inc
  93. cat << EOF > mailcow.conf
  94. # ------------------------------
  95. # mailcow web ui configuration
  96. # ------------------------------
  97. # example.org is _not_ a valid hostname, use a fqdn here.
  98. # Default admin user is "admin"
  99. # Default password is "moohoo"
  100. MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
  101. # ------------------------------
  102. # SQL database configuration
  103. # ------------------------------
  104. DBNAME=mailcow
  105. DBUSER=mailcow
  106. # Please use long, random alphanumeric strings (A-Za-z0-9)
  107. DBPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 | head -c 28)
  108. DBROOT=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 | head -c 28)
  109. # ------------------------------
  110. # HTTP/S Bindings
  111. # ------------------------------
  112. # You should use HTTPS, but in case of SSL offloaded reverse proxies:
  113. # Might be important: This will also change the binding within the container.
  114. # If you use a proxy within Docker, point it to the ports you set below.
  115. HTTP_PORT=80
  116. HTTP_BIND=0.0.0.0
  117. HTTPS_PORT=443
  118. HTTPS_BIND=0.0.0.0
  119. # ------------------------------
  120. # Other bindings
  121. # ------------------------------
  122. # You should leave that alone
  123. # Format: 11.22.33.44:25 or 0.0.0.0:465 etc.
  124. # Do _not_ use IP:PORT in HTTP(S)_BIND or HTTP(S)_PORT
  125. SMTP_PORT=25
  126. SMTPS_PORT=465
  127. SUBMISSION_PORT=587
  128. IMAP_PORT=143
  129. IMAPS_PORT=993
  130. POP_PORT=110
  131. POPS_PORT=995
  132. SIEVE_PORT=4190
  133. DOVEADM_PORT=127.0.0.1:19991
  134. SQL_PORT=127.0.0.1:13306
  135. SOLR_PORT=127.0.0.1:18983
  136. REDIS_PORT=127.0.0.1:7654
  137. # Your timezone
  138. TZ=${MAILCOW_TZ}
  139. # Fixed project name
  140. COMPOSE_PROJECT_NAME=mailcowdockerized
  141. # Set this to "allow" to enable the anyone pseudo user. Disabled by default.
  142. # When enabled, ACL can be created, that apply to "All authenticated users"
  143. # This should probably only be activated on mail hosts, that are used exclusivly by one organisation.
  144. # Otherwise a user might share data with too many other users.
  145. ACL_ANYONE=disallow
  146. # Garbage collector cleanup
  147. # Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring
  148. # How long should objects remain in the garbage until they are being deleted? (value in minutes)
  149. # Check interval is hourly
  150. MAILDIR_GC_TIME=1440
  151. # Additional SAN for the certificate
  152. #
  153. # You can use wildcard records to create specific names for every domain you add to mailcow.
  154. # Example: Add domains "example.com" and "example.net" to mailcow, change ADDITIONAL_SAN to a value like:
  155. #ADDITIONAL_SAN=imap.*,smtp.*
  156. # This will expand the certificate to "imap.example.com", "smtp.example.com", "imap.example.net", "imap.example.net"
  157. # plus every domain you add in the future.
  158. #
  159. # You can also just add static names...
  160. #ADDITIONAL_SAN=srv1.example.net
  161. # ...or combine wildcard and static names:
  162. #ADDITIONAL_SAN=imap.*,srv1.example.com
  163. #
  164. ADDITIONAL_SAN=
  165. # Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
  166. SKIP_LETS_ENCRYPT=n
  167. # Create seperate certificates for all domains - y/n
  168. # this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames
  169. # see https://wiki.dovecot.org/SSL/SNIClientSupport
  170. ENABLE_SSL_SNI=n
  171. # Skip IPv4 check in ACME container - y/n
  172. SKIP_IP_CHECK=n
  173. # Skip HTTP verification in ACME container - y/n
  174. SKIP_HTTP_VERIFICATION=n
  175. # Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
  176. SKIP_CLAMD=${SKIP_CLAMD}
  177. # Skip Solr on low-memory systems or if you do not want to store a readable index of your mails in solr-vol-1.
  178. SKIP_SOLR=${SKIP_SOLR}
  179. # Solr heap size in MB, there is no recommendation, please see Solr docs.
  180. # Solr is a prone to run OOM and should be monitored. Unmonitored Solr setups are not recommended.
  181. SOLR_HEAP=1024
  182. # Enable watchdog (watchdog-mailcow) to restart unhealthy containers (experimental)
  183. USE_WATCHDOG=n
  184. # Allow admins to log into SOGo as email user (without any password)
  185. ALLOW_ADMIN_EMAIL_LOGIN=n
  186. # Send notifications by mail (sent from watchdog@MAILCOW_HOSTNAME)
  187. # CAUTION:
  188. # 1. You should use external recipients
  189. # 2. Mails are sent unsigned (no DKIM)
  190. # 3. If you use DMARC, create a separate DMARC policy ("v=DMARC1; p=none;" in _dmarc.MAILCOW_HOSTNAME)
  191. # Multiple rcpts allowed, NO quotation marks, NO spaces
  192. #WATCHDOG_NOTIFY_EMAIL=a@example.com,b@example.com,c@example.com
  193. #WATCHDOG_NOTIFY_EMAIL=
  194. # Notify about banned IP (includes whois lookup)
  195. WATCHDOG_NOTIFY_BAN=y
  196. # Checks if mailcow is an open relay. Requires a SAL. More checks will follow.
  197. # https://www.servercow.de/mailcow?lang=en
  198. # https://www.servercow.de/mailcow?lang=de
  199. # No data is collected. Opt-in and anonymous.
  200. # Will only work with unmodified mailcow setups.
  201. WATCHDOG_EXTERNAL_CHECKS=n
  202. # Max log lines per service to keep in Redis logs
  203. LOG_LINES=9999
  204. # Internal IPv4 /24 subnet, format n.n.n (expands to n.n.n.0/24)
  205. IPV4_NETWORK=172.22.1
  206. # Internal IPv6 subnet in fc00::/7
  207. IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
  208. # Use this IPv4 for outgoing connections (SNAT)
  209. #SNAT_TO_SOURCE=
  210. # Use this IPv6 for outgoing connections (SNAT)
  211. #SNAT6_TO_SOURCE=
  212. # Create or override API key for web ui
  213. # You _must_ define API_ALLOW_FROM, which is a comma separated list of IPs
  214. # API_KEY allowed chars: a-z, A-Z, 0-9, -
  215. #API_KEY=
  216. #API_ALLOW_FROM=172.22.1.1,127.0.0.1
  217. # mail_home is ~/Maildir
  218. MAILDIR_SUB=Maildir
  219. # SOGo session timeout in minutes
  220. SOGO_EXPIRE_SESSION=480
  221. EOF
  222. mkdir -p data/assets/ssl
  223. chmod 600 mailcow.conf
  224. # copy but don't overwrite existing certificate
  225. cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/