67 lines
3.2 KiB
Bash
Executable File
67 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Eenmalig op de server (na server/setup.sh): Tectum, de configurator, als statische site achter een wachtwoord.
|
|
#
|
|
# scp -r server ubuntu@SERVER:
|
|
# ssh -t ubuntu@SERVER sudo bash server/tectum-setup.sh tectum.voorbeeld.nl jij@voorbeeld.nl [gebruikersnaam]
|
|
#
|
|
# Vraagt het wachtwoord als die gebruiker nog niet bestaat; met WACHTWOORD=1 ervoor wijzig je het:
|
|
# ssh -t ubuntu@SERVER sudo WACHTWOORD=1 bash server/tectum-setup.sh tectum.voorbeeld.nl jij@voorbeeld.nl
|
|
# Daarna rolt tools/tectum-release.sh (op je eigen machine) een versie uit naar crm@SERVER.
|
|
# Opnieuw draaien kan: elke stap controleert wat er al is.
|
|
set -euo pipefail
|
|
|
|
DOMAIN="${1:-}"
|
|
EMAIL="${2:-}"
|
|
LOGIN="${3:-vanemous}"
|
|
ROOT=/srv/www/tectum
|
|
SITE=tectum
|
|
HTPASSWD=/etc/nginx/tectum.htpasswd
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
say() { printf '\033[38;2;185;89;19m▸\033[0m %s\n' "$*"; }
|
|
fail() { printf 'Fout: %s\n' "$*" >&2; exit 1; }
|
|
|
|
[ "$(id -u)" = 0 ] || fail "draai dit met sudo"
|
|
[ -n "$DOMAIN" ] && [ -n "$EMAIL" ] || fail "gebruik: sudo bash tectum-setup.sh <domein> <e-mail voor Let's Encrypt> [gebruikersnaam]"
|
|
id crm >/dev/null 2>&1 || fail "gebruiker crm bestaat niet; draai eerst server/setup.sh"
|
|
command -v nginx >/dev/null || fail "nginx ontbreekt; draai eerst server/setup.sh"
|
|
|
|
# --- map: releases komen binnen als crm (zelfde SSH-toegang als de CRM-releases) ----------------
|
|
say "map $ROOT"
|
|
install -d -o root -g root -m 755 /srv/www
|
|
install -d -o crm -g crm -m 755 "$ROOT" "$ROOT/releases"
|
|
|
|
# --- wachtwoord ----------------------------------------------------------------------------------
|
|
touch "$HTPASSWD"
|
|
chown root:www-data "$HTPASSWD"; chmod 640 "$HTPASSWD"
|
|
if [ -n "${WACHTWOORD:-}" ] || ! grep -q "^$LOGIN:" "$HTPASSWD"; then
|
|
say "wachtwoord voor gebruiker $LOGIN"
|
|
read -rsp "Wachtwoord: " pw1 </dev/tty; echo
|
|
read -rsp "Nog een keer: " pw2 </dev/tty; echo
|
|
[ -n "$pw1" ] || fail "leeg wachtwoord"
|
|
[ "$pw1" = "$pw2" ] || fail "wachtwoorden verschillen"
|
|
hash="$(printf '%s' "$pw1" | openssl passwd -6 -stdin)"
|
|
{ grep -v "^$LOGIN:" "$HTPASSWD" || true; printf '%s:%s\n' "$LOGIN" "$hash"; } > "$HTPASSWD.new"
|
|
chown root:www-data "$HTPASSWD.new"; chmod 640 "$HTPASSWD.new"
|
|
mv "$HTPASSWD.new" "$HTPASSWD"
|
|
fi
|
|
|
|
# --- nginx -------------------------------------------------------------------------------
|
|
say "nginx voor $DOMAIN"
|
|
if [ ! -f /etc/nginx/sites-available/$SITE ] || ! grep -q "listen 443" /etc/nginx/sites-available/$SITE; then
|
|
sed "s/__DOMAIN__/$DOMAIN/g" "$HERE/tectum-site.conf" > /etc/nginx/sites-available/$SITE
|
|
fi
|
|
ln -sfn /etc/nginx/sites-available/$SITE /etc/nginx/sites-enabled/$SITE
|
|
nginx -t
|
|
systemctl reload nginx
|
|
|
|
# --- HTTPS -------------------------------------------------------------------------------
|
|
say "certificaat aanvragen (DNS van $DOMAIN moet al naar deze server wijzen)"
|
|
if certbot --nginx -d "$DOMAIN" -m "$EMAIL" --agree-tos --non-interactive --redirect; then
|
|
say "HTTPS actief; verlengen gaat automatisch (certbot.timer)"
|
|
else
|
|
say "let op: certificaat mislukt. Klopt de DNS? Daarna opnieuw: sudo certbot --nginx -d $DOMAIN -m $EMAIL --agree-tos --redirect"
|
|
fi
|
|
|
|
say "klaar. Rol nu vanaf je eigen machine een versie uit: tools/tectum-release.sh crm@$DOMAIN"
|