mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-12-28 11:14:46 +08:00
138 lines
4.7 KiB
Bash
Executable file
138 lines
4.7 KiB
Bash
Executable file
#! /bin/bash
|
|
|
|
OURNAME=09_install_zone_mta.sh
|
|
|
|
echo -e "\n-- Executing ${ORANGE}${OURNAME}${NC} subscript --"
|
|
|
|
|
|
#### ZoneMTA ####
|
|
|
|
# clear previous install
|
|
if [ -f "/etc/systemd/system/zone-mta.service" ]
|
|
then
|
|
$SYSTEMCTL_PATH stop zone-mta || true
|
|
$SYSTEMCTL_PATH disable zone-mta || true
|
|
rm -rf /etc/systemd/system/zone-mta.service
|
|
fi
|
|
rm -rf /var/opt/zone-mta.git
|
|
rm -rf /var/opt/zonemta-wildduck.git
|
|
rm -rf /opt/zone-mta
|
|
rm -rf /etc/zone-mta
|
|
|
|
# fresh install
|
|
cd /var/opt
|
|
git clone --bare git://github.com/zone-eu/zone-mta-template.git zone-mta.git
|
|
git clone --bare git://github.com/nodemailer/zonemta-wildduck.git
|
|
|
|
# create update hooks so we can later deploy to this location
|
|
hook_script zone-mta
|
|
echo "#!/bin/bash
|
|
git --git-dir=/var/opt/zonemta-wildduck.git --work-tree=/opt/zone-mta/plugins/wildduck checkout "\$3" -f
|
|
cd /opt/zone-mta/plugins/wildduck
|
|
rm -rf package-lock.json
|
|
npm install --production --no-optional --no-package-lock --no-audit --ignore-scripts --no-shrinkwrap --progress=false
|
|
sudo $SYSTEMCTL_PATH restart zone-mta || echo \"Failed restarting service\"" > "/var/opt/zonemta-wildduck.git/hooks/update"
|
|
chmod +x "/var/opt/zonemta-wildduck.git/hooks/update"
|
|
|
|
# allow deploy user to restart zone-mta service
|
|
echo "deploy ALL = (root) NOPASSWD: $SYSTEMCTL_PATH restart zone-mta" >> /etc/sudoers.d/zone-mta
|
|
|
|
# checkout files from git to working directory
|
|
mkdir -p /opt/zone-mta
|
|
git --git-dir=/var/opt/zone-mta.git --work-tree=/opt/zone-mta checkout "$ZONEMTA_COMMIT"
|
|
|
|
mkdir -p /opt/zone-mta/plugins/wildduck
|
|
git --git-dir=/var/opt/zonemta-wildduck.git --work-tree=/opt/zone-mta/plugins/wildduck checkout "$WILDDUCK_ZONEMTA_COMMIT"
|
|
|
|
cp -r /opt/zone-mta/config /etc/zone-mta
|
|
sed -i -e 's/port=2525/port=587/g;s/host="127.0.0.1"/host="0.0.0.0"/g;s/authentication=false/authentication=true/g' /etc/zone-mta/interfaces/feeder.toml
|
|
rm -rf /etc/zone-mta/plugins/dkim.toml
|
|
echo '# @include "/etc/wildduck/dbs.toml"' > /etc/zone-mta/dbs-production.toml
|
|
echo 'user="wildduck"
|
|
group="wildduck"' | cat - /etc/zone-mta/zonemta.toml > temp && mv temp /etc/zone-mta/zonemta.toml
|
|
|
|
echo "[[default]]
|
|
address=\"0.0.0.0\"
|
|
name=\"$HOSTNAME\"" > /etc/zone-mta/pools.toml
|
|
|
|
echo "[\"modules/zonemta-loop-breaker\"]
|
|
enabled=\"sender\"
|
|
secret=\"$ZONEMTA_SECRET\"
|
|
algo=\"md5\"" > /etc/zone-mta/plugins/loop-breaker.toml
|
|
|
|
echo "[wildduck]
|
|
enabled=[\"receiver\", \"sender\"]
|
|
|
|
# which interfaces this plugin applies to
|
|
interfaces=[\"feeder\"]
|
|
|
|
# optional hostname to be used in headers
|
|
# defaults to os.hostname()
|
|
hostname=\"$HOSTNAME\"
|
|
|
|
# How long to keep auth records in log
|
|
authlogExpireDays=30
|
|
|
|
# SRS settings for forwarded emails
|
|
|
|
[wildduck.srs]
|
|
# Handle rewriting of forwarded emails
|
|
enabled=true
|
|
# SRS secret value. Must be the same as in the MX side
|
|
secret=\"$SRS_SECRET\"
|
|
# SRS domain, must resolve back to MX
|
|
rewriteDomain=\"$MAILDOMAIN\"
|
|
|
|
[wildduck.dkim]
|
|
# share config with WildDuck installation
|
|
# @include \"/etc/wildduck/dkim.toml\"
|
|
" > /etc/zone-mta/plugins/wildduck.toml
|
|
|
|
cd /opt/zone-mta/keys
|
|
# Many registrar limits dns TXT fields to 255 char. 1024bit is almost too long:-\
|
|
openssl genrsa -out "$MAILDOMAIN-dkim.pem" 1024
|
|
chmod 400 "$MAILDOMAIN-dkim.pem"
|
|
openssl rsa -in "$MAILDOMAIN-dkim.pem" -out "$MAILDOMAIN-dkim.cert" -pubout
|
|
DKIM_DNS="v=DKIM1;k=rsa;p=$(grep -v -e '^-' $MAILDOMAIN-dkim.cert | tr -d "\n")"
|
|
|
|
DKIM_JSON=`DOMAIN="$MAILDOMAIN" SELECTOR="$DKIM_SELECTOR" node -e 'console.log(JSON.stringify({
|
|
domain: process.env.DOMAIN,
|
|
selector: process.env.SELECTOR,
|
|
description: "Default DKIM key for "+process.env.DOMAIN,
|
|
privateKey: fs.readFileSync("/opt/zone-mta/keys/"+process.env.DOMAIN+"-dkim.pem", "UTF-8")
|
|
}))'`
|
|
|
|
cd /opt/zone-mta
|
|
npm install --production --no-optional --no-package-lock --no-audit --ignore-scripts --no-shrinkwrap --unsafe-perm
|
|
|
|
cd /opt/zone-mta/plugins/wildduck
|
|
npm install --production --no-optional --no-package-lock --no-audit --ignore-scripts --no-shrinkwrap --unsafe-perm
|
|
|
|
chown -R deploy:deploy /var/opt/zone-mta.git
|
|
chown -R deploy:deploy /var/opt/zonemta-wildduck.git
|
|
chown -R deploy:deploy /opt/zone-mta
|
|
chown -R wildduck:wildduck /etc/zone-mta
|
|
|
|
# Ensure required files and permissions
|
|
echo "d /opt/zone-mta 0755 deploy deploy
|
|
d /etc/zone-mta 0755 wildduck wildduck" > /etc/tmpfiles.d/zone-mta.conf
|
|
log_script "zone-mta"
|
|
|
|
echo '[Unit]
|
|
Description=Zone Mail Transport Agent
|
|
Conflicts=sendmail.service exim.service postfix.service
|
|
After=mongod.service redis.service
|
|
|
|
[Service]
|
|
Environment="NODE_ENV=production"
|
|
WorkingDirectory=/opt/zone-mta
|
|
ExecStart=/usr/bin/node index.js --config="/etc/zone-mta/zonemta.toml"
|
|
ExecReload=/bin/kill -HUP $MAINPID
|
|
Type=simple
|
|
Restart=always
|
|
SyslogIdentifier=zone-mta
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target' > /etc/systemd/system/zone-mta.service
|
|
|
|
$SYSTEMCTL_PATH enable zone-mta.service
|