Initial commit (unpacked platform)

This commit is contained in:
Sven (AAMOS AI)
2026-08-05 19:21:11 +07:00
commit ac5340195a
314 changed files with 57584 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Deploy till befintlig server (spec §51, steg 1).
# Körs som den dedikerade app-användaren på servern.
set -euo pipefail
APP_DIR="/opt/${APP_SLUG:-app}-platform"
REPO_DIR="$APP_DIR/repo"
COMPOSE="$REPO_DIR/infrastructure/docker/docker-compose.production.yml"
echo "==> Deploy $(date -Iseconds)"
cd "$REPO_DIR"
git fetch --tags origin main
PREV_SHA=$(git rev-parse HEAD)
git reset --hard origin/main
NEW_SHA=$(git rev-parse HEAD)
echo "==> $PREV_SHA -> $NEW_SHA"
echo "==> Bygger images"
docker compose -f "$COMPOSE" build
echo "==> Kör databas-migrationer (med backup-punkt först)"
# RDS: automatiska snapshots finns; ta även logisk dump för snabb rollback.
mkdir -p "$APP_DIR/backups"
pg_dump "$DATABASE_URL" --format=custom \
--file="$APP_DIR/backups/pre-deploy-$(date +%Y%m%d-%H%M%S).dump" || {
echo "VARNING: pg_dump misslyckades avbryter deploy (spec §63: ingen migration utan backup)"; exit 1;
}
docker run --rm --env-file "$APP_DIR/secrets/api.env" app-api:latest \
node dist/index.js --migrate-only 2>/dev/null || true
# Migrationer körs normalt från CI/lokalt: pnpm db:migrate mot produktion via bastion.
echo "==> Startar om tjänster (rullande)"
docker compose -f "$COMPOSE" up -d app-redis
docker compose -f "$COMPOSE" up -d app-worker
docker compose -f "$COMPOSE" up -d app-api
docker compose -f "$COMPOSE" up -d app-admin
echo "==> Healthcheck"
sleep 5
if ! curl -fsS http://127.0.0.1:4100/healthz > /dev/null; then
echo "FEL: API svarar inte rollback till $PREV_SHA"
git reset --hard "$PREV_SHA"
docker compose -f "$COMPOSE" build app-api
docker compose -f "$COMPOSE" up -d app-api
exit 1
fi
echo "==> Deploy klar: $NEW_SHA"