#!/usr/bin/env bash set -euo pipefail HOST="${1:-192.168.0.188}" PROJECT_ROOT="${2:-/opt/fifa2026}" PUBLIC_ORIGIN="${3:-https://2026fifa.wooo.work}" DEPLOY_USER="${DEPLOY_USER:-${USER}}" LOCAL_DIR="$(cd "$(dirname "$0")/.." && pwd)" ENV_FILE="${LOCAL_DIR}/.env" if [[ ! -f "${ENV_FILE}" ]]; then echo "[deploy] ERROR: .env not found at ${ENV_FILE}" exit 1 fi echo "[deploy] target=${HOST} path=${PROJECT_ROOT}" echo "[deploy] rsync source=${LOCAL_DIR}" ssh -o StrictHostKeyChecking=accept-new "${DEPLOY_USER}@${HOST}" "mkdir -p ${PROJECT_ROOT}/shared ${PROJECT_ROOT}/logs" rsync -avz --delete \ --exclude node_modules \ --exclude .git \ --exclude .env \ "${LOCAL_DIR}/" "${DEPLOY_USER}@${HOST}:${PROJECT_ROOT}/current/" scp "${ENV_FILE}" "${DEPLOY_USER}@${HOST}:${PROJECT_ROOT}/.env" ssh "${DEPLOY_USER}@${HOST}" "PROJECT_ROOT='${PROJECT_ROOT}'; \ mkdir -p ${PROJECT_ROOT}/current; \ cd ${PROJECT_ROOT}/current; \ if [[ -f .env ]]; then :; else cp ${PROJECT_ROOT}/.env .env; fi; \ if ! grep -q '^APP_PUBLIC_ORIGIN=' ${PROJECT_ROOT}/.env; then \ echo \"APP_PUBLIC_ORIGIN=${PUBLIC_ORIGIN}\" >> ${PROJECT_ROOT}/.env; \ fi; \ if ! grep -q '^APP_TIME_ZONE=' ${PROJECT_ROOT}/.env; then \ echo 'APP_TIME_ZONE=Asia/Taipei' >> ${PROJECT_ROOT}/.env; \ fi; \ if ! grep -q '^TZ=' ${PROJECT_ROOT}/.env; then \ echo 'TZ=Asia/Taipei' >> ${PROJECT_ROOT}/.env; \ fi; \ if ! grep -q '^KELLY_SCALE=' ${PROJECT_ROOT}/.env; then \ echo 'KELLY_SCALE=0.6' >> ${PROJECT_ROOT}/.env; \ fi; \ node -v >/tmp/node-version.txt 2>/dev/null || true; \ if ! command -v npm >/dev/null; then \ echo '[deploy] ERROR: npm not found'; exit 1; \ fi; \ npm install --omit=dev; \ if ! command -v pm2 >/dev/null; then \ npm install pm2 >/tmp/pm2-install.log 2>&1; \ fi; \ PM2_BIN=\"\$(command -v pm2 || true)\"; \ if [ -z \"\${PM2_BIN}\" ]; then \ PM2_BIN=\"\${PROJECT_ROOT}/current/node_modules/.bin/pm2\"; \ fi; \ [ -x \"\${PM2_BIN}\" ] || PM2_BIN=\"\${PROJECT_ROOT}/current/node_modules/.bin/pm2\"; \ [ -x \"\${PM2_BIN}\" ] || (echo '[deploy] ERROR: pm2 not found' && exit 1); \ TZ=Asia/Taipei APP_TIME_ZONE=Asia/Taipei NODE_ENV=production \"\${PM2_BIN}\" startOrReload \"\${PROJECT_ROOT}/current/ops/pm2.config.js\" --env production 2>&1 | cat; \ \"\${PM2_BIN}\" save" echo "[deploy] deploy done"