a1667eac51
Include Dockerfile, docker-compose on port 3130, npm mirror config, deploy scripts, and DOCKER.md; keep PM2 docs as fallback. Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
1.0 KiB
Bash
45 lines
1.0 KiB
Bash
#!/usr/bin/env bash
|
||
# 知命阁(zhimingge)Ubuntu 服务器更新脚本
|
||
# 用法:cd /opt/zhimingge && bash scripts/deploy.sh
|
||
|
||
set -euo pipefail
|
||
|
||
APP_DIR="/opt/zhimingge"
|
||
APP_NAME="zhimingge"
|
||
APP_PORT="${PORT:-3130}"
|
||
|
||
cd "$APP_DIR"
|
||
|
||
echo "==> 拉取最新代码..."
|
||
git pull origin main
|
||
|
||
echo "==> 安装依赖..."
|
||
npm ci || npm install
|
||
|
||
echo "==> 停止 PM2(避免无构建产物时反复重启)..."
|
||
pm2 stop "$APP_NAME" 2>/dev/null || true
|
||
|
||
echo "==> 生产构建..."
|
||
npm run build
|
||
|
||
if [[ ! -f .next/BUILD_ID ]]; then
|
||
echo "ERROR: 构建失败,未找到 .next/BUILD_ID,请先解决 npm run build 报错后再启动。"
|
||
exit 1
|
||
fi
|
||
|
||
echo "==> 确保日志目录存在..."
|
||
mkdir -p logs
|
||
|
||
echo "==> 启动 PM2..."
|
||
if pm2 describe "$APP_NAME" > /dev/null 2>&1; then
|
||
pm2 restart "$APP_NAME"
|
||
else
|
||
pm2 start ecosystem.config.cjs
|
||
fi
|
||
|
||
pm2 save
|
||
|
||
echo "==> 部署完成,验证 http://127.0.0.1:${APP_PORT} ..."
|
||
pm2 status "$APP_NAME"
|
||
curl -s -o /dev/null -w "HTTP %{http_code}\n" "http://127.0.0.1:${APP_PORT}" || true
|