Files
huangjingfen/docs/deploy.md

252 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```