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>
16 KiB
16 KiB
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核 4GB,MySQL 8.0 | ✅ 已购买 | rm-2ze9587199003517c |
| 公网IP | 39.105.153.58 | ✅ 已分配 | 需配置安全组 |
| 域名 | 待配置 | ⏳ 可选 | 建议使用域名+SSL |
🚀 部署步骤
阶段1:ECS 服务器初始化
1.1 SSH 连接到 ECS
# 方式1:使用阿里云控制台"远程连接"
# 方式2:本地 SSH 连接
ssh root@39.105.153.58
1.2 更新系统
# 更新系统包
sudo yum update -y
# 安装常用工具
sudo yum install -y git curl wget vim
1.3 安装 Docker
# 安装 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
# 下载 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 创建工作目录
# 创建 REDCap 部署目录
sudo mkdir -p /opt/redcap
sudo chown -R $USER:$USER /opt/redcap
cd /opt/redcap
# 创建子目录
mkdir -p config/{apache,php}
mkdir -p logs
阶段2:RDS MySQL 配置
2.1 配置 RDS 白名单
在阿里云 RDS 控制台操作:
- 进入 RDS 实例详情页
- 左侧菜单 → "白名单与安全组"
- 点击"修改",添加 ECS 私网 IP:
172.17.173.82 - 保存
2.2 获取 RDS 内网连接地址
在 RDS 控制台 → "数据库连接" 页面获取:
内网地址: rm-2ze9587199003517c.mysql.rds.aliyuncs.com
端口: 3306
2.3 创建 REDCap 数据库和用户
方式1:使用阿里云 DMS 控制台
- RDS 控制台 → 点击"登录数据库"
- 执行以下 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 客户端
# 安装 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 从本地上传
# 在本地 Windows PowerShell 执行
scp -r D:\MyCursor\Redcap\redcap15.8.0 root@39.105.153.58:/opt/redcap/
方式2:使用阿里云 OSS 中转
- 上传 redcap15.8.0.zip 到 OSS
- 在 ECS 下载:
cd /opt/redcap
wget https://your-bucket.oss-cn-beijing.aliyuncs.com/redcap15.8.0.zip
unzip redcap15.8.0.zip
3.2 上传 Docker 配置文件
# 在本地 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 上创建:
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
# 生成随机密码(32字符)
openssl rand -base64 32
# 生成 Salt(建议64字符)
openssl rand -base64 48
3.4 创建生产环境 docker-compose.prod.yml
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 确保脚本有执行权限
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 验证文件结构
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 测试数据库连接
# 测试 RDS 连接
mysql -h rm-2ze9587199003517c.mysql.rds.aliyuncs.com \
-u redcap_user -p \
-e "SELECT 1;"
5.3 构建并启动容器
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:使用安装向导(推荐)
- 访问 http://39.105.153.58/install.php
- 按照向导完成安装
- 创建管理员账户
方式2:导入 SQL 文件
# 如果有现成的 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 证书
- 申请免费 SSL 证书(阿里云控制台)
- 下载证书文件
- 配置 Nginx 反向代理或修改 Apache 配置
方式2:使用 Let's Encrypt
# 安装 Certbot
sudo yum install -y certbot
# 获取证书(需要域名指向此服务器)
sudo certbot certonly --standalone -d redcap.yourdomain.com
7.3 定期备份
# 创建备份脚本
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 已配置
🛠️ 常用运维命令
# 进入部署目录
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
📚 相关文档
📝 更新记录
| 日期 | 版本 | 更新内容 |
|---|---|---|
| 2026-02-02 | v1.0 | 初始版本,基于 ECS + RDS 架构 |
文档维护: AI Clinical Research 开发团队
有问题? 查看 部署问题排查手册