feat: add Spug auto-deployment scripts for fullstack project

This commit is contained in:
2026-02-28 15:26:09 +08:00
parent f37cdcb5c0
commit 13badac2dc
5 changed files with 1260 additions and 0 deletions

291
spug/QUICKSTART.md Normal file
View File

@@ -0,0 +1,291 @@
# Spug 部署快速参考
## 🚀 快速开始5 分钟配置)
### 1. 上传脚本到 Spug 服务器
```bash
scp spug/deploy.sh user@spug-server:/opt/spug/scripts/
scp spug/hospital-backend.service user@spug-server:/tmp/
ssh user@spug-server "chmod +x /opt/spug/scripts/deploy.sh"
```
### 2. 在目标服务器配置 systemd 服务
```bash
# 登录目标服务器
ssh user@target-server
# 复制服务文件
sudo cp /tmp/hospital-backend.service /etc/systemd/system/
# 启用服务
sudo systemctl daemon-reload
sudo systemctl enable hospital-backend
```
### 3. 在 Spug Web 界面配置
#### 步骤 1: 添加主机
- 菜单:**系统管理** -> **主机管理** -> **创建主机**
- 填写:
- 名称:`production`
- IP你的服务器 IP
- 端口22
- 认证:选择密钥或密码
#### 步骤 2: 创建应用
- 菜单:**应用管理** -> **创建应用**
- 填写:
- 名称:`hospital-performance`
- 类型:`其他`
- 仓库地址:`https://gitea.gentronhealth.com/chenqi/hospital_performance.git`
- 分支:`main`
#### 步骤 3: 配置环境变量
在应用详情页的 **环境变量** 标签页添加:
```
SPUG_DEPLOY_DIR=/var/www/hospital-performance
PYTHON_VERSION=python3.10
BACKEND_SERVICE=hospital-backend
BACKEND_PORT=8000
FRONTEND_SERVICE=nginx
LOG_FILE=/var/log/spug/deploy.log
```
#### 步骤 4: 配置发布
- 进入应用的 **发布配置** 标签页
- 构建类型:`跳过构建`
- 发布脚本:`/opt/spug/scripts/deploy.sh`
- 保存
#### 步骤 5: 执行发布
- 菜单:**发布管理** -> **创建发布单**
- 选择应用和版本
- 选择主机 `production`
- 点击 **立即发布**
---
## 📋 常用命令速查
### 查看部署日志
```bash
# 实时查看
tail -f /var/log/spug/deploy.log
# 查看最近 100 行
tail -n 100 /var/log/spug/deploy.log
# 搜索错误
grep ERROR /var/log/spug/deploy.log
```
### 服务管理
```bash
# 查看状态
systemctl status hospital-backend
systemctl status nginx
# 重启服务
systemctl restart hospital-backend
systemctl restart nginx
# 查看日志
journalctl -u hospital-backend -f
```
### Git 操作
```bash
# 查看当前版本
cd /var/www/hospital-performance
git log --oneline -5
# 回退版本
git reset --hard <commit-hash>
```
### 数据库操作
```bash
# 手动迁移
cd /var/www/hospital-performance/backend
source ../venv/bin/activate
alembic upgrade head
# 查看迁移历史
alembic history
# 数据库备份
pg_dump -h 192.168.110.252 -p 15432 -U postgres hospital_performance > backup.sql
# 数据库恢复
psql -h 192.168.110.252 -p 15432 -U postgres hospital_performance < backup.sql
```
### 前端调试
```bash
# 检查 Node 版本
node -v
npm -v
# 清理重建
cd /var/www/hospital-performance/frontend
rm -rf node_modules dist
npm install --production
npm run build
```
---
## 🔧 故障排查流程图
```
部署失败
├─ 前置检查失败
│ ├─ 缺少命令 → 安装 git/python/node/npm
│ └─ 磁盘不足 → 清理空间或扩容
├─ 代码更新失败
│ ├─ Git 连接失败 → 检查网络和凭证
│ └─ 冲突 → 手动解决或重置
├─ 后端部署失败
│ ├─ 虚拟环境 → 删除重建 venv
│ ├─ 依赖安装 → 检查 requirements.txt
│ ├─ 数据库迁移 → 手动执行 alembic
│ └─ 服务启动 → 检查 systemd 配置
└─ 前端部署失败
├─ npm install 失败 → 清理缓存 npm cache clean
├─ 构建失败 → 检查 Node.js 版本
└─ Nginx 加载 → systemctl reload nginx
```
---
## ⚠️ 常见问题速查
### Q1: 权限错误 "Permission denied"
```bash
# 修复目录权限
sudo chown -R www-data:www-data /var/www/hospital-performance
sudo chmod -R 755 /var/www/hospital-performance
```
### Q2: 端口被占用
```bash
# 查看端口占用
sudo lsof -i :8000
sudo netstat -tlnp | grep 8000
# 杀死进程
sudo kill -9 <PID>
```
### Q3: 数据库连接失败
```bash
# 测试连接
psql -h 192.168.110.252 -p 15432 -U postgres -d hospital_performance
# 检查防火墙
sudo ufw status
sudo telnet 192.168.110.252 15432
```
### Q4: Python 模块找不到
```bash
# 确认虚拟环境激活
source /var/www/hospital-performance/venv/bin/activate
# 重新安装依赖
pip install -r requirements.txt --force-reinstall
```
### Q5: 前端页面空白
```bash
# 检查浏览器控制台错误
F12 -> Console
# 检查 Nginx 配置
sudo nginx -t
sudo cat /etc/nginx/sites-available/default
# 检查文件权限
ls -la /var/www/hospital-performance/frontend/dist/
```
---
## 📊 监控指标
### 关键指标
- **API 响应时间**: < 200ms
- **页面加载时间**: < 3s
- **服务可用性**: > 99.9%
- **数据库连接数**: < 100
### 监控命令
```bash
# CPU 使用率
top -bn1 | grep "Cpu(s)"
# 内存使用
free -h
# 磁盘 IO
iostat -x 1
# 网络流量
iftop -P -n
# 进程监控
ps aux | grep uvicorn
ps aux | grep nginx
```
---
## 🎯 发布清单
### 发布前检查
- [ ] 代码已合并到 main 分支
- [ ] 通过所有测试
- [ ] 数据库迁移脚本就绪
- [ ] 备份策略已配置
- [ ] 回滚方案已准备
### 发布中检查
- [ ] 代码更新成功
- [ ] 依赖安装完成
- [ ] 数据库迁移成功
- [ ] 服务启动正常
- [ ] 健康检查通过
### 发布后验证
- [ ] 访问前端页面
- [ ] 测试登录功能
- [ ] 验证核心功能
- [ ] 检查错误日志
- [ ] 监控系统资源
---
## 📞 应急联系
### 升级流程
1. **一级故障**功能异常)→ 开发团队
2. **二级故障**性能下降)→ 运维团队 + 开发负责人
3. **三级故障**服务中断)→ 紧急响应小组
### 回滚命令
```bash
# 快速回滚到上一个版本
cd /var/www/hospital-performance
git reset --hard HEAD~1
# 重启服务
systemctl restart hospital-backend
systemctl restart nginx
```
---
**提示**: 将此文件打印或保存为书签便于快速查阅