v0.0.3: klant-PDF rekent met het volledige model (totalKg faalde met skip3D); Tectum (configurator) op eigen subdomein achter wachtwoord

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Machiel
2026-10-15 15:01:22 +02:00
co-authored by Claude Opus 5.5
parent 13d0d43fd9
commit 81fc27fa86
6 changed files with 158 additions and 2 deletions
+66
View File
@@ -0,0 +1,66 @@
#!/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"
+28
View File
@@ -0,0 +1,28 @@
# Tectum (configurator) als statische site achter één wachtwoord (server/tectum-setup.sh vult __DOMAIN__ in;
# certbot voegt HTTPS en de doorverwijzing toe; de ACME-controle valt niet onder auth_basic).
server {
listen 80;
listen [::]:80;
server_name __DOMAIN__;
root /srv/www/tectum/current;
index index.html;
auth_basic "Tectum";
auth_basic_user_file /etc/nginx/tectum.htpasswd;
add_header X-Robots-Tag "noindex, nofollow" always;
location / {
try_files $uri $uri/ =404;
# steeds even navragen zodat een nieuwe versie meteen zichtbaar is
add_header Cache-Control "no-cache";
add_header X-Robots-Tag "noindex, nofollow" always;
}
location /assets/ {
access_log off;
add_header Cache-Control "no-cache";
add_header X-Robots-Tag "noindex, nofollow" always;
}
}