feat: 更新部署配置适应新的目录结构

- 后端代码在 server/ 目录(Git 仓库)
- docker-compose 在 deploy/ 目录
- 部署脚本路径更新
- 部署文档更新

目录结构:
/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/
├── index.html          # 前端入口
├── assets/             # 前端静态资源
└── server/             # 整个项目(Git)
    ├── backend/
    ├── deploy/
    └── logs/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-27 18:50:44 +08:00
parent 2df57fb5d5
commit ebac0c8452
3 changed files with 105 additions and 104 deletions
+6 -5
View File
@@ -1,11 +1,12 @@
# X-Server Mobile 生产环境 Docker Compose # X-Server Mobile 生产环境 Docker Compose
# 使用方法: docker-compose -f deploy/docker-compose.prod.yml up -d # 位置: server/deploy/docker-compose.prod.yml
# 项目根目录执行: docker-compose -f deploy/docker-compose.prod.yml up -d
services: services:
# PHP 后端服务 # PHP 后端服务
backend: backend:
build: build:
context: ./backend context: ../backend
dockerfile: Dockerfile.prod dockerfile: Dockerfile.prod
container_name: x-server-backend-prod container_name: x-server-backend-prod
restart: unless-stopped restart: unless-stopped
@@ -28,15 +29,15 @@ services:
- REDIS_PORT=6379 - REDIS_PORT=6379
- REDIS_PASSWORD=redis_FTzdM6 - REDIS_PASSWORD=redis_FTzdM6
# 飞书配置(请替换为实际值) # 飞书配置(从 .env.production 读取)
- FEISHU_APP_ID=${FEISHU_APP_ID} - FEISHU_APP_ID=${FEISHU_APP_ID}
- FEISHU_APP_SECRET=${FEISHU_APP_SECRET} - FEISHU_APP_SECRET=${FEISHU_APP_SECRET}
- FEISHU_ENCRYPT_KEY=${FEISHU_ENCRYPT_KEY} - FEISHU_ENCRYPT_KEY=${FEISHU_ENCRYPT_KEY}
- FEISHU_VERIFICATION_TOKEN=${FEISHU_VERIFICATION_TOKEN} - FEISHU_VERIFICATION_TOKEN=${FEISHU_VERIFICATION_TOKEN}
- FEISHU_TENANT_KEY=${FEISHU_TENANT_KEY:-14e7bc0fe5985740} - FEISHU_TENANT_KEY=${FEISHU_TENANT_KEY:-14e7bc0fe5985740}
volumes: volumes:
- ./backend:/app - ../backend:/app
- ./logs/backend:/app/runtime/logs - ../logs/backend:/app/runtime/logs
networks: networks:
- 1panel-network - 1panel-network
healthcheck: healthcheck:
+14 -13
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# X-Server Mobile 后端部署脚本(服务器端) # X-Server Mobile 后端部署脚本(服务器端)
# 使用方法: cd /opt/x-server-mobile && ./deploy.sh # 位置: server/deploy.sh
# 使用方法: ./deploy.sh
set -e set -e
@@ -27,8 +28,8 @@ log_step() {
echo -e "${BLUE}==>${NC} $1" echo -e "${BLUE}==>${NC} $1"
} }
# 项目目录 # 项目目录(server 目录)
PROJECT_DIR="/opt/x-server-mobile" PROJECT_DIR="/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server"
cd "$PROJECT_DIR" cd "$PROJECT_DIR"
echo "==========================================" echo "=========================================="
@@ -43,12 +44,7 @@ echo ""
# ============================================ # ============================================
log_step "拉取最新代码..." log_step "拉取最新代码..."
# 获取当前分支名 git pull origin master
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
# 拉取最新代码
git fetch origin
git reset --hard "origin/${CURRENT_BRANCH}"
log_info "代码已更新" log_info "代码已更新"
@@ -57,14 +53,19 @@ log_info "代码已更新"
# ============================================ # ============================================
log_step "重启后端容器..." log_step "重启后端容器..."
if [ ! -f "docker-compose.prod.yml" ]; then if [ ! -f "deploy/docker-compose.prod.yml" ]; then
log_error "docker-compose.prod.yml 不存在" log_error "deploy/docker-compose.prod.yml 不存在"
exit 1 exit 1
fi fi
# 加载环境变量
if [ -f "deploy/.env.production" ]; then
export $(cat deploy/.env.production | grep -v '^#' | xargs)
fi
# 重启容器 # 重启容器
docker-compose -f docker-compose.prod.yml down 2>/dev/null || true docker-compose -f deploy/docker-compose.prod.yml down 2>/dev/null || true
docker-compose -f docker-compose.prod.yml up -d docker-compose -f deploy/docker-compose.prod.yml up -d
log_info "后端容器已重启" log_info "后端容器已重启"
+85 -86
View File
@@ -5,8 +5,8 @@
| 项目 | 值 | | 项目 | 值 |
|------|-----| |------|-----|
| **域名** | uniservice-mobile.hnxinyouhe.com | | **域名** | uniservice-mobile.hnxinyouhe.com |
| **前端目录** | /www/sites/uniservice-mobile.hnxinyouhe.com/index | | **站点目录** | /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index |
| **后端目录** | /opt/x-server-mobile | | **项目目录** | /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server |
| **后端容器** | x-server-backend-prod (端口 8787) | | **后端容器** | x-server-backend-prod (端口 8787) |
| **MySQL 容器** | 1Panel-mysql-XyxS | | **MySQL 容器** | 1Panel-mysql-XyxS |
| **Redis 容器** | 1Panel-redis-pxdb | | **Redis 容器** | 1Panel-redis-pxdb |
@@ -23,30 +23,32 @@
--- ---
## 快速部署 ## 目录结构
### 方式一:自动部署脚本(推荐) ```
/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/
**本地执行**(前端+后端一起部署): ├── index.html # 前端入口
├── assets/ # 前端静态资源
```bash └── server/ # 整个项目(Git 仓库)
# 1. 本地构建前端 ├── backend/ # 后端代码
cd /www/x-server-mobile/frontend │ ├── app/
npm run build │ ├── config/
│ └── ...
# 2. 执行部署脚本 ├── deploy/ # 部署配置
cd .. │ ├── docker-compose.prod.yml
./deploy/deploy-1panel.sh your-server-ip │ ├── .env.production
│ └── deploy.sh
├── frontend/ # 前端源码(不使用)
├── docs/ # 文档
└── logs/ # 日志
└── backend/
``` ```
脚本会自动: ---
- 上传前端静态文件到 1Panel 静态站点
- 上传后端代码到服务器
- 重启后端 Docker 容器
### 方式二:手动部署 ## 快速部署
#### 前端部署(本地) ### 前端部署(本地)
```bash ```bash
# 本地构建 # 本地构建
@@ -56,75 +58,59 @@ npm run build
# 上传静态文件 # 上传静态文件
rsync -avz --delete \ rsync -avz --delete \
frontend/dist/ \ frontend/dist/ \
root@your-server:/www/sites/uniservice-mobile.hnxinyouhe.com/index/ root@45.153.130.80:/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/
``` ```
#### 后端部署(服务器) ### 后端部署(服务器)
```bash ```bash
# 登录服务器 # 登录服务器
ssh root@your-server ssh root@45.153.130.80
cd /opt/x-server-mobile cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server
# 拉取代码 # 拉取代码
git pull git pull origin master
# 重启容器 # 重启容器
docker-compose -f docker-compose.prod.yml down docker-compose -f deploy/docker-compose.prod.yml down
docker-compose -f docker-compose.prod.yml up -d docker-compose -f deploy/docker-compose.prod.yml up -d
``` ```
--- 或使用部署脚本:
## 服务器端部署脚本
在服务器上创建 `/opt/x-server-mobile/deploy.sh`:
```bash ```bash
#!/bin/bash ssh root@45.153.130.80
cd /opt/x-server-mobile cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server
git pull ./deploy/deploy.sh
docker-compose -f docker-compose.prod.yml down
docker-compose -f docker-compose.prod.yml up -d
docker ps | grep x-server
```
使用:
```bash
ssh root@your-server
cd /opt/x-server-mobile
chmod +x deploy.sh
./deploy.sh
``` ```
--- ---
## 首次部署 ## 首次部署
### 1. 服务器准备 ### 1. 克隆后端代码
```bash ```bash
ssh root@your-server ssh root@45.153.130.80
cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index
# 创建项目目录 # 克隆 master 分支
mkdir -p /opt/x-server-mobile git clone <your-git-repository-url> server
cd /opt/x-server-mobile cd server
git checkout master
# 克隆代码
git clone <your-git-repository-url> .
# 上传部署配置
# (在本地执行)
scp deploy/docker-compose.prod.yml root@your-server:/opt/x-server-mobile/
scp deploy/.env.production root@your-server:/opt/x-server-mobile/
``` ```
### 2. 配置环境变量 ### 2. 上传 Dockerfile
```bash ```bash
ssh root@your-server # 本地执行
vi /opt/x-server-mobile/.env.production scp backend/Dockerfile.prod root@45.153.130.80:/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server/backend/
```
### 3. 配置环境变量
```bash
ssh root@45.153.130.80
vi /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server/deploy/.env.production
``` ```
填写飞书配置: 填写飞书配置:
@@ -136,29 +122,41 @@ FEISHU_ENCRYPT_KEY=xxxxxxxxxxxxxxxxxxxx
FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxxxxxxxx FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxxxxxxxx
``` ```
### 3. 启动后端容器 ### 4. 创建日志目录
```bash ```bash
ssh root@your-server ssh root@45.153.130.80
cd /opt/x-server-mobile mkdir -p /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server/logs/backend
docker-compose -f docker-compose.prod.yml up -d ```
### 5. 上传部署脚本
```bash
# 本地执行
scp deploy/server-deploy.sh root@45.153.130.80:/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server/deploy/deploy.sh
# 赋予执行权限
ssh root@45.153.130.80
chmod +x /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server/deploy/deploy.sh
```
### 6. 启动后端容器
```bash
ssh root@45.153.130.80
cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server
docker-compose -f deploy/docker-compose.prod.yml up -d
docker ps | grep x-server docker ps | grep x-server
``` ```
### 4. 配置 1Panel 静态站点 ### 7. 上传前端
1. 在 1Panel 面板创建静态网站
2. 根目录: `/www/sites/uniservice-mobile.hnxinyouhe.com/index`
3. 添加 Nginx 反向代理(见下方配置)
### 5. 上传前端
```bash ```bash
cd /www/x-server-mobile/frontend cd /www/x-server-mobile/frontend
npm run build npm run build
rsync -avz --delete \ rsync -avz --delete \
frontend/dist/ \ frontend/dist/ \
root@your-server:/www/sites/uniservice-mobile.hnxinyouhe.com/index/ root@45.153.130.80:/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/
``` ```
--- ---
@@ -226,7 +224,7 @@ location /feishu/card/callback {
curl -I https://uniservice-mobile.hnxinyouhe.com curl -I https://uniservice-mobile.hnxinyouhe.com
# 检查后端容器 # 检查后端容器
ssh root@your-server ssh root@45.153.130.80
docker ps | grep x-server docker ps | grep x-server
docker logs -f x-server-backend-prod docker logs -f x-server-backend-prod
``` ```
@@ -239,17 +237,18 @@ docker logs -f x-server-backend-prod
|------|---------| |------|---------|
| API 404 | 检查 Nginx 反向代理配置 | | API 404 | 检查 Nginx 反向代理配置 |
| 容器启动失败 | 检查数据库/Redis 容器状态,查看日志 | | 容器启动失败 | 检查数据库/Redis 容器状态,查看日志 |
| 飙书登录失败 | 检查 `/login/*` 反向代理配置 | | 飞书登录失败 | 检查 `/login/*` 反向代理配置 |
| 静态资源 404 | 确认前端上传到正确目录 | | 静态资源 404 | 确认前端上传到正确目录 |
--- ---
## 文件清单 ## 文件清单
| 文件 | 用途 | 需要上传到服务器的文件:
|------|------|
| `deploy/docker-compose.prod.yml` | 生产环境 Docker Compose | | 文件 | 目标位置 |
| `deploy/.env.production` | 生产环境变量 | |------|---------|
| `deploy/nginx-1panel.conf` | Nginx 配置参考 | | `backend/Dockerfile.prod` | `server/backend/` |
| `deploy/deploy-1panel.sh` | 本端部署脚本 | | `deploy/docker-compose.prod.yml` | `server/deploy/` |
| `deploy/server-deploy.sh` | 服务器端部署脚本 | | `deploy/.env.production` | `server/deploy/` |
| `deploy/server-deploy.sh` | `server/deploy/deploy.sh` |