4ceb5eac7e
文件结构优化: - docs/ 归档所有项目文档(PROJECT.md, PROJECT_ISSUES.md 等) - deploy/ 归档所有部署相关文件(docker-compose.prod.yml, nginx 配置等) - scripts/ 归档脚本文件(deploy.sh, rollback.sh) - tests/ 归档测试文件(test_data.php) 更新引用路径: - CLAUDE.md 更新文档路径引用 - 部署文档更新配置文件路径引用 清理文件: - 移除非必要的测试文件(TestController, 测试脚本等) - 移除重复/错误的目录 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
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. 准备服务器环境
# 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
# 复制配置文件到 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. 构建前端
# 在开发环境
cd /www/x-server-mobile/frontend
npm install
npm run build
# 验证构建产物
ls -la dist/
4. 部署
# 方式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. 启动后端
# 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 - 点击飞书卡片"查看详情"跳转正确
- 快速审批按钮功能正常
监控配置
日志监控
# 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
性能监控
# 容器资源使用
docker stats x-server-backend-prod
# 磁盘使用
du -sh /opt/x-server-mobile/*
# 内存使用
free -h
数据库监控
# 检查 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';
}
"
回滚准备
备份检查
# 检查备份目录
ls -la /opt/x-server-mobile/backup/
# 查看最新备份
ls -lt /opt/x-server-mobile/backup/ | head -5
回滚测试
# 测试回滚脚本
./rollback.sh <backup_name>
定期维护
每周
- 检查容器运行状态
- 检查日志错误
- 检查磁盘空间
每月
- 更新 SSL 证书(自动续期)
- 数据库备份
- 日志归档和清理
每季度
- 安全更新检查
- 性能优化评估
- 灾难恢复演练
应急处理
服务异常
# 查看容器状态
docker ps -a | grep x-server
# 重启后端容器
docker restart x-server-backend-prod
# 查看详细日志
docker logs --tail 100 x-server-backend-prod
数据库异常
# 检查 MySQL 容器
docker ps | grep mysql
# 进入 MySQL
docker exec -it <mysql-container> mysql -uxserver -p
# 检查连接数
SHOW PROCESSLIST;
网络异常
# 检查端口监听
netstat -tlnp | grep -E '80|443|8787'
# 检查防火墙
ufw status
# 测试外网访问
curl -I https://xsm.hnxinyouhe.com
联系信息
- 开发负责人: ___________
- 运维负责人: ___________
- 紧急联系电话: ___________