forked from postalsys/emailengine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.sh
151 lines (116 loc) · 3.62 KB
/
install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash
set -e
DOMAIN_NAME=$1
EMAIL_ADDRESS=$2
APP_URL="https://github.com/postalsys/emailengine/releases/latest/download/emailengine.tar.gz"
show_info () {
echo "Usage: $0 <domain-name> <email-address>"
echo "Where"
echo " <domain-name> is the domain name for EmailEngine, eg. \"example.com\""
echo " <email-address> is your email address, needed to generate HTTPS certs. Must be valid."
}
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
show_info
exit 1
fi
if [[ -z $DOMAIN_NAME ]]; then
show_info
exit
fi
if [[ -z $EMAIL_ADDRESS ]]; then
show_info
exit
fi
if [ $DOMAIN_NAME = "help" ]; then
show_info
exit
fi
# Install Redis and Nginx
apt-get update
apt-get install redis-server nginx wget -q -y
TMPDIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'ee')
cd $TMPDIR
# Download EmailEngine executable
if ! [ -x `command -v wget` ]; then
if ! [ -x `command -v wget` ]; then
echo "Can not download application"
exit 1
else
curl "$APP_URL" -L -o emailengine.tar.gz
fi
else
# use wget do download EmailEngine
wget "$APP_URL"
fi
tar xzf emailengine.tar.gz
rm -rf emailengine.tar.gz
mv emailengine /opt
chmod +x /opt/emailengine
# Setup certs for Nginx
openssl req -subj "/CN=${DOMAIN_NAME}/O=EmailEngine./C=US" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout privkey.pem -out fullchain.pem
chmod 0600 privkey.pem
mv privkey.pem /etc/ssl/private/emailengine-privkey.pem
mv fullchain.pem /etc/ssl/certs/emailengine-fullchain.pem
rm -rf $TMPDIR
# Create unit file
echo "[Unit]
Description=EmailEngine
After=redis-server
[Service]
# Configure environment variables
Environment=\"EENGINE_REDIS=redis://127.0.0.1:6379/8\"
Environment=\"EENGINE_PORT=3000\"
# Folder where EmailEngine executable is located
WorkingDirectory=/opt
# EmailEngine does not require any special privileges
User=www-data
Group=www-data
# Run the EmailEngine executable
ExecStart=/opt/emailengine
Type=simple
Restart=always
SyslogIdentifier=emailengine
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/emailengine.service
systemctl daemon-reload
systemctl enable emailengine
systemctl restart emailengine
echo "server {
listen 80;
listen 443 ssl http2;
server_name ${DOMAIN_NAME};
ssl_certificate_key /etc/ssl/private/emailengine-privkey.pem;
ssl_certificate /etc/ssl/certs/emailengine-fullchain.pem;
location / {
client_max_body_size 50M;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Scheme \$scheme;
proxy_set_header Host \$http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:3000; # <- use EmailEngine's HTTP port
}
# Enforce HTTPS
if (\$scheme != \"https\") {
return 301 https://\$host\$request_uri;
}
}" > /etc/nginx/sites-available/emailengine.conf
if [ ! -f "/etc/nginx/sites-enabled/emailengine.conf" ]
then
ln -s /etc/nginx/sites-available/emailengine.conf /etc/nginx/sites-enabled/emailengine.conf
fi
# check config
nginx -t
cd
curl https://get.acme.sh | sh -s email="${EMAIL_ADDRESS}"
/root/.acme.sh/acme.sh --issue --nginx --server letsencrypt \
-d "${DOMAIN_NAME}" \
--key-file /etc/ssl/private/emailengine-privkey.pem \
--ca-file /etc/ssl/certs/emailengine-chain.pem \
--fullchain-file /etc/ssl/certs/emailengine-fullchain.pem \
--reloadcmd "/bin/systemctl reload nginx"
echo "EmailEngine was set up"