fix(deploy): exécuter sur le serveur + build CI réutilisé (~2 min)
Le deploy SSH depuis ubuntu-24.04 ne rebuildait pas sur 190 (image d'hier). Déploiement sur runner docker-host, artifact Next.js de la CI, Dockerfile.prebuilt, script deploy-prod.sh. workflow_run supprimé au profit de needs:[ci] même fichier. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
80
scripts/deploy-prod.sh
Executable file
80
scripts/deploy-prod.sh
Executable file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env bash
|
||||
# Déploiement prod sur 192.168.1.190 — exécuter SUR LE SERVEUR (runner docker-host).
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="${DEPLOY_ROOT:-/opt/memento}"
|
||||
ARTIFACT_TGZ="${ARTIFACT_TGZ:-}"
|
||||
EXPECTED_COMMIT="${EXPECTED_COMMIT:-}"
|
||||
|
||||
cd "$ROOT"
|
||||
git config --global --add safe.directory "$ROOT" 2>/dev/null || true
|
||||
git fetch origin main
|
||||
git reset --hard origin/main
|
||||
export GIT_COMMIT="$(git rev-parse HEAD)"
|
||||
echo "=== Deploy $GIT_COMMIT ==="
|
||||
|
||||
if [ -n "$EXPECTED_COMMIT" ] && [ "$GIT_COMMIT" != "$EXPECTED_COMMIT" ]; then
|
||||
echo "ERROR: git HEAD $GIT_COMMIT != expected $EXPECTED_COMMIT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker compose up -d postgres
|
||||
for i in $(seq 1 30); do
|
||||
docker compose exec -T postgres pg_isready -U "${POSTGRES_USER:-memento}" >/dev/null 2>&1 && break
|
||||
[ "$i" -eq 30 ] && { echo "Postgres not ready"; exit 1; }
|
||||
sleep 2
|
||||
done
|
||||
|
||||
docker compose exec -T postgres psql -U "${POSTGRES_USER:-memento}" -d "${POSTGRES_DB:-memento}" -c "CREATE EXTENSION IF NOT EXISTS vector;" >/dev/null
|
||||
|
||||
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -q '^memento-note/prisma/migrations/'; then
|
||||
DUMP_FILE="/opt/memento/backups/pre-migrate-$(date +%Y%m%d-%H%M%S).sql.gz"
|
||||
mkdir -p /opt/memento/backups
|
||||
docker compose exec -T postgres pg_dump -U "${POSTGRES_USER:-memento}" -d "${POSTGRES_DB:-memento}" --clean --if-exists | gzip > "$DUMP_FILE"
|
||||
DUMP_SIZE=$(stat -c%s "$DUMP_FILE")
|
||||
if [ "$DUMP_SIZE" -lt 1048576 ]; then
|
||||
echo "ERROR: Dump too small ($DUMP_SIZE bytes)"
|
||||
exit 1
|
||||
fi
|
||||
echo "Backup: $DUMP_FILE ($(( DUMP_SIZE / 1024 ))KB)"
|
||||
else
|
||||
echo "No migration change — skip pre-migrate dump"
|
||||
fi
|
||||
|
||||
export COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1
|
||||
export GIT_COMMIT
|
||||
|
||||
if [ -n "$ARTIFACT_TGZ" ] && [ -f "$ARTIFACT_TGZ" ]; then
|
||||
echo "=== Fast image (CI artifact) ==="
|
||||
tar xzf "$ARTIFACT_TGZ" -C memento-note/
|
||||
export MEMENTO_DOCKERFILE=Dockerfile.prebuilt
|
||||
else
|
||||
echo "=== Full docker build (no artifact) ==="
|
||||
export MEMENTO_DOCKERFILE=Dockerfile
|
||||
fi
|
||||
|
||||
docker compose build memento-note
|
||||
|
||||
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -q '^mcp-server/'; then
|
||||
docker compose build mcp-server
|
||||
fi
|
||||
|
||||
docker compose up -d --remove-orphans --force-recreate memento-note
|
||||
docker compose up -d mcp-server 2>/dev/null || true
|
||||
|
||||
nginx -t 2>/dev/null && systemctl reload nginx 2>/dev/null || true
|
||||
|
||||
for i in $(seq 1 24); do
|
||||
BODY=$(curl -sf --max-time 3 http://127.0.0.1:3000/api/build-info 2>/dev/null || true)
|
||||
ACTUAL=$(echo "$BODY" | jq -r '.commit // empty' 2>/dev/null || true)
|
||||
if [ "$ACTUAL" = "$GIT_COMMIT" ]; then
|
||||
echo "OK build-info commit=$ACTUAL"
|
||||
docker compose ps
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo "ERROR: build-info=$ACTUAL expected=$GIT_COMMIT"
|
||||
docker logs memento-web --tail=40
|
||||
exit 1
|
||||
Reference in New Issue
Block a user