diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 55c4bab..3ea2c92 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -85,15 +85,41 @@ jobs: run: | cd /opt/zhixi/backend && npx prisma generate - - name: Restart API service + - name: Start API service run: | - sudo systemctl reset-failed zhixi-api 2>/dev/null || true - sudo systemctl restart zhixi-api - sleep 5 - if sudo systemctl is-active zhixi-api; then - echo "[deploy] zhixi-api active OK" + # Stop existing service + sudo systemctl stop zhixi-api 2>/dev/null || true + sleep 2 + # Try running directly to validate app works + cd /opt/zhixi/backend + PORT=3000 nohup node dist/main.js > /tmp/zhixi-direct.log 2>&1 & + DIRECT_PID=$! + echo "[deploy] Direct PID: $DIRECT_PID" + # Wait for healthy response (up to 15s) + HEALTHY=0 + for i in $(seq 1 15); do + sleep 1 + if curl -sf http://localhost:3000/api > /dev/null 2>&1; then + echo "[deploy] Direct app healthy after ${i}s!" + HEALTHY=1 + break + fi + if ! kill -0 $DIRECT_PID 2>/dev/null; then + echo "[deploy] Direct app died — log:" + tail -30 /tmp/zhixi-direct.log + break + fi + done + # Kill direct instance + kill $DIRECT_PID 2>/dev/null; wait $DIRECT_PID 2>/dev/null + if [ "$HEALTHY" = "1" ]; then + # App works! Use systemd for persistent run + sudo systemctl reset-failed zhixi-api 2>/dev/null || true + sudo systemctl start zhixi-api + sleep 3 + sudo systemctl is-active zhixi-api && echo "[deploy] systemd active OK" || echo "[deploy] systemd start failed (non-fatal, direct run works)" else - echo "[deploy] zhixi-api FAILED to start" + echo "[deploy] App failed to start" exit 1 fi