126 lines
3.3 KiB
Markdown
126 lines
3.3 KiB
Markdown
# SciLit 生产部署指南
|
||||
|
|
|
|||
|
|
## 前置条件
|
|||
|
|
|
|||
|
|
- 服务器已安装 Docker 24+ + docker compose plugin
|
|||
|
|
- SSH 可连接到服务器(推荐 `~/.ssh/config`)
|
|||
|
|
- 代码仓库可被服务器 `git pull`(Gitee/GitHub/自建 Git)
|
|||
|
|
|
|||
|
|
## 快速部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 服务器上 clone 项目
|
|||
|
|
ssh root@your-server.com
|
|||
|
|
git clone https://gitee.com/your-org/scilit-oncology.git /root/scilit-oncology
|
|||
|
|
cd /root/scilit-oncology
|
|||
|
|
|
|||
|
|
# 2. 配置环境变量
|
|||
|
|
cp .env.example .env
|
|||
|
|
# 编辑 .env,至少填写以下必填项:
|
|||
|
|
# PG_PASSWORD, REDIS_PASSWORD, JWT_SECRET, PUBLIC_BASE_URL
|
|||
|
|
|
|||
|
|
# 3. 启动
|
|||
|
|
docker compose -f docker-compose.prod.yml --env-file .env up -d
|
|||
|
|
|
|||
|
|
# 检查是否就绪
|
|||
|
|
curl http://localhost:8000/health
|
|||
|
|
curl http://localhost:80
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用 deploy.sh 自动化部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 配置服务器连接信息
|
|||
|
|
cp deploy.env.example deploy.env
|
|||
|
|
# 编辑 deploy.env,填入 SCILIT_HOST / SCILIT_USER / SCILIT_PATH
|
|||
|
|
|
|||
|
|
# 2. 推送代码并部署
|
|||
|
|
source deploy.env && ./deploy.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## PostgreSQL 备份与恢复
|
|||
|
|
|
|||
|
|
### 备份
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 全量备份(压缩)
|
|||
|
|
docker exec -t scilit-oncology_postgres_1 pg_dump -U scilit scilit | gzip > scilit-backup-$(date +%F).sql.gz
|
|||
|
|
|
|||
|
|
# 仅数据(不含索引,恢复更快)
|
|||
|
|
docker exec -t scilit-oncology_postgres_1 pg_dump -U scilit --data-only --exclude-table=alembic_version scilit | gzip > scilit-data-$(date +%F).sql.gz
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 恢复
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 先停止后端服务(避免写入冲突)
|
|||
|
|
docker compose -f docker-compose.prod.yml stop backend worker
|
|||
|
|
|
|||
|
|
# 恢复全量备份
|
|||
|
|
gunzip -c scilit-backup-2026-07-08.sql.gz | docker exec -i scilit-oncology_postgres_1 psql -U scilit scilit
|
|||
|
|
|
|||
|
|
# 重启
|
|||
|
|
docker compose -f docker-compose.prod.yml start backend worker
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 定时自动备份(推荐)
|
|||
|
|
|
|||
|
|
在服务器上配置 cron:
|
|||
|
|
|
|||
|
|
```cron
|
|||
|
|
# 每天凌晨 3 点备份,保留 30 天
|
|||
|
|
0 3 * * * cd /root/scilit-oncology && docker exec -t $(docker ps -q -f name=postgres) pg_dump -U scilit scilit | gzip > /backups/scilit-$(date +\%F).sql.gz && find /backups -name 'scilit-*.sql.gz' -mtime +30 -delete
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 健康检查与运维
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看所有服务状态
|
|||
|
|
docker compose -f docker-compose.prod.yml ps
|
|||
|
|
|
|||
|
|
# 查看日志
|
|||
|
|
docker compose -f docker-compose.prod.yml logs -f backend
|
|||
|
|
docker compose -f docker-compose.prod.yml logs -f worker
|
|||
|
|
|
|||
|
|
# 单独重启某个服务
|
|||
|
|
docker compose -f docker-compose.prod.yml restart backend
|
|||
|
|
|
|||
|
|
# 更新到最新代码
|
|||
|
|
git pull origin main
|
|||
|
|
docker compose -f docker-compose.prod.yml build
|
|||
|
|
docker compose -f docker-compose.prod.yml up -d --no-deps --remove-orphans
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## HTTPS 配置
|
|||
|
|
|
|||
|
|
docker-compose.prod.yml 中的 Nginx 仅提供 HTTP 服务。建议使用上游反向代理:
|
|||
|
|
|
|||
|
|
### Caddy(推荐,自动 Let's Encrypt)
|
|||
|
|
|
|||
|
|
```caddy
|
|||
|
|
your-domain.com {
|
|||
|
|
reverse_proxy 127.0.0.1:80
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Nginx
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl;
|
|||
|
|
server_name your-domain.com;
|
|||
|
|
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
|||
|
|
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://127.0.0.1:80;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
验证证书可用后更新 `PUBLIC_BASE_URL=https://your-domain.com` 并重启 backend。
|