# X-Server Mobile 部署检查清单 ## 部署前检查 ### 服务器环境 - [ ] 服务器已安装 1Panel 面板 - [ ] 已安装 OpenResty 并正常运行 - [ ] 已安装 MySQL 容器(1Panel 管理) - [ ] 已安装 Redis 容器(1Panel 管理) - [ ] Docker 网络配置正确(1panel-network 存在) ### 网络配置 - [ ] 域名 DNS 已解析到服务器 IP - [ ] 服务器防火墙已开放 80、443 端口 - [ ] 服务器可从外网访问 ### 数据库准备 - [ ] 创建生产数据库 `xserver` - [ ] 创建专用数据库用户 `xserver` - [ ] 授予用户权限 - [ ] 导入数据库结构和初始数据 ### SSL 证书 - [ ] 安装 certbot: `apt-get install certbot` - [ ] 获取证书: `certbot certonly --standalone -d xsm.hnxinyouhe.com` - [ ] 验证证书路径正确 ### 环境变量 - [ ] 复制 `.env.production.template` 为 `.env.production` - [ ] 填写数据库配置 - [ ] 填写 Redis 配置 - [ ] 填写飞书配置 - [ ] 更新飞书回调地址为 `https://xsm.hnxinyouhe.com/login/callback` ### 目录结构 - [ ] 创建部署目录: `/opt/x-server-mobile` - [ ] 创建子目录: frontend, backend, logs, backup - [ ] 设置正确的目录权限 --- ## 部署步骤 ### 1. 准备服务器环境 ```bash # SSH 登录服务器 ssh root@your-server # 创建目录结构 mkdir -p /opt/x-server-mobile/{frontend,backend,logs,backup} mkdir -p /opt/x-server-mobile/logs/backend mkdir -p /opt/x-server-mobile/logs/nginx # 创建日志文件 touch /opt/x-server-mobile/logs/nginx_access.log touch /opt/x-server-mobile/logs/nginx_error.log ``` ### 2. 配置 OpenResty ```bash # 复制配置文件到 OpenResty 配置目录 cp deploy/nginx/x-server-mobile-prod.conf /usr/local/openresty/nginx/conf/conf.d/x-server-mobile.conf # 测试配置 openresty -t # 如果测试通过,重载配置 openresty -s reload ``` ### 3. 构建前端 ```bash # 在开发环境 cd /www/x-server-mobile/frontend npm install npm run build # 验证构建产物 ls -la dist/ ``` ### 4. 部署 ```bash # 方式1: 使用部署脚本 ./deploy.sh your-server-ip # 方式2: 手动部署 # 上传前端 scp -r frontend/dist/* root@server:/opt/x-server-mobile/frontend/ # 上传后端 scp -r backend/ root@server:/opt/x-server-mobile/backend/ # 上传 docker-compose scp docker-compose.prod.yml root@server:/opt/x-server-mobile/ ``` ### 5. 启动后端 ```bash # SSH 登录服务器 ssh root@server # 进入部署目录 cd /opt/x-server-mobile # 加载环境变量 source .env.production # 启动容器 docker-compose -f docker-compose.prod.yml up -d # 查看容器状态 docker ps | grep x-server # 查看日志 docker logs -f x-server-backend-prod ``` --- ## 部署后验证 ### 前端验证 - [ ] 访问 `https://xsm.hnxinyouhe.com` 显示登录页面 - [ ] 页面样式加载正常 - [ ] 浏览器控制台无错误 ### 后端验证 - [ ] 容器运行正常: `docker ps | grep x-server` - [ ] 健康检查通过 - [ ] 日志无错误信息 ### 功能验证 - [ ] 邮箱密码登录功能正常 - [ ] 飞书客户端内免登正常 - [ ] 飞书扫码登录正常 - [ ] 审批列表正常显示 - [ ] 出差申请功能正常 - [ ] 飞书卡片通知正常 ### 飞书回调验证 - [ ] 飞书后台配置回调地址: `https://xsm.hnxinyouhe.com/login/callback` - [ ] 点击飞书卡片"查看详情"跳转正确 - [ ] 快速审批按钮功能正常 --- ## 监控配置 ### 日志监控 ```bash # Nginx 访问日志 tail -f /opt/x-server-mobile/logs/nginx_access.log # Nginx 错误日志 tail -f /opt/x-server-mobile/logs/nginx_error.log # 后端容器日志 docker logs -f x-server-backend-prod # 后端应用日志 tail -f /opt/x-server-mobile/logs/backend/*.log ``` ### 性能监控 ```bash # 容器资源使用 docker stats x-server-backend-prod # 磁盘使用 du -sh /opt/x-server-mobile/* # 内存使用 free -h ``` ### 数据库监控 ```bash # 检查 MySQL 连接 docker exec x-server-backend-prod php -r " try { new PDO('mysql:host=DB_HOST;dbname=xserver', 'xserver', 'password'); echo 'Database connection OK\n'; } catch (Exception \$e) { echo 'Database connection FAILED: ' . \$e->getMessage() . '\n'; } " ``` --- ## 回滚准备 ### 备份检查 ```bash # 检查备份目录 ls -la /opt/x-server-mobile/backup/ # 查看最新备份 ls -lt /opt/x-server-mobile/backup/ | head -5 ``` ### 回滚测试 ```bash # 测试回滚脚本 ./rollback.sh ``` --- ## 定期维护 ### 每周 - [ ] 检查容器运行状态 - [ ] 检查日志错误 - [ ] 检查磁盘空间 ### 每月 - [ ] 更新 SSL 证书(自动续期) - [ ] 数据库备份 - [ ] 日志归档和清理 ### 每季度 - [ ] 安全更新检查 - [ ] 性能优化评估 - [ ] 灾难恢复演练 --- ## 应急处理 ### 服务异常 ```bash # 查看容器状态 docker ps -a | grep x-server # 重启后端容器 docker restart x-server-backend-prod # 查看详细日志 docker logs --tail 100 x-server-backend-prod ``` ### 数据库异常 ```bash # 检查 MySQL 容器 docker ps | grep mysql # 进入 MySQL docker exec -it mysql -uxserver -p # 检查连接数 SHOW PROCESSLIST; ``` ### 网络异常 ```bash # 检查端口监听 netstat -tlnp | grep -E '80|443|8787' # 检查防火墙 ufw status # 测试外网访问 curl -I https://xsm.hnxinyouhe.com ``` --- ## 联系信息 - 开发负责人: ___________ - 运维负责人: ___________ - 紧急联系电话: ___________