Files
piano-plan/docs/DEPLOYMENT.md
T

250 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署指南
## 目标服务器
- **服务器**: 阿里云 ECS (CentOS 7)
- **IP**: 47.115.32.206
- **连接**: `ssh -i ~/.ssh/id_rsa root@47.115.32.206`
---
## 部署架构
```
┌─────────────────────────────┐
│ 阿里云 ECS (CentOS 7) │
│ │
│ ┌─────────────────────┐ │
│ │ Docker Container │ │
│ │ piano-plan:5000 │ │
│ └─────────────────────┘ │
│ ▲ │ │
│ │ │ │
│ ┌──────┴───┴──────────┐ │
│ │ 数据卷 (宿主机目录) │ │
│ │ /data │ │
│ │ /output │ │
│ │ /config │ │
│ └──────────────────────┘ │
└─────────────────────────────┘
```
---
## 数据分离(关键)
| 目录 | 容器内 | 宿主机 | 说明 |
|------|--------|--------|------|
| 数据库 | /app/data | ./data | SQLite数据库 |
| PDF输出 | /app/output | ./output | 导出的PDF |
| API配置 | /app/config | ./config | LLM配置 |
**优势**:
- 容器删除重建,数据不丢失
- 备份只需备份宿主机目录
---
## 部署步骤
### 1. 上传代码
```bash
# 在本地打包
cd projects/青年钢琴集体课/练习方案系统
tar -czvf piano-plan.tar.gz \
--exclude=venv \
--exclude=__pycache__ \
--exclude=.git \
-f - .
# 上传到服务器
scp -i ~/.ssh/id_rsa piano-plan.tar.gz root@47.115.32.206:/opt/
# SSH登录服务器
ssh -i ~/.ssh/id_rsa root@47.115.32.206
```
### 2. 服务器准备
```bash
# 安装 Docker(如果未安装)
curl -fsSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
# 安装 docker-composeCentOS 7
curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
cd /opt
mkdir -p piano-plan && cd piano-plan
tar -xzf ../piano-plan.tar.gz --strip-components=1
# 创建数据目录
mkdir -p data output config
# 开放端口
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --reload
```
### 3. 启动容器
```bash
# 方式一:使用 docker-compose(推荐)
docker-compose up -d --build
# 方式二:手动 docker run
docker build -t piano-plan .
docker run -d \
--name piano-plan \
-p 5000:5000 \
-v $(pwd)/data:/app/data \
-v $(pwd)/output:/app/output \
-v $(pwd)/config:/app/config \
-e FLASK_ENV=production \
piano-plan
```
### 4. 验证部署
```bash
# 检查容器状态
docker ps | grep piano-plan
# 检查日志
docker logs piano-plan
# 访问测试
curl http://localhost:5000/
```
### 5. 配置防火墙
```bash
# 开放5000端口(如果需要)
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --reload
```
### 6. 配置 Nginx 反向代理(可选)
```nginx
server {
listen 80;
server_name piano.yourdomain.com; # 替换为实际域名
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
---
## 备份与恢复
### 备份
```bash
# 停止服务
docker-compose stop
# 打包数据
tar -czvf piano-plan-backup-$(date +%Y%m%d).tar.gz data/ output/ config/
# 重启服务
docker-compose start
```
### 恢复
```bash
# 停止服务
docker-compose stop
# 解压备份
tar -xzf piano-plan-backup-20260418.tar.gz
# 重启服务
docker-compose start
```
---
## 更新部署
```bash
# 拉取新代码(方式一:git pull)
git pull
# 或 上传新代码(方式二)
# 重复"上传代码"步骤
# 重新构建并启动
docker-compose up -d --build
# 数据不会丢失(挂载卷)
```
---
## 常用命令
```bash
# 查看日志
docker logs -f piano-plan
# 重启服务
docker-compose restart
# 停止服务
docker-compose stop
# 删除容器(数据不丢失)
docker-compose down
# 完全删除(包括镜像)
docker-compose down --rmi local
```
---
## 故障排查
### 容器启动失败
```bash
# 查看日志
docker logs piano-plan
# 检查端口
netstat -tlnp | grep 5000
```
### 数据库问题
```bash
# 进入容器检查
docker exec -it piano-plan sh
# 检查数据目录
ls -la /app/data/
```
---
## 版本信息
| 日期 | 版本 | 说明 |
|------|------|------|
| 2026-04-18 | V1.2 | 初始部署版本,含用户/角色/班级管理 |
---
## 联系
部署完成后访问: `http://47.115.32.206:5000`