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

16 KiB
Raw Blame History

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

# 方式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

阶段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
-- 创建数据库
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 中转

  1. 上传 redcap15.8.0.zip 到 OSS
  2. 在 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使用安装向导推荐

  1. 访问 http://39.105.153.58/install.php
  2. 按照向导完成安装
  3. 创建管理员账户

方式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 证书

  1. 申请免费 SSL 证书(阿里云控制台)
  2. 下载证书文件
  3. 配置 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 开发团队
有问题? 查看 部署问题排查手册