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
#!/bin/sh
# Stages dist/ for https://atlibs-agent.socialweb.computer/ and serves it from the socialweb.computer gateway's Caddy
# (/etc/caddy/sites/<site>.caddy, which its Caddyfile imports; the *.socialweb.computer record points there).
# The live directory is backed up first: /var/lib/socialweb-computer/<site>-<ts>.tgz (0600).
set -eu
cd "$(dirname "$0")/.."
site=${SITE:-atlibs-agent.socialweb.computer}
ssh="ssh -p ${SSH_PORT:-1997} -o BatchMode=yes ${SSH_TARGET:-root@socialweb.computer}"
scripts/stage.sh --origin "https://$site/"
meta=$(cd dist && ls oauth/*/client-metadata.json | head -1)
tar -C dist -cf - . | $ssh "rm -rf /var/www/$site.new && mkdir -p /var/www/$site.new && tar -C /var/www/$site.new -xf -"
$ssh "SITE=$site sh -s" <<'REMOTE'
set -eu
d=/var/www/$SITE
if [ -d "$d" ]; then mkdir -p /var/lib/socialweb-computer; (umask 077; tar -C /var/www -czf "/var/lib/socialweb-computer/$SITE-$(date -u +%Y%m%dT%H%M%SZ).tgz" "$SITE"); fi
rm -rf "$d.old"; [ ! -d "$d" ] || mv "$d" "$d.old"; mv "$d.new" "$d"; rm -rf "$d.old"
f=/etc/caddy/sites/$SITE.caddy
want=$(printf '%s {\n\troot * %s\n\tfile_server\n}' "$SITE" "$d")
if [ "$(cat "$f" 2>/dev/null)" != "$want" ]; then
printf '%s\n' "$want" > "$f"
caddy validate --config /etc/caddy/Caddyfile >/dev/null 2>&1 || { rm -f "$f"; echo "caddy validate failed: $f removed" >&2; exit 1; }
systemctl reload caddy
fi
REMOTE
for i in 1 2 3 4 5 6 7 8 9 10; do curl -sf -o /dev/null "https://$site/$meta" && { echo "https://$site/"; exit; }; sleep 3; done
echo "https://$site/ does not answer yet (TLS issuance?)" >&2; exit 1