Files
startover/deploy/deploy.sh
T
Johngreen 8900f1897c fix: prisma db push를 builder 스테이지에서 실행하도록 수정
- docker-compose.prod.yml에 migrate 서비스 추가 (builder target 사용)
- deploy.sh: postgres 먼저 시작 → migrate 실행 → 나머지 서비스 시작
- Dockerfile에서 불필요한 prisma schema 복사 제거 (runner에 prisma CLI 없음)
2026-03-08 23:31:32 +09:00

84 lines
2.3 KiB
Bash

#!/bin/bash
set -euo pipefail
# ===========================================
# Startover Auto Deploy Script
# Triggered by Gitea webhook on push to main
# ===========================================
APP_DIR="$HOME/startover"
LOG_FILE="$APP_DIR/deploy.log"
LOCK_FILE="$APP_DIR/deploy.lock"
GITEA_REPO="http://39.117.244.52:3000/geonhee/startover.git"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Prevent concurrent deploys
if [ -f "$LOCK_FILE" ]; then
LOCK_PID=$(cat "$LOCK_FILE" 2>/dev/null)
if kill -0 "$LOCK_PID" 2>/dev/null; then
log "ERROR: Deploy already running (PID: $LOCK_PID). Skipping."
exit 1
fi
rm -f "$LOCK_FILE"
fi
echo $$ > "$LOCK_FILE"
trap 'rm -f "$LOCK_FILE"' EXIT
log "=== Deploy started ==="
# Navigate to app directory
cd "$APP_DIR"
# Clone or pull
if [ ! -d "$APP_DIR/repo/.git" ]; then
log "Cloning repository..."
git clone "$GITEA_REPO" "$APP_DIR/repo"
cd "$APP_DIR/repo"
else
cd "$APP_DIR/repo"
log "Pulling latest changes..."
git fetch origin
git reset --hard origin/main
fi
log "Current commit: $(git log --oneline -1)"
# Copy env file
if [ -f "$APP_DIR/.env.production" ]; then
cp "$APP_DIR/.env.production" "$APP_DIR/repo/.env.production"
fi
# Step 1: Start postgres and wait for healthy
log "Starting postgres..."
docker compose -f docker-compose.prod.yml --env-file .env.production up -d postgres 2>&1 | tee -a "$LOG_FILE"
log "Waiting for postgres to be healthy..."
sleep 10
# Step 2: Run database migration (uses builder stage with prisma CLI)
log "Applying database schema (prisma db push)..."
docker compose -f docker-compose.prod.yml --env-file .env.production run --rm migrate 2>&1 | tee -a "$LOG_FILE"
log "Database schema applied."
# Step 3: Build and deploy all services
log "Building and deploying all services..."
docker compose -f docker-compose.prod.yml --env-file .env.production up -d --build --remove-orphans 2>&1 | tee -a "$LOG_FILE"
# Wait for services to stabilize
log "Waiting for services to stabilize..."
sleep 10
# Health check
if curl -sf http://localhost/health > /dev/null 2>&1; then
log "Health check PASSED"
else
log "WARNING: Health check failed - services may still be starting"
fi
# Cleanup old images
docker image prune -f >> "$LOG_FILE" 2>&1
log "=== Deploy completed ==="