v0.0.2: pre-productie (Bootstrap 5.3.3, LightPdf klant-PDF, server-setup en release-script)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
bffa053c05
commit
7d302dc405
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# Op de server, als gebruiker crm (tools/release.sh roept dit aan): een geüploade versie installeren en actief maken.
|
||||
#
|
||||
# bash /srv/vanemous-crm/releases/vX.Y.Z/server/activate.sh vX.Y.Z
|
||||
#
|
||||
# Eigen venv per versie; vóór een versiewissel gaat er een kopie van de database naar data/backups/ (migraties
|
||||
# draaien bij het starten). Start de nieuwe versie niet, dan gaat `current` terug naar de vorige.
|
||||
# De laatste 5 versies blijven staan, dus terugrollen is `tools/release.sh crm@server vOUD`.
|
||||
set -euo pipefail
|
||||
|
||||
TAG="${1:?gebruik: activate.sh vX.Y.Z}"
|
||||
ROOT=/srv/vanemous-crm
|
||||
APP=vanemous-crm
|
||||
target="$ROOT/releases/$TAG"
|
||||
|
||||
say() { printf '\033[38;2;185;89;19m▸\033[0m %s\n' "$*"; }
|
||||
fail() { printf 'Fout: %s\n' "$*" >&2; exit 1; }
|
||||
current_version() { [ -L "$ROOT/current" ] && basename "$(readlink "$ROOT/current")" || true; }
|
||||
|
||||
[ "$(id -un)" = crm ] || fail "draai dit als gebruiker crm"
|
||||
[ -f "$target/app.py" ] || fail "$target bestaat niet of is onvolledig"
|
||||
|
||||
if [ ! -f "$target/.installed" ]; then
|
||||
say "venv en afhankelijkheden voor $TAG"
|
||||
python3 -m venv "$target/.venv"
|
||||
"$target/.venv/bin/pip" install --quiet --upgrade pip
|
||||
"$target/.venv/bin/pip" install --quiet -r "$target/requirements.txt" gunicorn
|
||||
"$target/.venv/bin/python" -m compileall -q "$target"/*.py
|
||||
touch "$target/.installed"
|
||||
fi
|
||||
|
||||
previous="$(current_version)"
|
||||
if [ -f "$ROOT/data/crm.db" ] && [ "$previous" != "$TAG" ]; then
|
||||
backup="$ROOT/data/backups/crm-$(date +%Y%m%d-%H%M%S)-${previous:-leeg}-naar-$TAG.db"
|
||||
sqlite3 "$ROOT/data/crm.db" ".backup '$backup'"
|
||||
say "database geback-upt: $(basename "$backup")"
|
||||
fi
|
||||
|
||||
ln -sfn "$target" "$ROOT/current"
|
||||
sudo /usr/bin/systemctl restart $APP
|
||||
|
||||
# even wachten en controleren of de app antwoordt
|
||||
ok=
|
||||
for _ in 1 2 3 4 5 6 7 8 9 10; do
|
||||
sleep 1
|
||||
if curl -fsS -o /dev/null http://127.0.0.1:5050/login; then ok=1; break; fi
|
||||
done
|
||||
if [ -z "$ok" ]; then
|
||||
if [ -n "$previous" ] && [ "$previous" != "$TAG" ]; then
|
||||
ln -sfn "$ROOT/releases/$previous" "$ROOT/current"
|
||||
sudo /usr/bin/systemctl restart $APP
|
||||
fail "$TAG start niet; terug naar $previous. Log: sudo journalctl -u $APP -n 50"
|
||||
fi
|
||||
fail "$TAG start niet. Log: sudo journalctl -u $APP -n 50"
|
||||
fi
|
||||
say "actief: $TAG${previous:+ (was $previous)}"
|
||||
|
||||
# oude versies opruimen (de 5 nieuwste blijven)
|
||||
ls -1d "$ROOT"/releases/v*/ 2>/dev/null | xargs -n1 basename | sort -V | head -n -5 | while read -r old; do
|
||||
[ "$old" = "$TAG" ] || rm -rf "${ROOT:?}/releases/$old"
|
||||
done
|
||||
Reference in New Issue
Block a user