conf | |||||
core/certbot |
## mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, mort.coffee) | |||||
serve(mort.coffee, www) | |||||
} | |||||
server { https_redirect(mort.coffee) } | |||||
server { listen(www.mort.coffee) redirect(https://mort.coffee) } | |||||
server { listen_ssl(mort.coffee, www.mort.coffee) redirect(https://mort.coffee) } | |||||
## s.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, s.mort.coffee) | |||||
serve(mort.coffee, s) | |||||
} | |||||
server { https_redirect(s.mort.coffee) } | |||||
## bendik.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, bendik.mort.coffee) | |||||
autoindex on; | |||||
root /home/bendik/www; | |||||
} | |||||
server { https_redirect(bendik.mort.coffee) } | |||||
## pass.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, pass.mort.coffee) | |||||
proxy(http://localhost:8080) | |||||
} | |||||
server { https_redirect(pass.mort.coffee) } | |||||
## git.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, git.mort.coffee) | |||||
proxy(http://localhost:8082) | |||||
} | |||||
server { https_redirect(git.mort.coffee) } | |||||
## irc.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, irc.mort.coffee) | |||||
proxy(http://localhost:8087) | |||||
wsproxy(http://localhost:8087, socket.io/) | |||||
} | |||||
server { https_redirect(irc.mort.coffee) } | |||||
## tpb.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, tpb.mort.coffee) | |||||
proxy(http://localhost:8086) | |||||
} | |||||
server { https_redirect(tpb.mort.coffee) } | |||||
## shoplist.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, shoplist.mort.coffee) | |||||
proxy(http://localhost:8090) | |||||
} | |||||
server { https_redirect(shoplist.mort.coffee) } | |||||
## sonen.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, sonen.mort.coffee) | |||||
proxy(http://localhost:8089) | |||||
} | |||||
server { https_redirect(sonen.mort.coffee) } | |||||
## beer.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, beer.mort.coffee) | |||||
proxy(http://localhost:8091) | |||||
} | |||||
server { https_redirect(beer.mort.coffee) } | |||||
## colors.mort.coffee | |||||
server { | |||||
listen_ssl(mort.coffee, colors.mort.coffee) | |||||
proxy(http://localhost:8092) | |||||
} | |||||
server { https_redirect(colors.mort.coffee) } |
# shared | |||||
m4_include(`shared.m4') | |||||
# basic | |||||
m4_include(`basic.m4') |
upstream php-handler { | |||||
server unix:/run/php/php7.0-fpm.sock; | |||||
} | |||||
# A list of certificates, separated by semicolons. | |||||
# The domains in the certificate is separated by commas. | |||||
domains=" | |||||
example.com: | |||||
example.com, | |||||
foo.example.com, | |||||
bar.example.com, | |||||
baz.example.com; | |||||
example.net: | |||||
example.net, | |||||
foo.example.net, | |||||
bar.example.com;" | |||||
email="example@example.com" | |||||
dryrun=0 | |||||
testcert=0 | |||||
precmd="systemctl stop nginx" | |||||
postcmd="systemctl start nginx" |
m4_define(`listen', `` | |||||
listen 80; | |||||
server_name $1;'') | |||||
m4_define(`listen_ssl', `` | |||||
listen 443 ssl; | |||||
server_name $2; | |||||
ssl_certificate /etc/letsencrypt/live/$1/fullchain.pem; | |||||
ssl_certificate_key /etc/letsencrypt/live/$1/privkey.pem; | |||||
ssl_trusted_certificate /etc/letsencrypt/live/$1/fullchain.pem;'') | |||||
m4_define(`redirect', `` | |||||
return 302 $1;'') | |||||
m4_define(`redirect_perm', `` | |||||
return 301 $1;'') | |||||
m4_define(`https_redirect', ` | |||||
listen($1) | |||||
redirect(https://$1$request_uri)') | |||||
m4_define(`wsproxy', `` | |||||
location /$2 { | |||||
proxy_pass $1; | |||||
proxy_set_header Upgrade $http_upgrade; | |||||
proxy_set_header Connection "upgrade"; | |||||
proxy_set_header X-Real-IP $remote_addr; | |||||
}'') | |||||
m4_define(`proxy', `` | |||||
location /$2 { | |||||
proxy_pass $1; | |||||
proxy_set_header X-Real-IP $remote_addr; | |||||
}'') | |||||
m4_define(`serve', `` | |||||
autoindex on; | |||||
root /var/www/$1/$2/public;'') | |||||
m4_include(`main.m4') |
#!/bin/sh | |||||
set -e | |||||
out="/etc/nginx/sites-available/autogen" | |||||
if ! [ -w "$out" ]; then | |||||
echo "Must have write access to $out." | |||||
exit 1 | |||||
fi | |||||
cp "$out" "$out.bak" | |||||
output="$(m4 -P -I ../conf/nginx nginx.m4)" | |||||
echo "$output" \ | |||||
| sed '/^\s*$/d' \ | |||||
| tee "$out" >/dev/null | |||||
if ! sudo nginx -t; then | |||||
echo "Reverting to backup file." | |||||
mv "$out.bak" "$out" | |||||
else | |||||
echo "Press enter to restart nginx." | |||||
read _ | |||||
echo "Restarting..." | |||||
systemctl restart nginx | |||||
fi |
#!/bin/bash | |||||
set -e | |||||
. ../conf/ssl.conf | |||||
user="$(stat -c %U "$0")" | |||||
asuser() { | |||||
echo "Running as $user: " "$@" | |||||
sudo -u "$user" "$@" | |||||
} | |||||
printcol() { | |||||
str="$1" | |||||
shift | |||||
for x in "$@"; do | |||||
tput $x | |||||
done | |||||
printf "%s%s\n" "$str" $(tput sgr0) | |||||
} | |||||
printed=0 | |||||
printstatus() { | |||||
if [ "$printed" = 1 ]; then | |||||
echo | |||||
fi | |||||
printed=1 | |||||
printcol "$1" bold | |||||
} | |||||
certbot="https://github.com/certbot/certbot.git" | |||||
validate() { | |||||
if [ -z "$email" ]; then | |||||
echo "Missing config 'email'." | |||||
elif [ -z "$domains" ]; then | |||||
echo "Missing config 'domains'." | |||||
elif [ -z "$testcert" ]; then | |||||
echo "Missing config 'testcert'." | |||||
elif [ -z "$dryrun" ]; then | |||||
echo "Missing config 'dryrun'." | |||||
elif [ -z "$precmd" ]; then | |||||
echo "Missing config 'precmd'." | |||||
elif [ -z "$postcmd" ]; then | |||||
echo "Missing config 'postcmd'." | |||||
else | |||||
return 0 | |||||
fi | |||||
exit 1 | |||||
} | |||||
validate | |||||
if ! [ -d certbot ]; then | |||||
asuser git clone "$certbot" certbot | |||||
fi | |||||
if [ "$dryrun" = 1 ]; then | |||||
printstatus "Running a dry run." | |||||
fi | |||||
cd certbot | |||||
printstatus "Updating certbot..." | |||||
# necessary because certbot sometime schanges itself | |||||
asuser git reset --hard | |||||
asuser git pull | |||||
printstatus "Running pre command..." | |||||
echo "$precmd" | |||||
sh -c "$precmd" | |||||
printstatus "Obtaining certificates..." | |||||
domains="$(echo "$domains" \ | |||||
| tr '\n' ' ' \ | |||||
| sed 's/\s*//g; s/\;/\n/g')" | |||||
while read line; do | |||||
if [ -z "$line" ]; then | |||||
continue | |||||
fi | |||||
cname=$(echo "$line" | sed 's/:.*//') | |||||
dom=$(echo "$line" | sed 's/.*://') | |||||
printstatus "Certificate $cname" | |||||
if ./certbot-auto certonly \ | |||||
-n --standalone --agree-tos \ | |||||
-m "$email" \ | |||||
--cert-name "$cname" \ | |||||
$([ "$testcert" = 1 ] && echo --test-cert) \ | |||||
$([ "$dryrun" = 1 ] && echo "--dry-run") \ | |||||
-d "$dom" | |||||
then | |||||
echo | |||||
printcol "Certbot succeeded." "setaf 2" "bold" | |||||
else | |||||
fail=1 | |||||
echo | |||||
printcol "Certbot failed." "setaf 1" "bold" | |||||
fi | |||||
done <<< "$domains" | |||||
printstatus "Running post command..." | |||||
echo "$postcmd" | |||||
sh -c "$postcmd" | |||||
if [ "$fail" = 1 ]; then | |||||
exit 1 | |||||
else | |||||
exit 0 | |||||
fi |
#!/bin/sh | |||||
cd "$(dirname "$0")" | |||||
cd core | |||||
if [ "$1" = ssl ]; then | |||||
./ssl.sh | |||||
elif [ "$1" = nginx ]; then | |||||
./nginx.sh | |||||
else | |||||
echo "Usage: $0 <ssl | nginx>" | |||||
exit 1 | |||||
fi |