# 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 ```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 ``` --- ### 阶段2:RDS 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' /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)