# AI辅助Meta分析Screening应用部署教程

## 📋 目录
- [项目概述](#项目概述)
- [环境准备](#环境准备)
- [第一步:安装Web服务器](#第一步安装web服务器)
- [第二步:安装Docker](#第二步安装docker)
- [第三步:准备项目文件](#第三步准备项目文件)
- [第四步:上传项目到服务器](#第四步上传项目到服务器)
- [第五步:配置Docker部署](#第五步配置docker部署)
- [第六步:配置反向代理](#第六步配置反向代理)
- [第七步:上传前端文件](#第七步上传前端文件)
- [管理和维护](#管理和维护)
- [常见问题](#常见问题)

---

## 项目概述

本项目是一个AI辅助的Meta分析文献筛选系统,包含:
- **后端**:Python FastAPI服务,调用MedLive等AI API
- **前端**:静态HTML页面
- **部署方式**:Docker容器化 + Tengine反向代理

### 技术栈
- Python 3.10 + FastAPI
- Docker & Docker Compose
- Tengine (阿里巴巴的Nginx发行版)
- 服务器系统:Alibaba Cloud Linux 3

---

## 环境准备

### 服务器要求
- 云服务器(本教程使用阿里云ECS)
- 操作系统:Alibaba Cloud Linux 3 或 CentOS/RHEL 8+
- 至少 2GB RAM
- 开放端口:80 (HTTP), 22 (SSH)

### 本地要求
- Windows系统(使用PowerShell)
- 已安装SSH客户端
- 项目源代码

---

## 第一步:安装Web服务器

### 1.1 SSH登录服务器

```bash
# 在本地PowerShell或终端执行
ssh root@你的服务器IP

# 例如:
ssh root@123.45.67.89

注意:如果连接超时,需要在云服务器控制台的安全组规则中开放22端口。

1.2 查看系统信息

# 查看系统版本
cat /etc/os-release

1.3 安装Tengine

由于标准仓库中没有nginx,我们使用阿里云优化的Tengine:

# 安装Tengine
sudo yum install tengine -y

# 启动Tengine
sudo systemctl start tengine

# 设置开机自启
sudo systemctl enable tengine

# 检查状态
sudo systemctl status tengine

q 退出状态查看。

1.4 验证安装

在浏览器访问:http://你的服务器IP

如果看到 "Welcome to tengine!" 页面,说明安装成功!

注意:如果无法访问,需要在云服务器控制台的安全组规则中开放80端口。


第二步:安装Docker

本项目使用Docker容器化部署Python应用。

2.1 检查Docker是否已安装

docker --version

如果显示版本号(如 Docker version 26.1.3),说明已安装,跳到2.3。

2.2 安装Docker(如果需要)

# 安装Docker
sudo yum install docker-ce -y

# 启动Docker
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

2.3 配置Docker镜像源

由于国内网络原因,需要配置国内镜像源加速:

# 备份原配置(如果存在)
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 2>/dev/null || true

# 创建新配置
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证Docker状态
sudo systemctl status docker

q 退出。


第三步:准备项目文件

3.1 项目结构

你的本地项目应该有以下结构:

screening/
├── app.py                  # FastAPI主程序
├── initial_screen.py       # 核心逻辑
├── static/
│   └── index.html         # 前端页面
├── demo_input.xlsx        # 示例文件
├── demo_output.xlsx
└── ... 其他文件

3.2 在本地创建Docker配置文件

在项目根目录下创建以下文件:

3.2.1 创建 requirements.txt
cd "你的项目路径"
# 例如:cd "E:\Projects\screening"

# 创建requirements.txt
@"
fastapi
uvicorn[standard]
python-dotenv
pandas
openpyxl
requests
aiofiles
python-multipart
"@ | Out-File -FilePath requirements.txt -Encoding utf8
3.2.2 创建 Dockerfile
@"
FROM python:3.10-slim

WORKDIR /app

# 配置pip使用国内镜像源
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \
    pip config set install.trusted-host mirrors.aliyun.com

# 升级pip
RUN pip install --upgrade pip --default-timeout=100

# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt --default-timeout=100

# 复制项目文件
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
"@ | Out-File -FilePath Dockerfile -Encoding utf8
3.2.3 创建 docker-compose.yml
@"
services:
  screening-api:
    build: .
    ports:
      - "8000:8000"
    env_file:
      - .env
    restart: unless-stopped
    volumes:
      - ./demo_input.xlsx:/app/demo_input.xlsx
      - ./demo_output.xlsx:/app/demo_output.xlsx
"@ | Out-File -FilePath docker-compose.yml -Encoding utf8
3.2.4 创建 .dockerignore
@"
__pycache__
*.pyc
*.pyo
*.pyd
.Python
.env
.venv
venv/
*.log
.git
.gitignore
"@ | Out-File -FilePath .dockerignore -Encoding utf8
3.2.5 创建 .env.example(模板,不含真实密钥)
@"
# API配置
API_KEY=your_api_key_here
BASE_URL=https://...//chat


# 服务配置
PORT=8000
MAX_FILE_SIZE=10485760
ANALYSIS_TIMEOUT=300
"@ | Out-File -FilePath .env.example -Encoding utf8

3.3 验证文件创建

# 检查所有文件是否创建成功
dir Dockerfile, docker-compose.yml, requirements.txt, .env.example, .dockerignore

第四步:上传项目到服务器

4.1 打包项目(排除敏感文件)

# 在项目目录下执行
tar -czf screening.tar.gz --exclude=.env --exclude=__pycache__ --exclude=*.pyc --exclude=*.log *

# 检查打包是否成功
dir screening.tar.gz

4.2 上传到服务器

# 上传压缩包(替换成你的实际服务器IP)
scp screening.tar.gz root@你的服务器IP:/var/www/

# 例如:
scp screening.tar.gz root@123.45.67.89:/var/www/

输入服务器密码后等待上传完成。


第五步:配置Docker部署

5.1 在服务器上解压项目

切换到服务器SSH终端:

# 创建目录并解压
cd /var/www
mkdir -p screening-app
tar -xzf screening.tar.gz -C screening-app
cd screening-app

# 查看文件
ls -la

5.2 创建环境变量文件(包含真实API密钥)

使用cat命令创建 .env 文件:

cat > .env << 'EOF'
# API配置
API_KEY=your_api_key_here
BASE_URL=https://...//chat
PORT=8000
MAX_FILE_SIZE=10485760
ANALYSIS_TIMEOUT=300
EOF

重要:将占位符替换为你的实际API配置信息!

各参数说明

  • API_KEY: 模型密钥
  • BASE_URL: 调用地址

5.3 验证.env文件

# 查看文件(确认内容正确,但注意不要泄露密钥)
ls -la .env

5.4 构建并启动Docker容器

# 构建并启动(首次运行需要下载镜像,约2-5分钟)
docker compose up -d --build

# 查看日志(确认启动成功)
docker compose logs -f

成功的日志应该显示:

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000

Ctrl+C 退出日志查看(容器会继续运行)。

5.5 测试API服务

# 测试健康检查端点
curl http://localhost:8000/health

# 应该返回:{"status":"ok"}

# 查看容器状态
docker compose ps

第六步:配置反向代理

6.1 创建网站目录

# 创建前端文件目录
sudo mkdir -p /var/www/tool

# 设置权限
sudo chmod -R 755 /var/www/tool
sudo chown -R tengine:tengine /var/www/tool

6.2 禁用Tengine默认server块

# 备份主配置
sudo cp /etc/tengine/nginx.conf /etc/tengine/nginx.conf.backup

# 查看默认server块的位置
grep -n "listen.*80 default_server" /etc/tengine/nginx.conf

# 注释掉默认server块(通常是第41-62行,具体以实际为准)
sudo sed -i '41,62s/^/# /' /etc/tengine/nginx.conf

6.3 创建应用配置文件

# 创建配置文件(将YOUR_SERVER_IP替换为你的实际服务器IP)
cat > /etc/tengine/conf.d/tool.conf << 'EOF'
server {
    listen 80;
    server_name YOUR_SERVER_IP _;
    
    # 前端静态文件
    location / {
        root /var/www/tool;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
    
    # API代理到Docker容器
    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        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_read_timeout 300s;
        client_max_body_size 100M;
    }
    
    # 健康检查端点
    location /health {
        proxy_pass http://127.0.0.1:8000;
    }
}
EOF

重要:使用vi或sed命令将配置文件中的 YOUR_SERVER_IP 替换为你的实际服务器IP!

# 方法1:使用sed替换(推荐)
sudo sed -i 's/YOUR_SERVER_IP/你的实际IP/g' /etc/tengine/conf.d/tool.conf

# 方法2:使用vi手动编辑
sudo vi /etc/tengine/conf.d/tool.conf
# 按i进入编辑模式,修改YOUR_SERVER_IP,按Esc后输入:wq保存

6.4 测试并应用配置

# 查看配置文件
cat /etc/tengine/conf.d/tool.conf

# 测试配置语法
sudo tengine -t

# 应该显示:
# nginx: the configuration file /etc/tengine/nginx.conf syntax is ok
# nginx: configuration file /etc/tengine/nginx.conf test is successful

# 启动Tengine
sudo systemctl start tengine

# 测试API是否可以通过Tengine访问
curl http://localhost/health

# 应该返回:{"status":"ok"}

第七步:上传前端文件

7.1 在本地上传HTML文件

本地PowerShell中:

# 进入项目目录
cd "你的项目路径"

# 上传前端HTML文件(替换为你的实际服务器IP)
scp static/index.html root@你的服务器IP:/var/www/tool/

# 例如:
scp static/index.html root@123.45.67.89:/var/www/tool/

7.2 在服务器设置权限

服务器SSH终端

# 设置正确的所有者和权限
sudo chown -R tengine:tengine /var/www/tool/
sudo chmod -R 755 /var/www/tool/

# 验证
ls -la /var/www/tool/

# 重新加载Tengine
sudo systemctl reload tengine

7.3 测试访问

在浏览器中访问:http://你的服务器IP

Ctrl+F5 强制刷新页面(清除缓存)。

如果看到你的screening应用界面,恭喜!部署成功! 🎉


管理和维护

查看日志

# 查看后端日志
cd /var/www/screening-app
docker compose logs -f

# 查看Tengine日志
sudo tail -f /var/log/tengine/access.log
sudo tail -f /var/log/tengine/error.log

重启服务

# 重启后端容器
cd /var/www/screening-app
docker compose restart

# 重启Tengine
sudo systemctl restart tengine

停止服务

# 停止后端
cd /var/www/screening-app
docker compose down

# 停止Tengine
sudo systemctl stop tengine

启动服务

# 启动后端
cd /var/www/screening-app
docker compose up -d

# 启动Tengine
sudo systemctl start tengine

查看服务状态

# 查看Docker容器状态
docker compose ps

# 查看Tengine状态
sudo systemctl status tengine

# 查看端口占用
netstat -tulnp | grep -E ':80|:8000'

更新应用

更新后端代码

  1. 在本地修改代码
  2. 重新打包上传
# 本地PowerShell
cd "你的项目路径"
tar -czf screening.tar.gz --exclude=.env --exclude=__pycache__ --exclude=*.pyc *
scp screening.tar.gz root@你的服务器IP:/var/www/
  1. 在服务器上重新部署
# 服务器SSH终端
cd /var/www
docker compose down
rm -rf screening-app
mkdir screening-app
tar -xzf screening.tar.gz -C screening-app
cd screening-app

# 创建.env文件(使用之前保存的配置)
cat > .env << 'EOF'
# API配置
API_KEY=your_api_key_here
BASE_URL=https://...//chat
PORT=8000
MAX_FILE_SIZE=10485760
ANALYSIS_TIMEOUT=300
EOF

# 重新构建
docker compose up -d --build

更新前端文件

# 本地PowerShell - 直接上传新的HTML
scp static/index.html root@你的服务器IP:/var/www/tool/
# 服务器 - 重新加载Tengine
sudo systemctl reload tengine

常见问题

Q1: 访问网站显示403 Forbidden

原因:文件权限不正确

解决

sudo chown -R tengine:tengine /var/www/tool/
sudo chmod -R 755 /var/www/tool/
sudo systemctl reload tengine

Q2: API请求失败或超时

检查

# 检查Docker容器是否运行
docker compose ps

# 查看容器日志
docker compose logs

# 检查端口是否监听
netstat -tulnp | grep :8000

Q3: Docker构建超时

原因:网络问题或镜像源慢

解决:确保已配置Docker国内镜像源(参见第二步2.3)

Q4: 浏览器看到旧页面

原因:浏览器缓存

解决

  • Ctrl+F5 强制刷新
  • 使用无痕模式访问
  • 清除浏览器缓存

Q5: 修改.env后不生效

解决

cd /var/www/screening-app
docker compose down
docker compose up -d

Q6: 端口被占用

# 查看80端口占用
sudo lsof -i :80

# 查看8000端口占用
sudo lsof -i :8000

# 停止占用端口的进程(谨慎操作)
sudo kill -9 进程ID

Q7: Tengine配置测试失败

原因:配置文件语法错误

解决

# 查看详细错误信息
sudo tengine -t

# 恢复备份配置
sudo cp /etc/tengine/nginx.conf.backup /etc/tengine/nginx.conf

# 重新创建配置文件

安全建议

1. 使用HTTPS(强烈推荐)

申请免费SSL证书(Let's Encrypt):

# 安装certbot
sudo yum install certbot python3-certbot-nginx -y

# 申请证书(需要域名)
sudo certbot --nginx -d yourdomain.com

2. 配置防火墙

# 检查防火墙状态
sudo firewall-cmd --state

# 只开放必要端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

3. 定期备份

# 备份.env文件(包含API密钥)
cp /var/www/screening-app/.env ~/backup/.env.backup-$(date +%Y%m%d)

# 备份整个项目
tar -czf ~/backup/screening-backup-$(date +%Y%m%d).tar.gz /var/www/screening-app

4. 限制SSH访问

  • 禁用root密码登录,使用SSH密钥
  • 修改默认SSH端口22
  • 使用fail2ban防止暴力破解

5. API密钥管理

  • ✅ 不要将 .env 文件提交到Git
  • ✅ 定期轮换API密钥
  • ✅ 使用强密码保护服务器
  • ✅ 限制API密钥的访问权限

架构图

用户浏览器
    ↓ (HTTP/80)
Tengine Web服务器
    ↓ 
    ├─→ /              → /var/www/tool/index.html (前端)
    └─→ /api/, /health → http://127.0.0.1:8000 (反向代理)
                            ↓
                        Docker容器
                            ↓
                        FastAPI应用
                            ↓
                        MedLive API (外部)

总结

你已经成功将AI辅助Meta分析screening应用部署到云服务器上!

部署内容

  • ✅ Python FastAPI后端(Docker容器化)
  • ✅ 静态HTML前端(Tengine托管)
  • ✅ 反向代理配置(API请求转发)
  • ✅ 环境变量隔离(API密钥安全)

访问地址

  • 前端:http://你的服务器IP
  • API健康检查:http://你的服务器IP/health

下一步优化

  1. 配置域名
  2. 启用HTTPS
  3. 配置CDN加速
  4. 设置日志轮转
  5. 添加监控告警

附录

A. 完整配置文件示例

Dockerfile
FROM python:3.10-slim

WORKDIR /app

RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \
    pip config set install.trusted-host mirrors.aliyun.com

RUN pip install --upgrade pip --default-timeout=100

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt --default-timeout=100

COPY . .

EXPOSE 8000

CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
docker-compose.yml
services:
  screening-api:
    build: .
    ports:
      - "8000:8000"
    env_file:
      - .env
    restart: unless-stopped
    volumes:
      - ./demo_input.xlsx:/app/demo_input.xlsx
      - ./demo_output.xlsx:/app/demo_output.xlsx
requirements.txt
fastapi
uvicorn[standard]
python-dotenv
pandas
openpyxl
requests
aiofiles
python-multipart
Tengine配置 (/etc/tengine/conf.d/tool.conf)
server {
    listen 80;
    server_name YOUR_SERVER_IP _;
    
    location / {
        root /var/www/tool;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
    
    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        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_read_timeout 300s;
        client_max_body_size 100M;
    }
    
    location /health {
        proxy_pass http://127.0.0.1:8000;
    }
}

B. 快速命令速查表

# 服务管理
docker compose up -d              # 启动服务
docker compose down               # 停止服务
docker compose restart            # 重启服务
docker compose logs -f            # 查看日志
sudo systemctl restart tengine    # 重启Tengine

# 状态检查
docker compose ps                 # 容器状态
sudo systemctl status tengine     # Tengine状态
curl http://localhost/health      # API健康检查
netstat -tulnp | grep :80         # 端口监听

# 文件权限
sudo chown -R tengine:tengine /var/www/tool/
sudo chmod -R 755 /var/www/tool/

教程版本:v1.0
最后更新:2025-10-15
适用系统:Alibaba Cloud Linux 3 / CentOS 8+ / RHEL 8+

如有问题,请参考常见问题章节或查看相关日志排查。


---

已经完成!所有隐私信息都已替换为占位符:

✅ **已替换的内容**:
- IP地址:`47.94.193.70` → `你的服务器IP` / `YOUR_SERVER_IP`
- API密钥:已全部替换为 `你的真实API密钥` 等占位符
- 项目路径:替换为通用示例
- 其他敏感配置:全部使用占位符

现在这个教程可以安全地分享和使用了!需要我创建文件让你下载吗?
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐