2018-12-25 17:07:03 +00:00
|
|
|
#!/bin/bash
|
2019-11-21 13:09:34 +00:00
|
|
|
# Entrypoint for Docker Container
|
2018-12-25 17:07:03 +00:00
|
|
|
|
2019-11-21 13:09:34 +00:00
|
|
|
set -e
|
2018-12-25 17:07:03 +00:00
|
|
|
|
2020-01-05 12:02:07 +00:00
|
|
|
default_filter="(|(username={{username}})(mail={{username}}))"
|
|
|
|
|
2020-02-02 16:22:18 +00:00
|
|
|
PORT_TRUSTED=${PORT_TRUSTED:-'3000'}
|
|
|
|
PORT_SANDBOX=${PORT_SANDBOX:-'3003'}
|
|
|
|
PORT_PUBLIC=${PORT_PUBLIC:-'3004'}
|
2020-02-03 00:29:36 +00:00
|
|
|
URL_BASE_TRUSTED=${URL_BASE_TRUSTED:-"http://localhost:${PORT_TRUSTED}"}
|
|
|
|
URL_BASE_SANDBOX=${URL_BASE_SANDBOX:-"http://localhost:${PORT_SANDBOX}"}
|
|
|
|
URL_BASE_PUBLIC=${URL_BASE_PUBLIC:-"http://localhost:${PORT_PUBLIC}"}
|
2020-02-02 16:21:25 +00:00
|
|
|
WWW_HOST=${WWW_HOST:-'0.0.0.0'}
|
2019-11-21 13:09:34 +00:00
|
|
|
WWW_PROXY=${WWW_PROXY:-'false'}
|
2020-02-02 16:21:25 +00:00
|
|
|
WWW_SECRET=${WWW_SECRET:-$(pwgen -1)}
|
2019-11-21 13:09:34 +00:00
|
|
|
WITH_LDAP=${WITH_LDAP:-'false'}
|
|
|
|
LDAP_HOST=${LDAP_HOST:-'ldap'}
|
|
|
|
LDAP_PORT=${LDAP_PORT:-'389'}
|
|
|
|
LDAP_SECURE=${LDAP_SECURE:-'false'}
|
2020-01-05 12:02:07 +00:00
|
|
|
LDAP_BIND_USER=${LDAP_BIND_USER:-'name@company.net'}
|
|
|
|
LDAP_BIND_PASS=${LDAP_BIND_PASS:-'mySecretPassword'}
|
|
|
|
LDAP_FILTER=${LDAP_FILTER:-${default_filter}}
|
|
|
|
LDAP_BASEDN=${LDAP_BASEDN:-ou=users,dc=company}
|
|
|
|
LDAP_UIDTAG=${LDAP_UIDTAG:-'username'}
|
|
|
|
LDAP_MAILTAG=${LDAP_MAILTAG:-'mail'}
|
|
|
|
LDAP_NAMETAG=${LDAP_NAMETAG:-'username'}
|
|
|
|
LDAP_METHOD=${LDAP_METHOD:-'ldapjs'}
|
2020-02-01 18:35:50 +00:00
|
|
|
MONGO_HOST=${MONGO_HOST:-'mongo'}
|
2020-02-02 16:43:06 +00:00
|
|
|
WITH_REDIS=${WITH_REDIS:-'true'}
|
2019-11-21 13:09:34 +00:00
|
|
|
REDIS_HOST=${REDIS_HOST:-'redis'}
|
|
|
|
MYSQL_HOST=${MYSQL_HOST:-'mysql'}
|
|
|
|
MYSQL_DATABASE=${MYSQL_DATABASE:-'mailtrain'}
|
|
|
|
MYSQL_USER=${MYSQL_USER:-'mailtrain'}
|
2019-12-06 13:41:04 +00:00
|
|
|
MYSQL_PASSWORD=${MYSQL_PASSWORD:-'mailtrain'}
|
2020-02-02 16:43:06 +00:00
|
|
|
WITH_ZONE_MTA=${WITH_ZONE_MTA:-'true'}
|
2019-12-31 00:28:08 +00:00
|
|
|
POOL_NAME=${POOL_NAME:-$(hostname)}
|
2020-08-28 13:11:37 +00:00
|
|
|
LOG_LEVEL=${LOG_LEVEL:-'info'}
|
2019-11-21 13:09:34 +00:00
|
|
|
|
|
|
|
# Warning for users that already rely on the MAILTRAIN_SETTING variable
|
|
|
|
# Can probably be removed in the future.
|
|
|
|
MAILTRAIN_SETTING=${MAILTRAIN_SETTINGS:-}
|
|
|
|
if [ ! -z "$MAILTRAIN_SETTING" ]; then
|
2020-01-12 08:31:11 +00:00
|
|
|
echo 'Error: MAILTRAIN_SETTINGS is no longer supported. See README.md'
|
2018-12-25 17:07:03 +00:00
|
|
|
exit 1
|
2019-08-14 11:32:20 +00:00
|
|
|
fi
|
2019-11-21 13:09:34 +00:00
|
|
|
|
2020-01-30 19:07:59 +00:00
|
|
|
if [ -f server/config/production.yaml ]; then
|
2019-11-21 13:09:34 +00:00
|
|
|
echo 'Info: application/production.yaml already provisioned'
|
2019-08-14 11:32:20 +00:00
|
|
|
else
|
2019-11-21 13:09:34 +00:00
|
|
|
echo 'Info: Generating application/production.yaml'
|
|
|
|
|
|
|
|
# Basic configuration
|
2019-12-12 13:20:29 +00:00
|
|
|
cat >> server/config/production.yaml <<EOT
|
2019-12-12 13:19:06 +00:00
|
|
|
www:
|
2020-02-02 16:21:25 +00:00
|
|
|
host: $WWW_HOST
|
2019-12-12 13:19:06 +00:00
|
|
|
proxy: $WWW_PROXY
|
2020-02-02 16:21:25 +00:00
|
|
|
secret: $WWW_SECRET
|
2020-02-02 16:22:18 +00:00
|
|
|
trustedPort: $PORT_TRUSTED
|
|
|
|
sandboxPort: $PORT_SANDBOX
|
|
|
|
publicPort: $PORT_PUBLIC
|
2020-02-03 00:29:36 +00:00
|
|
|
trustedUrlBase: $URL_BASE_TRUSTED
|
|
|
|
sandboxUrlBase: $URL_BASE_SANDBOX
|
|
|
|
publicUrlBase: $URL_BASE_PUBLIC
|
2019-12-12 13:19:06 +00:00
|
|
|
|
|
|
|
mysql:
|
|
|
|
host: $MYSQL_HOST
|
|
|
|
database: $MYSQL_DATABASE
|
|
|
|
user: $MYSQL_USER
|
|
|
|
password: $MYSQL_PASSWORD
|
|
|
|
|
|
|
|
redis:
|
2020-02-02 16:43:06 +00:00
|
|
|
enabled: $WITH_REDIS
|
2019-12-12 13:19:06 +00:00
|
|
|
host: $REDIS_HOST
|
|
|
|
|
|
|
|
builtinZoneMTA:
|
2020-02-02 16:43:06 +00:00
|
|
|
enabled: $WITH_ZONE_MTA
|
2019-12-12 13:19:06 +00:00
|
|
|
log:
|
|
|
|
level: warn
|
|
|
|
mongo: mongodb://${MONGO_HOST}:27017/zone-mta
|
|
|
|
redis: redis://${REDIS_HOST}:6379/2
|
2020-01-06 09:50:42 +00:00
|
|
|
poolName: $POOL_NAME
|
2019-12-12 13:19:06 +00:00
|
|
|
|
|
|
|
queue:
|
|
|
|
processes: 5
|
2020-08-28 13:11:37 +00:00
|
|
|
|
|
|
|
log:
|
|
|
|
level: $LOG_LEVEL
|
2019-11-21 13:09:34 +00:00
|
|
|
EOT
|
2018-12-25 17:07:03 +00:00
|
|
|
|
2019-11-21 13:09:34 +00:00
|
|
|
# Manage LDAP if enabled
|
|
|
|
if [ "$WITH_LDAP" = "true" ]; then
|
|
|
|
echo 'Info: LDAP enabled'
|
|
|
|
cat >> server/config/production.yaml <<EOT
|
2019-12-12 13:19:06 +00:00
|
|
|
ldap:
|
|
|
|
enabled: true
|
|
|
|
host: $LDAP_HOST
|
|
|
|
port: $LDAP_PORT
|
|
|
|
secure: $LDAP_SECURE
|
|
|
|
bindUser: $LDAP_BIND_USER
|
2020-01-12 08:13:55 +00:00
|
|
|
bindPassword: $LDAP_BIND_PASS
|
2019-12-12 13:19:06 +00:00
|
|
|
filter: $LDAP_FILTER
|
|
|
|
baseDN: $LDAP_BASEDN
|
|
|
|
uidTag: $LDAP_UIDTAG
|
2020-01-12 08:13:55 +00:00
|
|
|
mailTag: $LDAP_MAILTAG
|
|
|
|
nameTag: $LDAP_NAMETAG
|
|
|
|
method: $LDAP_METHOD
|
2019-11-21 13:09:34 +00:00
|
|
|
EOT
|
|
|
|
else
|
|
|
|
echo 'Info: LDAP not enabled'
|
|
|
|
cat >> server/config/production.yaml <<EOT
|
2019-12-12 13:19:06 +00:00
|
|
|
ldap:
|
|
|
|
enabled: false
|
2018-12-25 17:07:03 +00:00
|
|
|
EOT
|
2019-11-21 13:09:34 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
2018-12-25 17:07:03 +00:00
|
|
|
|
2019-11-21 13:09:34 +00:00
|
|
|
if [ -f server/services/workers/reports/config/production.yaml ]; then
|
|
|
|
echo 'Info: server/production.yaml already provisioned'
|
|
|
|
else
|
|
|
|
echo 'Info: Generating server/production.yaml'
|
|
|
|
cat > server/services/workers/reports/config/production.yaml <<EOT
|
2019-12-12 13:19:06 +00:00
|
|
|
mysql:
|
|
|
|
host: $MYSQL_HOST
|
|
|
|
log:
|
|
|
|
level: warn
|
2018-12-25 17:07:03 +00:00
|
|
|
EOT
|
2019-11-21 13:09:34 +00:00
|
|
|
fi
|
2018-12-25 17:07:03 +00:00
|
|
|
|
|
|
|
# Wait for the other services to start
|
2019-11-21 13:09:34 +00:00
|
|
|
echo 'Info: Waiting for MySQL Server'
|
|
|
|
while ! nc -z $MYSQL_HOST 3306; do sleep 1; done
|
|
|
|
|
2020-02-02 16:43:06 +00:00
|
|
|
if [ "$WITH_REDIS" = "true" ]; then
|
|
|
|
echo 'Info: Waiting for Redis Server'
|
|
|
|
while ! nc -z $REDIS_HOST 6379; do sleep 1; done
|
|
|
|
fi
|
2019-11-21 13:09:34 +00:00
|
|
|
|
2020-02-02 16:43:06 +00:00
|
|
|
if [ "$WITH_ZONE_MTA" = "true" ]; then
|
|
|
|
echo 'Info: Waiting for MongoDB Server'
|
|
|
|
while ! nc -z $MONGO_HOST 27017; do sleep 1; done
|
|
|
|
fi
|
2018-12-25 17:07:03 +00:00
|
|
|
|
|
|
|
cd server
|
2019-10-02 08:56:50 +00:00
|
|
|
NODE_ENV=production node index.js
|