Files
chat-one-service/scripts/deploy.sh
alboped 132f51705e feat: 增强 Chat 能力并补充单机部署方案
完善会话消息删除、Qwen 联网搜索/深度思考参数与 SSE 来源事件,同时增加请求体日志与 TS6 配置兼容调整,并新增 Ubuntu+PM2+Nginx 的部署文档与脚本以支持可回滚发布。

Made-with: Cursor
2026-04-23 22:31:18 +08:00

76 lines
1.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
APP_NAME="chat-one-service"
APP_ROOT="${APP_ROOT:-/srv/chat-one-service}"
REPO_URL="${REPO_URL:-}"
BRANCH="${BRANCH:-main}"
KEEP_RELEASES="${KEEP_RELEASES:-5}"
if [[ -z "$REPO_URL" ]]; then
echo "REPO_URL is required. Example:"
echo " REPO_URL=git@github.com:org/chat-one-service.git scripts/deploy.sh"
exit 1
fi
command -v yarn >/dev/null 2>&1 || {
echo "yarn is required"
exit 1
}
command -v pm2 >/dev/null 2>&1 || {
echo "pm2 is required"
exit 1
}
command -v git >/dev/null 2>&1 || {
echo "git is required"
exit 1
}
RELEASES_DIR="$APP_ROOT/releases"
SHARED_DIR="$APP_ROOT/shared"
CURRENT_LINK="$APP_ROOT/current"
RELEASE_NAME="$(date +%Y%m%d_%H%M%S)"
RELEASE_DIR="$RELEASES_DIR/$RELEASE_NAME"
mkdir -p "$RELEASES_DIR" "$SHARED_DIR/logs"
echo "==> Cloning repository"
git clone --branch "$BRANCH" --depth 1 "$REPO_URL" "$RELEASE_DIR"
if [[ ! -f "$SHARED_DIR/.env" ]]; then
echo "Missing $SHARED_DIR/.env"
exit 1
fi
ln -sfn "$SHARED_DIR/.env" "$RELEASE_DIR/.env"
cd "$RELEASE_DIR"
echo "==> Installing dependencies"
yarn install --frozen-lockfile
echo "==> Building project"
yarn build
echo "==> Running database migrations"
npx prisma migrate deploy
echo "==> Switching current symlink"
ln -sfn "$RELEASE_DIR" "$CURRENT_LINK"
if pm2 describe "$APP_NAME" >/dev/null 2>&1; then
echo "==> Reloading PM2 process"
pm2 reload "$APP_NAME" --update-env
else
echo "==> Starting PM2 process"
pm2 start "$CURRENT_LINK/ecosystem.config.js" --env production
fi
echo "==> Smoke check"
curl -fsS "http://127.0.0.1:${PORT:-3000}/api/docs" >/dev/null
echo "==> Cleaning old releases (keep $KEEP_RELEASES)"
ls -1dt "$RELEASES_DIR"/* 2>/dev/null | tail -n +"$((KEEP_RELEASES + 1))" | xargs -r rm -rf
echo "Deploy success. Current release: $RELEASE_DIR"