79 lines
2.5 KiB
Bash
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 "========================================="
|