mailcow/generate_config.sh

236 lines
6.3 KiB
Bash
Raw Normal View History

2016-12-29 16:06:21 +08:00
#!/bin/bash
2018-03-01 03:08:20 +08:00
set -o pipefail
2018-02-20 15:34:49 +08:00
if grep --help 2>&1 | grep -q -i "busybox"; then
echo "BusybBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\""
exit 1
fi
2018-02-20 15:34:49 +08:00
if cp --help 2>&1 | grep -q -i "busybox"; then
echo "BusybBox cp detected, please install coreutils, \"apk add --no-cache --upgrade coreutils\""
exit 1
fi
2018-07-18 14:47:53 +08:00
if [ -f mailcow.conf ]; then
2016-12-29 16:06:21 +08:00
read -r -p "A config file exists and will be overwritten, are you sure you want to contine? [y/N] " response
case $response in
[yY][eE][sS]|[yY])
mv mailcow.conf mailcow.conf_backup
;;
*)
exit 1
;;
esac
fi
2018-07-18 14:47:53 +08:00
echo "Press enter to confirm the detected value '[value]' where applicable or enter a custom value."
while [ -z "${MAILCOW_HOSTNAME}" ]; do
read -p "Hostname (FQDN): " -e MAILCOW_HOSTNAME
DOTS=${MAILCOW_HOSTNAME//[^.]};
2018-07-18 14:47:53 +08:00
if [ ${#DOTS} -lt 2 ] && [ ! -z ${MAILCOW_HOSTNAME} ]; then
echo "${MAILCOW_HOSTNAME} is not a FQDN"
MAILCOW_HOSTNAME=
fi
done
2018-07-18 14:47:53 +08:00
if [ -a /etc/timezone ]; then
DETECTED_TZ=$(cat /etc/timezone)
elif [ -a /etc/localtime ]; then
DETECTED_TZ=$(readlink /etc/localtime|sed -n 's|^.*zoneinfo/||p')
fi
2018-07-18 14:47:53 +08:00
while [ -z "${MAILCOW_TZ}" ]; do
if [ -z "${DETECTED_TZ}" ]; then
read -p "Timezone: " -e MAILCOW_TZ
else
read -p "Timezone [${DETECTED_TZ}]: " -e MAILCOW_TZ
[ -z "${MAILCOW_TZ}" ] && MAILCOW_TZ=${DETECTED_TZ}
fi
done
2016-12-29 16:06:21 +08:00
MEM_TOTAL=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
if [ ${MEM_TOTAL} -le "2621440" ]; then
echo "Installed memory is <= 2.5 GiB. It is recommended to disable ClamAV to prevent out-of-memory situations."
echo "ClamAV can be re-enabled by setting SKIP_CLAMD=n in mailcow.conf."
read -r -p "Do you want to disable ClamAV now? [Y/n] " response
case $response in
[nN][oO]|[nN])
SKIP_CLAMD=n
;;
*)
SKIP_CLAMD=y
;;
esac
else
SKIP_CLAMD=n
fi
if [ ${MEM_TOTAL} -le "2097152" ]; then
echo "Disabling Solr on low-memory system."
SKIP_SOLR=y
elif [ ${MEM_TOTAL} -le "3670016" ]; then
echo "Installed memory is <= 3.5 GiB. It is recommended to disable Solr to prevent out-of-memory situations."
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."
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."
read -r -p "Do you want to disable Solr now? [Y/n] " response
case $response in
[nN][oO]|[nN])
SKIP_SOLR=n
;;
*)
SKIP_SOLR=y
;;
esac
else
SKIP_SOLR=n
fi
2018-07-18 14:47:53 +08:00
[ ! -f ./data/conf/rspamd/override.d/worker-controller-password.inc ] && echo '# Placeholder' > ./data/conf/rspamd/override.d/worker-controller-password.inc
2016-12-29 16:06:21 +08:00
cat << EOF > mailcow.conf
2016-12-28 18:36:15 +08:00
# ------------------------------
2016-12-10 03:39:02 +08:00
# mailcow web ui configuration
2016-12-28 18:36:15 +08:00
# ------------------------------
# example.org is _not_ a valid hostname, use a fqdn here.
2016-12-10 03:39:02 +08:00
# Default admin user is "admin"
# Default password is "moohoo"
2016-12-30 04:12:07 +08:00
MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
2016-12-28 18:36:15 +08:00
# ------------------------------
# SQL database configuration
2016-12-28 18:36:15 +08:00
# ------------------------------
2016-12-10 03:39:02 +08:00
DBNAME=mailcow
DBUSER=mailcow
2017-01-03 17:33:06 +08:00
2016-12-28 03:28:45 +08:00
# Please use long, random alphanumeric strings (A-Za-z0-9)
DBPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 | head -c 28)
DBROOT=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 | head -c 28)
2016-12-28 18:36:15 +08:00
# ------------------------------
2017-02-28 17:00:35 +08:00
# HTTP/S Bindings
2016-12-28 18:36:15 +08:00
# ------------------------------
2017-02-23 23:23:30 +08:00
2017-02-28 17:00:35 +08:00
# You should use HTTPS, but in case of SSL offloaded reverse proxies:
2017-03-06 22:42:45 +08:00
HTTP_PORT=80
2017-02-28 17:00:35 +08:00
HTTP_BIND=0.0.0.0
HTTPS_PORT=443
2017-02-23 23:23:30 +08:00
HTTPS_BIND=0.0.0.0
# ------------------------------
# Other bindings
# ------------------------------
# You should leave that alone
# Format: 11.22.33.44:25 or 0.0.0.0:465 etc.
# Do _not_ use IP:PORT in HTTP(S)_BIND or HTTP(S)_PORT
2017-02-23 23:23:30 +08:00
2017-01-03 17:33:06 +08:00
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
POP_PORT=110
POPS_PORT=995
SIEVE_PORT=4190
2017-07-11 03:29:03 +08:00
DOVEADM_PORT=127.0.0.1:19991
SQL_PORT=127.0.0.1:13306
2017-01-03 17:33:06 +08:00
# Your timezone
TZ=${MAILCOW_TZ}
2017-05-27 05:01:34 +08:00
# Fixed project name
2018-04-13 20:13:24 +08:00
COMPOSE_PROJECT_NAME=mailcowdockerized
2017-05-27 05:01:34 +08:00
# Garbage collector cleanup
# Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring
# How long should objects remain in the garbage until they are being deleted? (value in minutes)
# Check interval is hourly
MAILDIR_GC_TIME=1440
# Additional SAN for the certificate
#
# You can use wildcard records to create specific names for every domain you add to mailcow.
# Example: Add domains "example.com" and "example.net" to mailcow, change ADDITIONAL_SAN to a value like:
#ADDITIONAL_SAN=imap.*,smtp.*
# This will expand the certificate to "imap.example.com", "smtp.example.com", "imap.example.net", "imap.example.net"
# plus every domain you add in the future.
#
# You can also just add static names...
#ADDITIONAL_SAN=srv1.example.net
# ...or combine wildcard and static names:
#ADDITIONAL_SAN=imap.*,srv1.example.com
#
ADDITIONAL_SAN=
# Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
SKIP_LETS_ENCRYPT=n
# Skip IPv4 check in ACME container - y/n
SKIP_IP_CHECK=n
# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
SKIP_CLAMD=n
# Skip Solr on low-memory systems
SKIP_SOLR=${SKIP_SOLR}
# Solr heap size in MB, there is no recommendation, please see Solr docs.
# Solr is a prone to run OOM and should be monitored. Unmonitored Solr setups are not recommended.
SOLR_HEAP=1024
# Enable watchdog (watchdog-mailcow) to restart unhealthy containers (experimental)
2017-09-20 16:56:49 +08:00
USE_WATCHDOG=n
# Send notifications by mail (no DKIM signature, sent from watchdog@MAILCOW_HOSTNAME)
# Can by multiple rcpts, NO quotation marks
#WATCHDOG_NOTIFY_EMAIL=a@example.com,b@example.com,c@example.com
#WATCHDOG_NOTIFY_EMAIL=
2017-09-20 16:56:49 +08:00
2018-01-27 23:52:56 +08:00
# Max log lines per service to keep in Redis logs
LOG_LINES=9999
# Internal IPv4 /24 subnet, format n.n.n (expands to n.n.n.0/24)
2018-01-27 23:52:56 +08:00
IPV4_NETWORK=172.22.1
# Internal IPv6 subnet in fc00::/7
2018-01-27 23:52:56 +08:00
IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
# Use this IPv4 for outgoing connections (SNAT)
2018-05-04 04:31:20 +08:00
#SNAT_TO_SOURCE=
# Use this IPv6 for outgoing connections (SNAT)
#SNAT6_TO_SOURCE=
2018-01-27 23:52:56 +08:00
# Create or override API key for web uI
# You _must_ define API_ALLOW_FROM, which is a comma separated list of IPs
2018-10-11 18:01:37 +08:00
# API_KEY allowed chars: a-z, A-Z, 0-9, -
#API_KEY=
2018-06-08 18:35:23 +08:00
#API_ALLOW_FROM=127.0.0.1,1.2.3.4
2016-12-29 16:06:21 +08:00
EOF
2017-06-15 16:20:54 +08:00
2017-06-15 23:39:41 +08:00
mkdir -p data/assets/ssl
2017-06-15 16:20:54 +08:00
# copy but don't overwrite existing certificate
cp -n data/assets/ssl-example/*.pem data/assets/ssl/