Files
lcbp3/scripts/deploy.sh
T
admin 733f3c3987
CI / CD Pipeline / build (push) Successful in 9m10s
CI / CD Pipeline / deploy (push) Failing after 4m10s
690419:1411 feat: update CI/CD to use SSH key authentication #05
2026-04-19 14:11:51 +07:00

79 lines
2.5 KiB
Bash

#!/bin/bash
# File: scripts/deploy.sh
# LCBP3-DMS Deployment Script v2.0
# Simple direct deploy: build images → restart stack via docker compose
set -e
SOURCE_DIR="/share/np-dms/app/source/lcbp3"
COMPOSE_FILE="$SOURCE_DIR/specs/04-Infrastructure-OPS/04-00-docker-compose/QNAP/app/docker-compose-app.yml"
ENV_FILE="/share/np-dms/app/.env"
API_URL="https://backend.np-dms.work/api"
AUTH_URL="https://lcbp3.np-dms.work"
echo "========================================="
echo "LCBP3-DMS Deployment v2.0"
echo "========================================="
# Read overrides from .env if present
if [ -f "$ENV_FILE" ]; then
ENV_URL=$(grep NEXT_PUBLIC_API_URL "$ENV_FILE" | cut -d '=' -f2 | tr -d '"' | tr -d "'")
[ -n "$ENV_URL" ] && API_URL="$ENV_URL"
ENV_AUTH=$(grep AUTH_URL "$ENV_FILE" | cut -d '=' -f2 | tr -d '"' | tr -d "'")
[ -n "$ENV_AUTH" ] && AUTH_URL="$ENV_AUTH"
fi
if [ ! -f "$COMPOSE_FILE" ]; then
echo "✗ Compose file not found: $COMPOSE_FILE"
exit 1
fi
cd "$SOURCE_DIR"
# เปิด BuildKit เพื่อ layer cache และ parallel build
export DOCKER_BUILDKIT=1
# [1/3] Build images (parallel)
echo "[1/3] Building Docker images (parallel)..."
docker build -f backend/Dockerfile -t lcbp3-backend:latest . &
BACKEND_PID=$!
docker build -f frontend/Dockerfile \
--build-arg NEXT_PUBLIC_API_URL="$API_URL" \
--build-arg AUTH_URL="$AUTH_URL" \
-t lcbp3-frontend:latest . &
FRONTEND_PID=$!
wait $BACKEND_PID || { echo "✗ Backend build failed!"; exit 1; }
wait $FRONTEND_PID || { echo "✗ Frontend build failed!"; exit 1; }
echo "✓ Images built"
# [2/3] Start / restart stack with new images
echo "[2/3] Starting application stack..."
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d --force-recreate
echo "✓ Stack started"
# [3/3] Health check
echo "[3/3] Waiting for backend to be healthy..."
for i in $(seq 1 30); do
if docker exec backend curl -sf http://localhost:3000/health > /dev/null 2>&1 || \
docker exec backend curl -sf http://localhost:3000/ping > /dev/null 2>&1; then
echo "✓ Backend is healthy"
break
fi
if [ "$i" -eq 30 ]; then
echo "✗ Backend health check failed after 60s"
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" logs backend --tail=50
exit 1
fi
echo " Waiting... ($i/30)"
sleep 2
done
echo "========================================="
echo "✓ Deployment completed successfully!"
echo "========================================="