Files
AIclinicalresearch/docs/03-业务模块/Redcap/01-部署与配置/14-REDCap_ECS生产环境部署方案.md
HaHafeng 4b9b90ffb8 feat(iit): Complete REDCap production deployment on Alibaba Cloud ECS
Summary:

- Deploy REDCap 15.8.0 on ECS with Docker CE 26.1.3

- Configure RDS MySQL 8.0 database (redcap_prod)

- Setup Nginx reverse proxy with HTTPS/SSL

- Domain configured: https://redcap.xunzhengyixue.com/

Documentation:

- Add ECS deployment guide

- Add deployment info record

- Update system status document (v4.5 -> v4.6)

Status: REDCap production environment fully operational
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:27:05 +08:00

622 lines
16 KiB
Markdown
Raw Permalink 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.
# REDCap 阿里云 ECS 生产环境部署方案
**版本:** v1.0
**创建日期:** 2026-02-02
**适用环境:** 阿里云 ECS + RDS MySQL 8.0
**REDCap版本** 15.8.0
**状态:** 📋 待执行
---
## 📋 部署概览
### 目标架构
```
┌─────────────────────────────────────────────────────────────┐
│ 阿里云生产环境架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 公网访问层 │ │
│ │ 公网IP: 39.105.153.58:80/443 │ │
│ └──────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ECS 服务器 (launch-advisor-20260108) │ │
│ │ ├── Docker Engine │ │
│ │ └── REDCap 容器 │ │
│ │ ├── Apache 2.4 + PHP 8.1 │ │
│ │ └── REDCap 15.8.0 │ │
│ │ 私网IP: 172.17.173.82 │ │
│ └──────────────────────────────────────────────────────┘ │
│ ↓ VPC内网 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ RDS MySQL 8.0 (rm-2ze9587199003517c) │ │
│ │ ├── 2核 4GB │ │
│ │ ├── 数据库: redcap_prod │ │
│ │ └── 用户: redcap_user │ │
│ │ 内网地址: rm-2ze9587199003517c.mysql.rds.aliyuncs.com │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 资源清单
| 资源 | 规格 | 状态 | 备注 |
|------|------|------|------|
| ECS 服务器 | 2核 4GB | ✅ 已购买 | launch-advisor-20260108 |
| RDS MySQL | 2核 4GBMySQL 8.0 | ✅ 已购买 | rm-2ze9587199003517c |
| 公网IP | 39.105.153.58 | ✅ 已分配 | 需配置安全组 |
| 域名 | 待配置 | ⏳ 可选 | 建议使用域名+SSL |
---
## 🚀 部署步骤
### 阶段1ECS 服务器初始化
#### 1.1 SSH 连接到 ECS
```bash
# 方式1使用阿里云控制台"远程连接"
# 方式2本地 SSH 连接
ssh root@39.105.153.58
```
#### 1.2 更新系统
```bash
# 更新系统包
sudo yum update -y
# 安装常用工具
sudo yum install -y git curl wget vim
```
#### 1.3 安装 Docker
```bash
# 安装 Docker
sudo yum install -y docker
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
# 预期输出: Docker version 20.x.x 或更高
# 添加当前用户到 docker 组(可选,避免每次 sudo
sudo usermod -aG docker $USER
```
#### 1.4 安装 Docker Compose
```bash
# 下载 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
# 预期输出: Docker Compose version v2.24.0
```
#### 1.5 创建工作目录
```bash
# 创建 REDCap 部署目录
sudo mkdir -p /opt/redcap
sudo chown -R $USER:$USER /opt/redcap
cd /opt/redcap
# 创建子目录
mkdir -p config/{apache,php}
mkdir -p logs
```
---
### 阶段2RDS MySQL 配置
#### 2.1 配置 RDS 白名单
**在阿里云 RDS 控制台操作:**
1. 进入 RDS 实例详情页
2. 左侧菜单 → "白名单与安全组"
3. 点击"修改",添加 ECS 私网 IP
```
172.17.173.82
```
4. 保存
#### 2.2 获取 RDS 内网连接地址
**在 RDS 控制台 → "数据库连接" 页面获取:**
```
内网地址: rm-2ze9587199003517c.mysql.rds.aliyuncs.com
端口: 3306
```
#### 2.3 创建 REDCap 数据库和用户
**方式1使用阿里云 DMS 控制台**
1. RDS 控制台 → 点击"登录数据库"
2. 执行以下 SQL
```sql
-- 创建数据库
CREATE DATABASE redcap_prod
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 创建用户(使用强密码!)
CREATE USER 'redcap_user'@'172.17.173.%'
IDENTIFIED BY 'YOUR_STRONG_PASSWORD_32_CHARS_MIN';
-- 授予权限
GRANT ALL PRIVILEGES ON redcap_prod.* TO 'redcap_user'@'172.17.173.%';
FLUSH PRIVILEGES;
-- 验证
SHOW DATABASES;
SELECT User, Host FROM mysql.user WHERE User = 'redcap_user';
```
**方式2从 ECS 使用 mysql 客户端**
```bash
# 安装 MySQL 客户端
sudo yum install -y mysql
# 连接 RDS使用 root 账户)
mysql -h rm-2ze9587199003517c.mysql.rds.aliyuncs.com -u root -p
# 执行上述 SQL
```
#### 2.4 记录数据库连接信息
```
主机: rm-2ze9587199003517c.mysql.rds.aliyuncs.com
端口: 3306
数据库: redcap_prod
用户名: redcap_user
密码: YOUR_STRONG_PASSWORD_32_CHARS_MIN
```
---
### 阶段3准备 REDCap 文件
#### 3.1 上传 REDCap 源码
**方式1使用 SCP 从本地上传**
```powershell
# 在本地 Windows PowerShell 执行
scp -r D:\MyCursor\Redcap\redcap15.8.0 root@39.105.153.58:/opt/redcap/
```
**方式2使用阿里云 OSS 中转**
1. 上传 redcap15.8.0.zip 到 OSS
2. 在 ECS 下载:
```bash
cd /opt/redcap
wget https://your-bucket.oss-cn-beijing.aliyuncs.com/redcap15.8.0.zip
unzip redcap15.8.0.zip
```
#### 3.2 上传 Docker 配置文件
```powershell
# 在本地 Windows PowerShell 执行
scp D:\MyCursor\Redcap\redcap-docker-dev\Dockerfile.redcap root@39.105.153.58:/opt/redcap/
scp D:\MyCursor\Redcap\redcap-docker-dev\docker-entrypoint.sh root@39.105.153.58:/opt/redcap/
scp D:\MyCursor\Redcap\redcap-docker-dev\config\php\php.ini root@39.105.153.58:/opt/redcap/config/php/
scp D:\MyCursor\Redcap\redcap-docker-dev\config\apache\redcap.conf root@39.105.153.58:/opt/redcap/config/apache/
```
#### 3.3 创建生产环境 database.php
在 ECS 上创建:
```bash
cat > /opt/redcap/config/database.php << 'EOF'
<?php
/**
* REDCap 生产环境数据库配置
* 环境: 阿里云 ECS + RDS MySQL 8.0
* 创建日期: 2026-02-02
*/
// RDS MySQL 连接信息
$hostname = 'rm-2ze9587199003517c.mysql.rds.aliyuncs.com';
$db = 'redcap_prod';
$username = 'redcap_user';
$password = 'YOUR_STRONG_PASSWORD_32_CHARS_MIN'; // ⚠️ 修改为实际密码
// Salt值 - ⚠️ 重要:设置后永不可变!
$salt = 'YOUR_RANDOM_SALT_32_CHARS_NEVER_CHANGE'; // ⚠️ 修改为随机字符串
// 高级配置(可选)
$db_ssl_verify_server_cert = false; // RDS 内网连接可不验证
// 以下配置保持默认
$homepage_contact = 'admin@example.com';
$homepage_contact_url = '';
EOF
```
**⚠️ 重要生成强密码和Salt**
```bash
# 生成随机密码32字符
openssl rand -base64 32
# 生成 Salt建议64字符
openssl rand -base64 48
```
#### 3.4 创建生产环境 docker-compose.prod.yml
```bash
cat > /opt/redcap/docker-compose.prod.yml << 'EOF'
# REDCap Docker Compose 配置 - 生产环境
# 版本v1.0
# 日期2026-02-02
# 用途:阿里云 ECS + RDS MySQL 生产环境
version: '3.8'
services:
# ========== REDCap Web服务 (Apache + PHP 8.1) ==========
redcap-web:
build:
context: .
dockerfile: Dockerfile.redcap
container_name: redcap-prod
restart: always
ports:
- "80:80"
# - "443:443" # HTTPS配置SSL后启用
volumes:
# REDCap源代码只读
- ./redcap15.8.0/redcap:/var/www/html/redcap:ro
# 配置文件
- ./config/apache/redcap.conf:/etc/apache2/sites-available/000-default.conf:ro
- ./config/php/php.ini:/usr/local/etc/php/php.ini:ro
- ./config/database.php:/var/www/html/redcap/database.php:ro
# 持久化数据(可读写)
- redcap-edocs:/var/www/html/redcap/edocs
- redcap-modules:/var/www/html/redcap/modules
- redcap-temp:/var/www/html/redcap/temp
# 日志
- ./logs:/var/log/apache2
environment:
TZ: Asia/Shanghai
# RDS 连接信息(用于健康检查)
REDCAP_DB_HOST: rm-2ze9587199003517c.mysql.rds.aliyuncs.com
REDCAP_DB_PORT: 3306
REDCAP_DB_NAME: redcap_prod
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
# ========== 数据卷配置 ==========
volumes:
# REDCap上传文件重要需定期备份
redcap-edocs:
name: redcap-edocs-prod
driver: local
# External Modules
redcap-modules:
name: redcap-modules-prod
driver: local
# 临时文件
redcap-temp:
name: redcap-temp-prod
driver: local
EOF
```
#### 3.5 确保脚本有执行权限
```bash
chmod +x /opt/redcap/docker-entrypoint.sh
```
---
### 阶段4配置安全组
#### 4.1 ECS 安全组规则
**在阿里云 ECS 控制台 → 安全组 配置:**
| 规则方向 | 协议 | 端口 | 授权对象 | 说明 |
|---------|------|------|---------|------|
| 入方向 | TCP | 80 | 0.0.0.0/0 | HTTP访问 |
| 入方向 | TCP | 443 | 0.0.0.0/0 | HTTPS访问可选 |
| 入方向 | TCP | 22 | 您的IP/32 | SSH管理限制IP |
| 出方向 | TCP | 3306 | 172.17.0.0/16 | 访问RDS |
| 出方向 | TCP | 443 | 0.0.0.0/0 | HTTPS出站 |
**⚠️ 安全建议:**
- SSH 端口22建议限制为您的办公网络 IP
- 不要开放 3306 端口到公网
---
### 阶段5部署 REDCap
#### 5.1 验证文件结构
```bash
cd /opt/redcap
ls -la
# 预期结构:
# /opt/redcap/
# ├── Dockerfile.redcap
# ├── docker-compose.prod.yml
# ├── docker-entrypoint.sh
# ├── config/
# │ ├── apache/redcap.conf
# │ ├── php/php.ini
# │ └── database.php
# ├── redcap15.8.0/
# │ └── redcap/
# └── logs/
```
#### 5.2 测试数据库连接
```bash
# 测试 RDS 连接
mysql -h rm-2ze9587199003517c.mysql.rds.aliyuncs.com \
-u redcap_user -p \
-e "SELECT 1;"
```
#### 5.3 构建并启动容器
```bash
cd /opt/redcap
# 构建镜像
docker-compose -f docker-compose.prod.yml build
# 启动容器
docker-compose -f docker-compose.prod.yml up -d
# 查看状态
docker-compose -f docker-compose.prod.yml ps
# 查看日志
docker-compose -f docker-compose.prod.yml logs -f
```
#### 5.4 初始化 REDCap 数据库
**方式1使用安装向导推荐**
1. 访问 http://39.105.153.58/install.php
2. 按照向导完成安装
3. 创建管理员账户
**方式2导入 SQL 文件**
```bash
# 如果有现成的 redcap_install.sql
mysql -h rm-2ze9587199003517c.mysql.rds.aliyuncs.com \
-u redcap_user -p redcap_prod < redcap_install.sql
```
---
### 阶段6验证部署
#### 6.1 访问测试
| 测试项 | URL | 预期结果 |
|--------|-----|---------|
| 首页 | http://39.105.153.58/ | 显示REDCap登录页 |
| 安装向导 | http://39.105.153.58/install.php | 显示安装页面 |
| 控制中心 | http://39.105.153.58/ControlCenter/ | 需登录后访问 |
#### 6.2 功能验证清单
- [ ] 页面样式正常无404错误
- [ ] 可以成功登录
- [ ] 可以创建项目
- [ ] 可以创建表单
- [ ] 数据可以正常保存
- [ ] API 可以正常调用
---
## 🔒 安全加固(重要!)
### 7.1 修改 REDCap Base URL
登录后在 Control Center 修改:
```
Configuration > General Configuration > REDCap base URL
设置为: http://39.105.153.58
(或您的域名: https://redcap.yourdomain.com
```
### 7.2 配置 HTTPS强烈建议
**方式1使用阿里云 SSL 证书**
1. 申请免费 SSL 证书(阿里云控制台)
2. 下载证书文件
3. 配置 Nginx 反向代理或修改 Apache 配置
**方式2使用 Let's Encrypt**
```bash
# 安装 Certbot
sudo yum install -y certbot
# 获取证书(需要域名指向此服务器)
sudo certbot certonly --standalone -d redcap.yourdomain.com
```
### 7.3 定期备份
```bash
# 创建备份脚本
cat > /opt/redcap/backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/redcap/backups
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -h rm-2ze9587199003517c.mysql.rds.aliyuncs.com \
-u redcap_user -p'YOUR_PASSWORD' \
redcap_prod > $BACKUP_DIR/redcap_db_$DATE.sql
# 备份 edocs
docker cp redcap-prod:/var/www/html/redcap/edocs $BACKUP_DIR/edocs_$DATE
# 保留最近7天
find $BACKUP_DIR -mtime +7 -delete
echo "Backup completed: $DATE"
EOF
chmod +x /opt/redcap/backup.sh
# 添加定时任务每天凌晨2点
echo "0 2 * * * /opt/redcap/backup.sh" | crontab -
```
---
## 📋 部署检查清单
### 部署前
- [ ] ECS 服务器已启动
- [ ] RDS MySQL 已启动
- [ ] RDS 白名单已添加 ECS 私网 IP
- [ ] 安全组已配置 80/443 端口
- [ ] REDCap 源码已上传
- [ ] database.php 已配置正确的 RDS 连接信息
- [ ] Salt 值已设置并记录(永不可变!)
### 部署后
- [ ] 容器状态正常docker-compose ps
- [ ] 可以访问 http://39.105.153.58/
- [ ] 页面样式正常
- [ ] 可以成功登录
- [ ] 可以创建项目并保存数据
- [ ] 备份脚本已配置
- [ ] 可选HTTPS 已配置
---
## 🛠️ 常用运维命令
```bash
# 进入部署目录
cd /opt/redcap
# 查看容器状态
docker-compose -f docker-compose.prod.yml ps
# 查看日志
docker-compose -f docker-compose.prod.yml logs -f
# 重启服务
docker-compose -f docker-compose.prod.yml restart
# 停止服务
docker-compose -f docker-compose.prod.yml stop
# 启动服务
docker-compose -f docker-compose.prod.yml start
# 重建容器(代码更新后)
docker-compose -f docker-compose.prod.yml up -d --build
# 进入容器
docker exec -it redcap-prod bash
# 查看磁盘使用
docker system df
```
---
## ⚠️ 重要注意事项
### Salt 值
```
⚠️ Salt 值一旦设置,永远不可更改!
用于数据去标识化哈希,更改将导致所有去标识化数据失效。
请务必记录并安全保存。
```
### 密码安全
- 数据库密码建议 32+ 字符
- 定期更换管理员密码
- 不要在代码中硬编码密码
### 数据备份
- 每日自动备份数据库
- edocs 目录包含上传文件,需备份
- 备份文件建议同步到 OSS
---
## 📚 相关文档
- [Docker部署操作手册](./10-REDCap_Docker部署操作手册.md)
- [部署问题排查手册](./13-部署问题排查手册.md)
- [REDCap API使用指南](../03-API对接与开发/30-REDCap_API使用指南.md)
---
## 📝 更新记录
| 日期 | 版本 | 更新内容 |
|------|------|---------|
| 2026-02-02 | v1.0 | 初始版本,基于 ECS + RDS 架构 |
---
**文档维护:** AI Clinical Research 开发团队
**有问题?** 查看 [部署问题排查手册](./13-部署问题排查手册.md)