docs: 新增 deploy.md 部署文档,admin 生产环境配置 hjf.suzhouyuqi.com
Made-with: Cursor
This commit is contained in:
251
docs/deploy.md
Normal file
251
docs/deploy.md
Normal file
@@ -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
|
||||
```
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user