63 lines
2.3 KiB
Bash
Executable File
63 lines
2.3 KiB
Bash
Executable File
#!/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"
|