From ebac0c8452e6a655d7e2060d68921b42fe3fb648 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 27 Feb 2026 18:50:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=80=82=E5=BA=94=E6=96=B0=E7=9A=84=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端代码在 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 --- deploy/docker-compose.prod.yml | 11 ++- deploy/server-deploy.sh | 27 +++--- docs/DEPLOY_ONLINE_GUIDE.md | 171 ++++++++++++++++----------------- 3 files changed, 105 insertions(+), 104 deletions(-) diff --git a/deploy/docker-compose.prod.yml b/deploy/docker-compose.prod.yml index f0883a5..918f3de 100644 --- a/deploy/docker-compose.prod.yml +++ b/deploy/docker-compose.prod.yml @@ -1,11 +1,12 @@ # 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: # PHP 后端服务 backend: build: - context: ./backend + context: ../backend dockerfile: Dockerfile.prod container_name: x-server-backend-prod restart: unless-stopped @@ -28,15 +29,15 @@ services: - REDIS_PORT=6379 - REDIS_PASSWORD=redis_FTzdM6 - # 飞书配置(请替换为实际值) + # 飞书配置(从 .env.production 读取) - FEISHU_APP_ID=${FEISHU_APP_ID} - FEISHU_APP_SECRET=${FEISHU_APP_SECRET} - FEISHU_ENCRYPT_KEY=${FEISHU_ENCRYPT_KEY} - FEISHU_VERIFICATION_TOKEN=${FEISHU_VERIFICATION_TOKEN} - FEISHU_TENANT_KEY=${FEISHU_TENANT_KEY:-14e7bc0fe5985740} volumes: - - ./backend:/app - - ./logs/backend:/app/runtime/logs + - ../backend:/app + - ../logs/backend:/app/runtime/logs networks: - 1panel-network healthcheck: diff --git a/deploy/server-deploy.sh b/deploy/server-deploy.sh index 65a65d7..9599931 100644 --- a/deploy/server-deploy.sh +++ b/deploy/server-deploy.sh @@ -1,6 +1,7 @@ #!/bin/bash # X-Server Mobile 后端部署脚本(服务器端) -# 使用方法: cd /opt/x-server-mobile && ./deploy.sh +# 位置: server/deploy.sh +# 使用方法: ./deploy.sh set -e @@ -27,8 +28,8 @@ log_step() { echo -e "${BLUE}==>${NC} $1" } -# 项目目录 -PROJECT_DIR="/opt/x-server-mobile" +# 项目目录(server 目录) +PROJECT_DIR="/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server" cd "$PROJECT_DIR" echo "==========================================" @@ -43,12 +44,7 @@ echo "" # ============================================ log_step "拉取最新代码..." -# 获取当前分支名 -CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) - -# 拉取最新代码 -git fetch origin -git reset --hard "origin/${CURRENT_BRANCH}" +git pull origin master log_info "代码已更新" @@ -57,14 +53,19 @@ log_info "代码已更新" # ============================================ log_step "重启后端容器..." -if [ ! -f "docker-compose.prod.yml" ]; then - log_error "docker-compose.prod.yml 不存在" +if [ ! -f "deploy/docker-compose.prod.yml" ]; then + log_error "deploy/docker-compose.prod.yml 不存在" exit 1 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 docker-compose.prod.yml up -d +docker-compose -f deploy/docker-compose.prod.yml down 2>/dev/null || true +docker-compose -f deploy/docker-compose.prod.yml up -d log_info "后端容器已重启" diff --git a/docs/DEPLOY_ONLINE_GUIDE.md b/docs/DEPLOY_ONLINE_GUIDE.md index 893d031..173071e 100644 --- a/docs/DEPLOY_ONLINE_GUIDE.md +++ b/docs/DEPLOY_ONLINE_GUIDE.md @@ -5,8 +5,8 @@ | 项目 | 值 | |------|-----| | **域名** | uniservice-mobile.hnxinyouhe.com | -| **前端目录** | /www/sites/uniservice-mobile.hnxinyouhe.com/index | -| **后端目录** | /opt/x-server-mobile | +| **站点目录** | /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index | +| **项目目录** | /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server | | **后端容器** | x-server-backend-prod (端口 8787) | | **MySQL 容器** | 1Panel-mysql-XyxS | | **Redis 容器** | 1Panel-redis-pxdb | @@ -23,30 +23,32 @@ --- -## 快速部署 +## 目录结构 -### 方式一:自动部署脚本(推荐) - -**本地执行**(前端+后端一起部署): - -```bash -# 1. 本地构建前端 -cd /www/x-server-mobile/frontend -npm run build - -# 2. 执行部署脚本 -cd .. -./deploy/deploy-1panel.sh your-server-ip +``` +/opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/ +├── index.html # 前端入口 +├── assets/ # 前端静态资源 +└── server/ # 整个项目(Git 仓库) + ├── backend/ # 后端代码 + │ ├── app/ + │ ├── config/ + │ └── ... + ├── deploy/ # 部署配置 + │ ├── docker-compose.prod.yml + │ ├── .env.production + │ └── deploy.sh + ├── frontend/ # 前端源码(不使用) + ├── docs/ # 文档 + └── logs/ # 日志 + └── backend/ ``` -脚本会自动: -- 上传前端静态文件到 1Panel 静态站点 -- 上传后端代码到服务器 -- 重启后端 Docker 容器 +--- -### 方式二:手动部署 +## 快速部署 -#### 前端部署(本地) +### 前端部署(本地) ```bash # 本地构建 @@ -56,75 +58,59 @@ npm run build # 上传静态文件 rsync -avz --delete \ 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 # 登录服务器 -ssh root@your-server -cd /opt/x-server-mobile +ssh root@45.153.130.80 +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 docker-compose.prod.yml up -d +docker-compose -f deploy/docker-compose.prod.yml down +docker-compose -f deploy/docker-compose.prod.yml up -d ``` ---- - -## 服务器端部署脚本 - -在服务器上创建 `/opt/x-server-mobile/deploy.sh`: - +或使用部署脚本: ```bash -#!/bin/bash -cd /opt/x-server-mobile -git pull -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 +ssh root@45.153.130.80 +cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server +./deploy/deploy.sh ``` --- ## 首次部署 -### 1. 服务器准备 +### 1. 克隆后端代码 ```bash -ssh root@your-server +ssh root@45.153.130.80 +cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index -# 创建项目目录 -mkdir -p /opt/x-server-mobile -cd /opt/x-server-mobile - -# 克隆代码 -git clone . - -# 上传部署配置 -# (在本地执行) -scp deploy/docker-compose.prod.yml root@your-server:/opt/x-server-mobile/ -scp deploy/.env.production root@your-server:/opt/x-server-mobile/ +# 克隆 master 分支 +git clone server +cd server +git checkout master ``` -### 2. 配置环境变量 +### 2. 上传 Dockerfile ```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 ``` -### 3. 启动后端容器 +### 4. 创建日志目录 ```bash -ssh root@your-server -cd /opt/x-server-mobile -docker-compose -f docker-compose.prod.yml up -d +ssh root@45.153.130.80 +mkdir -p /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index/server/logs/backend +``` + +### 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 ``` -### 4. 配置 1Panel 静态站点 - -1. 在 1Panel 面板创建静态网站 -2. 根目录: `/www/sites/uniservice-mobile.hnxinyouhe.com/index` -3. 添加 Nginx 反向代理(见下方配置) - -### 5. 上传前端 +### 7. 上传前端 ```bash cd /www/x-server-mobile/frontend npm run build rsync -avz --delete \ 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 # 检查后端容器 -ssh root@your-server +ssh root@45.153.130.80 docker ps | grep x-server docker logs -f x-server-backend-prod ``` @@ -239,17 +237,18 @@ docker logs -f x-server-backend-prod |------|---------| | API 404 | 检查 Nginx 反向代理配置 | | 容器启动失败 | 检查数据库/Redis 容器状态,查看日志 | -| 飙书登录失败 | 检查 `/login/*` 反向代理配置 | +| 飞书登录失败 | 检查 `/login/*` 反向代理配置 | | 静态资源 404 | 确认前端上传到正确目录 | --- ## 文件清单 -| 文件 | 用途 | -|------|------| -| `deploy/docker-compose.prod.yml` | 生产环境 Docker Compose | -| `deploy/.env.production` | 生产环境变量 | -| `deploy/nginx-1panel.conf` | Nginx 配置参考 | -| `deploy/deploy-1panel.sh` | 本端部署脚本 | -| `deploy/server-deploy.sh` | 服务器端部署脚本 | +需要上传到服务器的文件: + +| 文件 | 目标位置 | +|------|---------| +| `backend/Dockerfile.prod` | `server/backend/` | +| `deploy/docker-compose.prod.yml` | `server/deploy/` | +| `deploy/.env.production` | `server/deploy/` | +| `deploy/server-deploy.sh` | `server/deploy/deploy.sh` |