From 413eb19adf1800e1b3d71b7026e9b7e906bdca12 Mon Sep 17 00:00:00 2001 From: apple Date: Tue, 17 Mar 2026 19:20:06 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20deploy.md=20?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E6=96=87=E6=A1=A3=EF=BC=8Cadmin=20=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E7=8E=AF=E5=A2=83=E9=85=8D=E7=BD=AE=20hjf.suzhouyuqi.?= =?UTF-8?q?com?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- docs/deploy.md | 251 ++++++++++++++++++++++++++ pro_v3.5.1/view/admin/.env.production | 4 +- 2 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 docs/deploy.md diff --git a/docs/deploy.md b/docs/deploy.md new file mode 100644 index 00000000..468da7d2 --- /dev/null +++ b/docs/deploy.md @@ -0,0 +1,251 @@ +# CRMEB Pro v3.5 简化发布部署方案 + +> 云端 `.env`、数据库、Nginx、Swoole 等已配置完成。本方案将**服务器 API**、**管理后台前端**、**H5 前端**拆分为三个子项目,可**独立执行**对应的发布部署。 + +--- + +## 一、部署信息 + +| 项目 | 值 | +|------|-----| +| 服务器 | `root@182.92.142.158`,密码 `A@123456` | +| 部署根目录 | `/www/wwwroot/hjf.suzhouyuqi.com` | +| 域名 | `hjf.suzhouyuqi.com` | +| 本地项目路径 | `/Users/apple/scott2026/huangjingfen/pro_v3.5.1` | + +| 子项目 | 本地路径 | 服务器目标路径 | +|--------|----------|----------------| +| 服务器 API | `pro_v3.5.1/`(排除 view、public/admin) | `/www/wwwroot/hjf.suzhouyuqi.com/` | +| 管理后台前端 | `pro_v3.5.1/view/admin/dist/` | `/www/wwwroot/hjf.suzhouyuqi.com/public/admin/` | +| H5 前端 | `pro_v3.5.1/view/uniapp/unpackage/dist/build/h5/` | `/www/wwwroot/hjf.suzhouyuqi.com/public/` | + +--- + +## 二、子项目一:服务器 API + +仅部署后端 PHP 代码(app、crmeb、config、route、vendor、public 等),不覆盖管理后台和 H5 前端。 + +### 方式一:全量同步(先整站备份,再覆盖) + +#### 2.1.1 备份(服务器) + +```bash +ssh root@182.92.142.158 + +mkdir -p /www/backup +tar -czvf /www/backup/hjf_api_$(date +%Y%m%d_%H%M%S).tar.gz \ + -C /www/wwwroot hjf.suzhouyuqi.com +``` + +#### 2.1.2 上传(本地) + +```bash +cd /Users/apple/scott2026/huangjingfen + +rsync -avz --delete \ + --exclude='.env' \ + --exclude='.git' \ + --exclude='node_modules' \ + --exclude='view' \ + --exclude='public/admin' \ + --exclude='public/uploads' \ + --exclude='runtime/cache' \ + --exclude='runtime/log' \ + --exclude='.cursor' \ + --exclude='.cursor-cli' \ + pro_v3.5.1/ \ + root@182.92.142.158:/www/wwwroot/hjf.suzhouyuqi.com/ +``` + +--- + +### 方式二:按 Git 版本增量部署(仅上传 git 中有变更的文件) + +对比 `origin/main` 与本地工作区,先列出将要上传的文件,再通过 SSH 执行「先备份再上传覆盖」。 + +#### 2.2.1 步骤一:列出将要上传的文件 + +```bash +cd /Users/apple/scott2026/huangjingfen + +git fetch origin +git diff --name-only origin/main -- pro_v3.5.1/ \ + | sed 's|^pro_v3.5.1/||' \ + | grep -v '^view' \ + | grep -v '^public/admin' \ + | grep -v '^public/uploads' \ + | grep -v '^runtime/cache' \ + | grep -v '^runtime/log' \ + | grep -v '\.env$' \ + | grep -v '/\.' \ + | tee /tmp/hjf_api_changed.txt +``` + +确认列表无误后,执行步骤二。 + +#### 2.2.2 步骤二:通过 SSH 发布部署 + +```bash +cd /Users/apple/scott2026/huangjingfen + +# 若无变更则退出 +if [ ! -s /tmp/hjf_api_changed.txt ]; then + echo "无 API 相关文件变更,跳过部署" + exit 0 +fi + +# 创建备份目录(SSH 执行) +BACKUP_SUFFIX=$(date +%Y%m%d_%H%M%S) +ssh root@182.92.142.158 "mkdir -p /www/backup/hjf_api_git_${BACKUP_SUFFIX}" + +# 通过 rsync over SSH 上传变更文件(覆盖前自动备份到 backup-dir) +rsync -avz --backup --backup-dir=/www/backup/hjf_api_git_${BACKUP_SUFFIX} \ + --files-from=/tmp/hjf_api_changed.txt \ + pro_v3.5.1/ \ + root@182.92.142.158:/www/wwwroot/hjf.suzhouyuqi.com/ +``` + +说明: + +- 步骤一用 `tee` 同时输出到屏幕和 `/tmp/hjf_api_changed.txt`,步骤二复用该文件。 +- 以 `origin/main` 为基准;可改为 `origin/其他分支` 或 `标签名`。 +- `--backup --backup-dir=...`:覆盖前将服务器上的旧文件移动到备份目录。 +- 增量备份目录示例:`/www/backup/hjf_api_git_20260117_143022/`。 + +--- + +### 2.3 上传后(服务器) + +```bash +ssh root@182.92.142.158 + +supervisorctl restart hjfshop-swoole +cd /www/wwwroot/hjf.suzhouyuqi.com && php think clear +``` + +--- + +## 三、子项目二:管理后台前端 + +仅部署管理后台 Vue 构建产物到 `public/admin/`。 + +### 3.1 本地构建 + +```bash +cd /Users/apple/scott2026/huangjingfen/pro_v3.5.1/view/admin + +npm install # 依赖有变更时执行 +npm run build +``` + +构建产物在 `view/admin/dist/`。 + +### 3.2 备份(服务器) + +```bash +ssh root@182.92.142.158 + +mkdir -p /www/backup +tar -czvf /www/backup/hjf_admin_$(date +%Y%m%d_%H%M%S).tar.gz \ + -C /www/wwwroot/hjf.suzhouyuqi.com/public admin +``` + +### 3.3 上传(本地) + +```bash +cd /Users/apple/scott2026/huangjingfen + +rsync -avz --delete \ + pro_v3.5.1/view/admin/dist/ \ + root@182.92.142.158:/www/wwwroot/hjf.suzhouyuqi.com/public/admin/ +``` + +### 3.4 上传后修改权限(服务器) + +```bash +ssh root@182.92.142.158 + +chown -R www:www /www/wwwroot/hjf.suzhouyuqi.com/public/admin +chmod -R 775 /www/wwwroot/hjf.suzhouyuqi.com/public/admin +``` + +### 3.5 验证 + +浏览器访问 `http://hjf.suzhouyuqi.com/admin/login`,确认页面正常。 + +--- + +## 四、子项目三:H5 前端 + +仅部署 H5 构建产物到 `public/`(站点根目录)。 + +### 4.1 本地构建 + +```bash +cd /Users/apple/scott2026/huangjingfen/pro_v3.5.1/view/uniapp + +npm install # 依赖有变更时执行 +npm run build:h5 +``` + +构建产物在 `view/uniapp/unpackage/dist/build/h5/`。 + +### 4.2 备份(服务器) + +```bash +ssh root@182.92.142.158 + +mkdir -p /www/backup +tar -czvf /www/backup/hjf_public_$(date +%Y%m%d_%H%M%S).tar.gz \ + -C /www/wwwroot/hjf.suzhouyuqi.com public +``` + +### 4.3 上传(本地) + +```bash +cd /Users/apple/scott2026/huangjingfen + +rsync -avz \ + pro_v3.5.1/view/uniapp/unpackage/dist/build/h5/ \ + root@182.92.142.158:/www/wwwroot/hjf.suzhouyuqi.com/public/ +``` + +> 不使用 `--delete`,避免覆盖或删除 `admin/`、`index.php` 等文件。 + +### 4.4 验证 + +浏览器访问 `http://hjf.suzhouyuqi.com/`,确认 H5 页面正常。 + +--- + +## 五、发布检查汇总 + +| 子项目 | 检查项 | +|--------|--------| +| API | `supervisorctl status hjfshop-swoole` 为 RUNNING;`curl http://hjf.suzhouyuqi.com/adminapi/login/info` 返回 JSON | +| 管理后台 | `http://hjf.suzhouyuqi.com/admin/login` 可打开;登录后无「暂未授权」提示 | +| H5 | `http://hjf.suzhouyuqi.com/` 可打开 | + +--- + +## 六、回滚 + +按备份文件名中的时间戳选择对应子项目备份恢复: + +```bash +ssh root@182.92.142.158 + +# 回滚 API(整站) +cd /www/wwwroot +rm -rf hjf.suzhouyuqi.com +tar -xzvf /www/backup/hjf_api_YYYYMMDD_HHMMSS.tar.gz +supervisorctl restart hjfshop-swoole + +# 回滚管理后台(仅 public/admin) +rm -rf /www/wwwroot/hjf.suzhouyuqi.com/public/admin +tar -xzvf /www/backup/hjf_admin_YYYYMMDD_HHMMSS.tar.gz -C /www/wwwroot/hjf.suzhouyuqi.com/public + +# 回滚 H5(恢复 public/ 目录) +rm -rf /www/wwwroot/hjf.suzhouyuqi.com/public +tar -xzvf /www/backup/hjf_public_YYYYMMDD_HHMMSS.tar.gz -C /www/wwwroot/hjf.suzhouyuqi.com +``` diff --git a/pro_v3.5.1/view/admin/.env.production b/pro_v3.5.1/view/admin/.env.production index 48adf9c9..1b46ac40 100644 --- a/pro_v3.5.1/view/admin/.env.production +++ b/pro_v3.5.1/view/admin/.env.production @@ -5,6 +5,6 @@ VUE_APP_ENV='production' # 页面 title VUE_APP_TITLE=CRMEB # socket 系统连接地址 (ws)或(wss)://www.crmeb.com(换成你的域名)/ws 非独立部署默认为空 -VUE_APP_WS_ADMIN_URL='' +VUE_APP_WS_ADMIN_URL='ws://hjf.suzhouyuqi.com/ws' # 接口请求地址 (http)或 (https)://www.crmeb.com(换成你的域名)/adminapi 非独立部署默认为空 -VUE_APP_API_URL='' +VUE_APP_API_URL='http://hjf.suzhouyuqi.com/adminapi'