核心成果: 创建REDCap模块文档体系(4个分类目录) 完成《REDCap Docker部署操作手册》- 最核心文档 梳理从0到1的完整部署流程 明确Docker文件的可复用性 文档体系: - 00-模块概览/ 系统介绍、方案设计、决策报告 - 01-部署与配置/ 部署手册、问题排查(核心) - 02-系统配置与运维/ 日常管理(规划中) - 03-API对接与开发/ API开发、二次开发 - 04-参考资料/ 旧版文档存档 核心文档: 10-REDCap_Docker部署操作手册.md(最重要) - 完整的从0到1部署流程 - Docker文件复用说明和可复用性分析 - 3种环境差异配置(本地/ECS/医院) - 5大常见问题与解决方案 - 部署检查清单 - 日常维护命令 13-部署问题排查手册.md - 基于实际踩坑经验 - ERR_CONTENT_DECODING_FAILED - CRLF污染问题 - Base URL配置错误 - MySQL连接问题 Docker文件可复用性: 100%可复用(无需修改): - Dockerfile.redcap - docker-entrypoint.sh - config/php/php.ini - .gitattributes 需根据环境调整: - docker-compose.yml(端口、卷路径) - config/apache/redcap.conf(域名) - config/database.php(数据库连接) 文档重组: - 移动文档到对应分类目录 - 重命名为标准格式(数字前缀) - 旧版文档归档到参考资料 - 创建README快速入口 下一步: - Day 2: 开发REDCap API Adapter - 创建API使用指南 - 创建对接设计文档
1155 lines
26 KiB
Markdown
1155 lines
26 KiB
Markdown
# REDCap部署指南与环境要求详解
|
||
|
||
> **文档版本:** v1.0
|
||
> **创建日期:** 2025-12-30
|
||
> **文档目的:** 详细说明REDCap的部署要求、复杂度、软硬件条件
|
||
> **阅读时间:** 25分钟
|
||
> **重要性:** ⭐⭐⭐⭐⭐ **对接前必读**
|
||
|
||
---
|
||
|
||
## 📋 执行摘要
|
||
|
||
**核心结论**:
|
||
- ✅ **是的,对接REDCap前必须先部署REDCap服务器**
|
||
- 🟡 **部署复杂度:中等**(3.5/5分)
|
||
- ⏱️ **部署时间**:
|
||
- 测试环境(Docker):1-2小时
|
||
- 生产环境(手动):1-2天
|
||
- 生产环境(含安全加固):3-5天
|
||
- 💰 **成本**:
|
||
- 测试环境:$0(本地开发)
|
||
- 生产环境:$500-3000/月(云服务器)
|
||
|
||
**关键前置条件**:
|
||
1. 🔑 **获得REDCap许可**(加入联盟,签署EULA)
|
||
2. 💾 **下载REDCap源代码**(redcap15.8.0.zip)
|
||
3. 🖥️ **准备服务器环境**(LAMP/LEMP栈)
|
||
4. 📧 **配置SMTP邮件服务**(必需)
|
||
|
||
---
|
||
|
||
## 🎯 部署前必读:您需要什么?
|
||
|
||
### 1. REDCap许可与源代码获取(🔑 最关键)
|
||
|
||
#### 获取流程
|
||
|
||
```
|
||
Step 1: 申请加入REDCap联盟
|
||
↓
|
||
访问:https://projectredcap.org/join/
|
||
↓
|
||
填写机构信息(医院/大学/研究机构)
|
||
↓
|
||
等待审批(1-4周)
|
||
|
||
Step 2: 签署最终用户许可协议(EULA)
|
||
↓
|
||
法律审查(禁止商业用途)
|
||
↓
|
||
机构授权人签字
|
||
|
||
Step 3: 下载REDCap软件包
|
||
↓
|
||
登录联盟成员门户
|
||
↓
|
||
下载:redcap_vX.X.X.zip(约50-80MB)
|
||
```
|
||
|
||
#### 许可限制(⚠️ 重要)
|
||
|
||
```
|
||
✅ 允许:
|
||
- 非商业研究用途
|
||
- 机构内部使用
|
||
- 开发External Modules(开源共享)
|
||
|
||
❌ 禁止:
|
||
- 商业化销售
|
||
- 未经授权的再分发
|
||
- 修改核心代码后闭源
|
||
|
||
⚠️ 灰色地带:
|
||
- 提供REDCap托管服务(需咨询范德堡大学)
|
||
- 基于REDCap开发商业产品(你们的情况)
|
||
→ 建议:咨询法律顾问,可能需要额外协议
|
||
```
|
||
|
||
#### 您的情况分析
|
||
|
||
```
|
||
壹证循科技的商业模式:
|
||
- REDCap是"客户已有"的系统
|
||
- 你们提供的是"AI增值服务"(DC/SSA模块)
|
||
- 通过External Module连接
|
||
|
||
合规性评估:
|
||
✅ 可能合规(提供插件,不销售REDCap本身)
|
||
⚠️ 需确认:是否帮客户部署REDCap?
|
||
- 如果只是对接客户现有REDCap → ✅ 合规
|
||
- 如果你们部署REDCap并收费 → ⚠️ 灰色地带
|
||
|
||
建议:
|
||
1. 与范德堡大学确认商业用途许可
|
||
2. 或者:只对接客户现有的REDCap(不提供部署)
|
||
```
|
||
|
||
---
|
||
|
||
## 🖥️ 软硬件要求详解
|
||
|
||
### 服务器配置要求
|
||
|
||
#### 开发/测试环境
|
||
|
||
```yaml
|
||
用途: 本地开发、功能测试、External Module开发
|
||
|
||
最低配置:
|
||
CPU: 2核
|
||
内存: 4GB
|
||
硬盘: 20GB SSD
|
||
系统: Windows 10/11 或 macOS 或 Linux
|
||
|
||
推荐配置:
|
||
CPU: 4核
|
||
内存: 8GB
|
||
硬盘: 50GB SSD
|
||
系统: Ubuntu 22.04 LTS
|
||
|
||
成本: $0(使用个人电脑或Mac)
|
||
```
|
||
|
||
#### 生产环境(小型)
|
||
|
||
```yaml
|
||
用途: 1-5个项目,<1000条记录
|
||
|
||
最低配置:
|
||
CPU: 2核 @ 2.5GHz+
|
||
内存: 8GB
|
||
硬盘: 100GB SSD
|
||
带宽: 10Mbps
|
||
系统: Ubuntu 22.04 LTS / CentOS 8
|
||
|
||
数据库:
|
||
MySQL: 5.7+ 或 MariaDB 10.3+
|
||
存储: 20GB(独立磁盘)
|
||
|
||
Web服务器:
|
||
Apache 2.4+ 或 Nginx 1.18+
|
||
PHP: 7.4 / 8.0 / 8.1 / 8.2
|
||
|
||
云服务器参考:
|
||
阿里云: ecs.c6.large(2核8GB) ≈ ¥500/月
|
||
AWS: t3.large(2核8GB) ≈ $70/月
|
||
腾讯云: SA2.MEDIUM4(2核8GB) ≈ ¥450/月
|
||
|
||
年度成本: $6K-8K
|
||
```
|
||
|
||
#### 生产环境(中型)
|
||
|
||
```yaml
|
||
用途: 10-50个项目,10K-100K条记录
|
||
|
||
推荐配置:
|
||
CPU: 4核 @ 3.0GHz+
|
||
内存: 16GB
|
||
硬盘: 500GB SSD(或SAN存储)
|
||
带宽: 50Mbps
|
||
系统: Ubuntu 22.04 LTS
|
||
|
||
数据库:
|
||
MySQL: 8.0+ 或 MariaDB 10.5+
|
||
存储: 200GB(独立服务器)
|
||
连接数: 最大500
|
||
|
||
Web服务器:
|
||
Apache 2.4+ 或 Nginx 1.20+
|
||
PHP: 8.1+(性能最优)
|
||
PHP-FPM进程数: 50-100
|
||
|
||
负载均衡:
|
||
可选:多Web节点 + LB
|
||
|
||
云服务器参考:
|
||
阿里云: ecs.c6.xlarge(4核16GB) ≈ ¥1200/月
|
||
AWS: t3.xlarge(4核16GB) ≈ $150/月
|
||
|
||
年度成本: $15K-20K
|
||
```
|
||
|
||
#### 生产环境(大型/企业级)
|
||
|
||
```yaml
|
||
用途: 100+项目,100万+记录,多机构部署
|
||
|
||
架构:
|
||
Web层: 2-4台Web服务器(负载均衡)
|
||
- 每台: 8核16GB
|
||
|
||
数据库层: 主从架构
|
||
- 主库: 16核32GB
|
||
- 从库: 16核32GB(读负载分担)
|
||
|
||
存储层:
|
||
- 文件服务器: NFS/对象存储
|
||
- 容量: 2TB-5TB
|
||
|
||
缓存层:
|
||
- Redis: 8核16GB
|
||
|
||
高可用:
|
||
- 数据库主从切换
|
||
- Web节点故障转移
|
||
- 每日备份+异地容灾
|
||
|
||
监控:
|
||
- Prometheus + Grafana
|
||
- 日志聚合(ELK)
|
||
- APM监控
|
||
|
||
云服务器参考:
|
||
总成本: ¥15K-30K/月
|
||
|
||
年度成本: $50K-100K
|
||
```
|
||
|
||
### 软件依赖清单
|
||
|
||
#### 必需组件
|
||
|
||
```bash
|
||
# 操作系统(任选其一)
|
||
Ubuntu 22.04 LTS # 推荐
|
||
CentOS 8 / Rocky Linux 8 # 企业级
|
||
Debian 11
|
||
|
||
# Web服务器(任选其一)
|
||
Apache 2.4+ # REDCap官方推荐
|
||
- mod_rewrite enabled
|
||
- mod_ssl enabled
|
||
- mod_headers enabled
|
||
|
||
Nginx 1.18+ # 性能更好,配置复杂
|
||
|
||
# PHP(推荐8.1)
|
||
PHP 7.4 / 8.0 / 8.1 / 8.2
|
||
- PHP-FPM
|
||
- php-cli
|
||
- php-mysql / php-mysqli
|
||
- php-gd
|
||
- php-curl
|
||
- php-zip
|
||
- php-mbstring
|
||
- php-xml
|
||
- php-json
|
||
- php-ldap(如需LDAP认证)
|
||
- php-soap(如需Web Service集成)
|
||
|
||
# 数据库(任选其一)
|
||
MySQL 5.7+ / 8.0+ # 主流选择
|
||
MariaDB 10.3+ / 10.5+ # 开源替代
|
||
|
||
# PHP配置要求
|
||
upload_max_filesize = 32M
|
||
post_max_size = 32M
|
||
max_execution_time = 300
|
||
memory_limit = 256M
|
||
```
|
||
|
||
#### 可选组件(增强功能)
|
||
|
||
```bash
|
||
# SMTP服务器(邮件通知)
|
||
必需:用于发送调查邀请、密码重置等
|
||
选项:
|
||
- SendGrid(推荐,云服务)
|
||
- Amazon SES
|
||
- 自建Postfix
|
||
- 企业SMTP(Office 365、Gmail)
|
||
|
||
# SSL证书(HTTPS)
|
||
必需:生产环境强制要求
|
||
选项:
|
||
- Let's Encrypt(免费)
|
||
- 商业证书(GeoTrust、DigiCert)
|
||
- 企业内部CA
|
||
|
||
# LDAP/Active Directory(单点登录)
|
||
可选:企业环境推荐
|
||
- OpenLDAP
|
||
- Microsoft AD
|
||
- Azure AD
|
||
|
||
# 防火墙/WAF
|
||
推荐:
|
||
- UFW / firewalld(主机防火墙)
|
||
- ModSecurity(Web应用防火墙)
|
||
- Cloudflare(CDN + DDoS防护)
|
||
|
||
# 监控工具
|
||
推荐:
|
||
- New Relic APM
|
||
- Datadog
|
||
- Prometheus + Grafana
|
||
```
|
||
|
||
---
|
||
|
||
## 🐳 部署方案对比
|
||
|
||
### 方案1:Docker容器部署(⭐ 推荐用于开发/测试)
|
||
|
||
#### 优势
|
||
|
||
```
|
||
✅ 快速启动(1小时内完成)
|
||
✅ 环境隔离(不污染主机)
|
||
✅ 易于迁移(容器可移植)
|
||
✅ 版本管理(镜像标签)
|
||
✅ 易于销毁重建(测试理想)
|
||
```
|
||
|
||
#### 完整Docker Compose配置
|
||
|
||
```yaml
|
||
# docker-compose.yml
|
||
version: '3.8'
|
||
|
||
services:
|
||
# MySQL数据库
|
||
redcap-db:
|
||
image: mysql:8.0
|
||
container_name: redcap-mysql
|
||
restart: unless-stopped
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: redcap_root_123
|
||
MYSQL_DATABASE: redcap
|
||
MYSQL_USER: redcap_user
|
||
MYSQL_PASSWORD: redcap_pass_456
|
||
volumes:
|
||
- redcap-db-data:/var/lib/mysql
|
||
- ./mysql-init:/docker-entrypoint-initdb.d
|
||
ports:
|
||
- "3306:3306"
|
||
networks:
|
||
- redcap-network
|
||
command: --default-authentication-plugin=mysql_native_password
|
||
|
||
# PHPMyAdmin(数据库管理)
|
||
phpmyadmin:
|
||
image: phpmyadmin/phpmyadmin
|
||
container_name: redcap-phpmyadmin
|
||
restart: unless-stopped
|
||
environment:
|
||
PMA_HOST: redcap-db
|
||
PMA_USER: root
|
||
PMA_PASSWORD: redcap_root_123
|
||
ports:
|
||
- "8081:80"
|
||
networks:
|
||
- redcap-network
|
||
depends_on:
|
||
- redcap-db
|
||
|
||
# Apache + PHP + REDCap
|
||
redcap-web:
|
||
image: php:8.1-apache
|
||
container_name: redcap-apache
|
||
restart: unless-stopped
|
||
ports:
|
||
- "8080:80"
|
||
volumes:
|
||
# REDCap源代码(需手动解压到此目录)
|
||
- ./redcap15.8.0:/var/www/html
|
||
# Apache配置
|
||
- ./apache/redcap.conf:/etc/apache2/sites-available/000-default.conf
|
||
# PHP配置
|
||
- ./php/php.ini:/usr/local/etc/php/php.ini
|
||
# 上传文件存储
|
||
- redcap-edocs:/var/www/html/edocs
|
||
- redcap-temp:/var/www/html/temp
|
||
environment:
|
||
REDCAP_DB_HOST: redcap-db
|
||
REDCAP_DB_NAME: redcap
|
||
REDCAP_DB_USER: redcap_user
|
||
REDCAP_DB_PASS: redcap_pass_456
|
||
networks:
|
||
- redcap-network
|
||
depends_on:
|
||
- redcap-db
|
||
# 安装PHP扩展
|
||
command: >
|
||
bash -c "
|
||
docker-php-ext-install mysqli pdo pdo_mysql gd zip &&
|
||
a2enmod rewrite ssl headers &&
|
||
apache2-foreground
|
||
"
|
||
|
||
networks:
|
||
redcap-network:
|
||
driver: bridge
|
||
|
||
volumes:
|
||
redcap-db-data:
|
||
redcap-edocs:
|
||
redcap-temp:
|
||
```
|
||
|
||
#### 部署步骤(Docker方案)
|
||
|
||
```bash
|
||
# Step 1: 创建项目目录
|
||
mkdir redcap-docker && cd redcap-docker
|
||
|
||
# Step 2: 解压REDCap源码
|
||
unzip redcap_v15.8.0.zip
|
||
# 得到: redcap15.8.0/ 目录
|
||
|
||
# Step 3: 创建docker-compose.yml
|
||
# (粘贴上面的配置)
|
||
|
||
# Step 4: 创建Apache配置
|
||
mkdir apache
|
||
cat > apache/redcap.conf << 'EOF'
|
||
<VirtualHost *:80>
|
||
ServerName localhost
|
||
DocumentRoot /var/www/html/redcap
|
||
|
||
<Directory /var/www/html/redcap>
|
||
Options -Indexes +FollowSymLinks
|
||
AllowOverride All
|
||
Require all granted
|
||
</Directory>
|
||
|
||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||
</VirtualHost>
|
||
EOF
|
||
|
||
# Step 5: 创建PHP配置
|
||
mkdir php
|
||
cat > php/php.ini << 'EOF'
|
||
upload_max_filesize = 32M
|
||
post_max_size = 32M
|
||
max_execution_time = 300
|
||
memory_limit = 256M
|
||
date.timezone = Asia/Shanghai
|
||
EOF
|
||
|
||
# Step 6: 启动容器
|
||
docker-compose up -d
|
||
|
||
# Step 7: 检查容器状态
|
||
docker-compose ps
|
||
# 应该看到3个容器运行中
|
||
|
||
# Step 8: 访问REDCap安装向导
|
||
# 打开浏览器:http://localhost:8080/install.php
|
||
|
||
# Step 9: 按照向导完成安装
|
||
# - 数据库配置:
|
||
# Host: redcap-db
|
||
# Database: redcap
|
||
# Username: redcap_user
|
||
# Password: redcap_pass_456
|
||
|
||
# Step 10: 安装完成后,访问REDCap
|
||
# http://localhost:8080/
|
||
```
|
||
|
||
#### Docker方案的坑点
|
||
|
||
```
|
||
⚠️ 坑1: 文件权限问题
|
||
症状: 上传文件失败,无法写入edocs目录
|
||
解决:
|
||
docker exec -it redcap-apache bash
|
||
chown -R www-data:www-data /var/www/html/edocs
|
||
chown -R www-data:www-data /var/www/html/temp
|
||
|
||
⚠️ 坑2: 数据库连接失败
|
||
症状: REDCap无法连接MySQL
|
||
原因: 容器网络未就绪
|
||
解决:
|
||
# 等待MySQL完全启动(30秒)
|
||
docker-compose logs redcap-db
|
||
# 看到 "ready for connections" 后再访问install.php
|
||
|
||
⚠️ 坑3: PHP扩展缺失
|
||
症状: 提示缺少GD库、ZIP库
|
||
解决:
|
||
# 进入容器安装
|
||
docker exec -it redcap-apache bash
|
||
docker-php-ext-install gd zip mysqli
|
||
service apache2 reload
|
||
|
||
⚠️ 坑4: 性能问题
|
||
症状: 页面加载慢(Docker on Windows/Mac)
|
||
原因: 文件I/O性能差
|
||
解决:
|
||
# 使用命名卷而非绑定挂载
|
||
volumes:
|
||
- redcap-code:/var/www/html # 命名卷(快)
|
||
# 不要: - ./redcap:/var/www/html # 绑定挂载(慢)
|
||
```
|
||
|
||
---
|
||
|
||
### 方案2:手动部署(生产环境推荐)
|
||
|
||
#### Ubuntu 22.04 LTS部署脚本
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# REDCap生产环境自动化部署脚本
|
||
# 适用于:Ubuntu 22.04 LTS
|
||
|
||
set -e # 遇到错误立即退出
|
||
|
||
echo "========================================"
|
||
echo "REDCap 15.8.0 自动化部署脚本"
|
||
echo "========================================"
|
||
|
||
# ========== 1. 系统更新 ==========
|
||
echo "[Step 1] 更新系统..."
|
||
apt update && apt upgrade -y
|
||
|
||
# ========== 2. 安装Apache ==========
|
||
echo "[Step 2] 安装Apache 2.4..."
|
||
apt install -y apache2
|
||
a2enmod rewrite ssl headers
|
||
systemctl enable apache2
|
||
systemctl start apache2
|
||
|
||
# ========== 3. 安装PHP 8.1 ==========
|
||
echo "[Step 3] 安装PHP 8.1..."
|
||
apt install -y software-properties-common
|
||
add-apt-repository -y ppa:ondrej/php
|
||
apt update
|
||
|
||
apt install -y \
|
||
php8.1 \
|
||
php8.1-cli \
|
||
php8.1-fpm \
|
||
php8.1-mysql \
|
||
php8.1-gd \
|
||
php8.1-curl \
|
||
php8.1-zip \
|
||
php8.1-mbstring \
|
||
php8.1-xml \
|
||
php8.1-ldap \
|
||
php8.1-soap \
|
||
libapache2-mod-php8.1
|
||
|
||
# 配置PHP
|
||
cat > /etc/php/8.1/apache2/conf.d/99-redcap.ini << 'EOF'
|
||
upload_max_filesize = 32M
|
||
post_max_size = 32M
|
||
max_execution_time = 300
|
||
memory_limit = 256M
|
||
date.timezone = Asia/Shanghai
|
||
EOF
|
||
|
||
systemctl restart apache2
|
||
|
||
# ========== 4. 安装MySQL 8.0 ==========
|
||
echo "[Step 4] 安装MySQL 8.0..."
|
||
apt install -y mysql-server mysql-client
|
||
|
||
# 启动MySQL
|
||
systemctl enable mysql
|
||
systemctl start mysql
|
||
|
||
# 安全加固MySQL
|
||
mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongRootPassword123!';"
|
||
mysql -e "DELETE FROM mysql.user WHERE User='';"
|
||
mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
|
||
mysql -e "DROP DATABASE IF EXISTS test;"
|
||
mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"
|
||
mysql -e "FLUSH PRIVILEGES;"
|
||
|
||
# 创建REDCap数据库和用户
|
||
REDCAP_DB_PASS=$(openssl rand -base64 32)
|
||
mysql -uroot -p'YourStrongRootPassword123!' << EOF
|
||
CREATE DATABASE redcap CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
CREATE USER 'redcap_user'@'localhost' IDENTIFIED BY '${REDCAP_DB_PASS}';
|
||
GRANT ALL PRIVILEGES ON redcap.* TO 'redcap_user'@'localhost';
|
||
FLUSH PRIVILEGES;
|
||
EOF
|
||
|
||
echo "数据库密码(请保存):${REDCAP_DB_PASS}"
|
||
|
||
# ========== 5. 部署REDCap代码 ==========
|
||
echo "[Step 5] 部署REDCap代码..."
|
||
|
||
# 上传redcap15.8.0.zip到 /tmp/
|
||
# 手动或通过SCP上传
|
||
# scp redcap_v15.8.0.zip user@server:/tmp/
|
||
|
||
cd /var/www/html
|
||
unzip /tmp/redcap_v15.8.0.zip
|
||
mv redcap redcap_v15.8.0
|
||
|
||
# 创建符号链接(方便版本切换)
|
||
ln -s redcap_v15.8.0 redcap
|
||
|
||
# 设置权限
|
||
chown -R www-data:www-data /var/www/html/redcap
|
||
chmod -R 755 /var/www/html/redcap
|
||
chmod -R 777 /var/www/html/redcap/edocs
|
||
chmod -R 777 /var/www/html/redcap/temp
|
||
|
||
# ========== 6. 配置Apache虚拟主机 ==========
|
||
echo "[Step 6] 配置Apache..."
|
||
|
||
cat > /etc/apache2/sites-available/redcap.conf << 'EOF'
|
||
<VirtualHost *:80>
|
||
ServerName redcap.yourdomain.com
|
||
ServerAdmin admin@yourdomain.com
|
||
|
||
DocumentRoot /var/www/html/redcap
|
||
|
||
<Directory /var/www/html/redcap>
|
||
Options -Indexes +FollowSymLinks
|
||
AllowOverride All
|
||
Require all granted
|
||
</Directory>
|
||
|
||
# 安全头
|
||
Header always set X-Content-Type-Options "nosniff"
|
||
Header always set X-Frame-Options "SAMEORIGIN"
|
||
Header always set X-XSS-Protection "1; mode=block"
|
||
|
||
ErrorLog ${APACHE_LOG_DIR}/redcap_error.log
|
||
CustomLog ${APACHE_LOG_DIR}/redcap_access.log combined
|
||
</VirtualHost>
|
||
EOF
|
||
|
||
# 启用站点
|
||
a2ensite redcap.conf
|
||
a2dissite 000-default.conf
|
||
systemctl reload apache2
|
||
|
||
# ========== 7. 配置防火墙 ==========
|
||
echo "[Step 7] 配置防火墙..."
|
||
ufw allow 22/tcp # SSH
|
||
ufw allow 80/tcp # HTTP
|
||
ufw allow 443/tcp # HTTPS
|
||
ufw --force enable
|
||
|
||
# ========== 8. 安装Let's Encrypt SSL证书 ==========
|
||
echo "[Step 8] 安装SSL证书..."
|
||
apt install -y certbot python3-certbot-apache
|
||
|
||
# 自动获取证书(需要域名已解析到此服务器)
|
||
# certbot --apache -d redcap.yourdomain.com --non-interactive --agree-tos --email admin@yourdomain.com
|
||
|
||
# ========== 9. 配置Cron任务 ==========
|
||
echo "[Step 9] 配置Cron任务..."
|
||
cat > /etc/cron.d/redcap << 'EOF'
|
||
# REDCap Cron任务
|
||
*/1 * * * * www-data php /var/www/html/redcap/cron.php > /dev/null 2>&1
|
||
EOF
|
||
|
||
# ========== 10. 完成 ==========
|
||
echo "========================================"
|
||
echo "✅ REDCap部署完成!"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "📝 下一步:"
|
||
echo "1. 访问:http://your-server-ip/install.php"
|
||
echo "2. 按照向导完成安装"
|
||
echo "3. 数据库配置:"
|
||
echo " Host: localhost"
|
||
echo " Database: redcap"
|
||
echo " Username: redcap_user"
|
||
echo " Password: ${REDCAP_DB_PASS}"
|
||
echo ""
|
||
echo "⚠️ 请务必保存数据库密码!"
|
||
```
|
||
|
||
#### 手动部署的坑点
|
||
|
||
```
|
||
⚠️ 坑1: SELinux阻止(CentOS/RHEL)
|
||
症状: Permission denied错误
|
||
解决:
|
||
setenforce 0
|
||
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
||
|
||
⚠️ 坑2: 文件上传失败
|
||
症状: edocs目录无写权限
|
||
解决:
|
||
chown -R www-data:www-data /var/www/html/redcap/edocs
|
||
chmod -R 777 /var/www/html/redcap/edocs
|
||
|
||
⚠️ 坑3: Cron任务不执行
|
||
症状: 计划任务、邮件不发送
|
||
解决:
|
||
# 检查cron日志
|
||
tail -f /var/log/syslog | grep CRON
|
||
# 手动测试cron
|
||
sudo -u www-data php /var/www/html/redcap/cron.php
|
||
|
||
⚠️ 坑4: 数据库连接失败
|
||
症状: Can't connect to MySQL
|
||
解决:
|
||
# 检查MySQL是否运行
|
||
systemctl status mysql
|
||
# 测试连接
|
||
mysql -uredcap_user -p redcap
|
||
|
||
⚠️ 坑5: 邮件发送失败
|
||
症状: 调查邀请无法发送
|
||
原因: 未配置SMTP
|
||
解决:
|
||
# 在REDCap控制中心配置SMTP
|
||
# 或使用SendGrid/Amazon SES
|
||
```
|
||
|
||
---
|
||
|
||
## 📈 部署复杂度评估
|
||
|
||
### 复杂度打分(1-5分)
|
||
|
||
| 环节 | 复杂度 | 时间 | 常见问题 | 难点 |
|
||
|------|--------|------|----------|------|
|
||
| **获取REDCap许可** | 🟡 2/5 | 1-4周 | 审批慢 | 法务流程 |
|
||
| **服务器准备** | 🟢 1/5 | 1小时 | 云厂商选择 | 无 |
|
||
| **LAMP环境搭建** | 🟡 2/5 | 2-4小时 | PHP版本兼容 | 依赖安装 |
|
||
| **REDCap安装** | 🟡 2/5 | 1-2小时 | 数据库配置 | 文件权限 |
|
||
| **SMTP配置** | 🟡 3/5 | 1-3小时 | 邮件被拒 | 反垃圾邮件 |
|
||
| **SSL证书** | 🟢 1/5 | 30分钟 | 域名解析 | 无 |
|
||
| **安全加固** | 🔴 4/5 | 1-2天 | 规则配置 | 防火墙/WAF |
|
||
| **性能优化** | 🔴 4/5 | 1-2天 | 慢查询 | MySQL调优 |
|
||
| **备份策略** | 🟡 2/5 | 2小时 | 存储空间 | 自动化 |
|
||
| **监控告警** | 🟡 3/5 | 4小时 | 指标选择 | 工具集成 |
|
||
|
||
### 总体评估
|
||
|
||
```
|
||
部署复杂度:3.5/5(中等偏高)
|
||
|
||
原因:
|
||
✅ 优势:
|
||
- REDCap安装向导友好(图形化界面)
|
||
- 官方文档详细
|
||
- 社区支持活跃
|
||
|
||
⚠️ 挑战:
|
||
- LAMP环境依赖多(10+个PHP扩展)
|
||
- 文件权限易出错
|
||
- SMTP配置繁琐
|
||
- 安全加固需要专业知识
|
||
|
||
对比:
|
||
- 比WordPress简单(依赖更少)
|
||
- 比Moodle复杂(配置更多)
|
||
- 比自研系统简单(现成软件)
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 快速开始:3种部署路径
|
||
|
||
### 路径1:Docker快速体验(1小时)
|
||
|
||
```bash
|
||
# 适用于:开发测试、External Module开发
|
||
|
||
# 1. 克隆配置仓库(假设你已创建)
|
||
git clone https://github.com/your-org/redcap-docker.git
|
||
cd redcap-docker
|
||
|
||
# 2. 放置REDCap源码
|
||
# 将redcap_v15.8.0.zip解压到当前目录
|
||
|
||
# 3. 一键启动
|
||
docker-compose up -d
|
||
|
||
# 4. 访问
|
||
http://localhost:8080/install.php
|
||
|
||
# 5. 完成安装向导
|
||
# 数据库配置:
|
||
# Host: redcap-db
|
||
# Database: redcap
|
||
# Username: redcap_user
|
||
# Password: redcap_pass_456
|
||
|
||
✅ 优势:快速、可重复、易销毁
|
||
❌ 劣势:不适合生产环境
|
||
```
|
||
|
||
### 路径2:云服务器标准部署(1天)
|
||
|
||
```bash
|
||
# 适用于:小型团队、私有化部署客户
|
||
|
||
# 1. 购买云服务器
|
||
阿里云ECS:2核8GB,Ubuntu 22.04
|
||
|
||
# 2. 执行自动化脚本
|
||
wget https://your-domain.com/redcap-install.sh
|
||
chmod +x redcap-install.sh
|
||
sudo ./redcap-install.sh
|
||
|
||
# 3. 访问
|
||
http://your-server-ip/install.php
|
||
|
||
# 4. 完成安装
|
||
|
||
# 5. 配置域名和SSL
|
||
certbot --apache -d redcap.yourdomain.com
|
||
|
||
✅ 优势:稳定、安全、可扩展
|
||
❌ 劣势:需要运维知识
|
||
```
|
||
|
||
### 路径3:托管服务(0天)
|
||
|
||
```bash
|
||
# 适用于:快速上手、无运维团队
|
||
|
||
# REDCap官方认证托管服务商:
|
||
1. Vanderbilt CTSA
|
||
https://redcap.vanderbilt.edu/consortium/pricing.php
|
||
价格:$5K-15K/年
|
||
|
||
2. Academic Health Center REDCap Hosting
|
||
https://ahcredcap.org/
|
||
价格:$3K-10K/年
|
||
|
||
3. 第三方托管(需验证合规性)
|
||
Veeva Vault EDC
|
||
Medidata Rave
|
||
|
||
✅ 优势:零运维、高可用、专业支持
|
||
❌ 劣势:费用高、定制受限
|
||
```
|
||
|
||
---
|
||
|
||
## 🔒 生产环境安全加固清单
|
||
|
||
### 必做项(P0)
|
||
|
||
```bash
|
||
# 1. 修改默认密码
|
||
# 安装完成后立即修改:
|
||
# - REDCap admin用户密码
|
||
# - MySQL root密码
|
||
# - 操作系统root密码
|
||
|
||
# 2. 启用HTTPS(强制)
|
||
certbot --apache -d redcap.yourdomain.com
|
||
# 在REDCap控制中心:System Configuration
|
||
# Force HTTPS: Yes
|
||
|
||
# 3. 配置防火墙
|
||
ufw enable
|
||
ufw allow 22/tcp # SSH(限制IP更佳)
|
||
ufw allow 80/tcp
|
||
ufw allow 443/tcp
|
||
ufw deny 3306/tcp # 禁止外部访问MySQL
|
||
|
||
# 4. 关闭不必要的服务
|
||
systemctl disable bluetooth
|
||
systemctl disable cups
|
||
|
||
# 5. 定期更新
|
||
apt update && apt upgrade -y
|
||
# 设置自动安全更新
|
||
apt install unattended-upgrades
|
||
dpkg-reconfigure -plow unattended-upgrades
|
||
```
|
||
|
||
### 推荐项(P1)
|
||
|
||
```bash
|
||
# 6. 配置Web应用防火墙(WAF)
|
||
# ModSecurity + OWASP核心规则集
|
||
apt install libapache2-mod-security2
|
||
cd /etc/modsecurity
|
||
wget https://github.com/coreruleset/coreruleset/archive/v3.3.4.tar.gz
|
||
tar -xzvf v3.3.4.tar.gz
|
||
|
||
# 7. 启用审计日志
|
||
# 在REDCap控制中心启用:
|
||
# - Login auditing
|
||
# - Page view logging
|
||
# - Data export logging
|
||
|
||
# 8. 配置备份(每日自动)
|
||
cat > /etc/cron.daily/redcap-backup << 'EOF'
|
||
#!/bin/bash
|
||
# 数据库备份
|
||
mysqldump -uredcap_user -p'PASSWORD' redcap | gzip > /backup/redcap_$(date +\%Y\%m\%d).sql.gz
|
||
|
||
# 文件备份
|
||
tar -czf /backup/redcap_files_$(date +\%Y\%m\%d).tar.gz /var/www/html/redcap/edocs
|
||
|
||
# 删除30天前的备份
|
||
find /backup -type f -mtime +30 -delete
|
||
EOF
|
||
chmod +x /etc/cron.daily/redcap-backup
|
||
|
||
# 9. 配置fail2ban(防暴力破解)
|
||
apt install fail2ban
|
||
cat > /etc/fail2ban/jail.local << 'EOF'
|
||
[DEFAULT]
|
||
bantime = 3600
|
||
findtime = 600
|
||
maxretry = 5
|
||
|
||
[sshd]
|
||
enabled = true
|
||
|
||
[apache-auth]
|
||
enabled = true
|
||
EOF
|
||
systemctl restart fail2ban
|
||
|
||
# 10. 配置监控告警
|
||
# 推荐工具:
|
||
# - Uptime监控:UptimeRobot(免费)
|
||
# - 日志监控:Logtail(阿里云SLS)
|
||
# - APM监控:New Relic(付费)
|
||
```
|
||
|
||
---
|
||
|
||
## 💰 成本估算(全生命周期)
|
||
|
||
### 场景1:开发测试环境
|
||
|
||
```
|
||
初始成本:
|
||
- 服务器:$0(本地电脑)
|
||
- REDCap许可:$0(已获得)
|
||
- SSL证书:$0(自签名证书)
|
||
- 开发工具:$0(开源)
|
||
|
||
总计:$0
|
||
```
|
||
|
||
### 场景2:小型生产环境(50用户)
|
||
|
||
```
|
||
初始成本(一次性):
|
||
- REDCap许可获取:$0(联盟成员)
|
||
- 云服务器购买:$0(按月付费)
|
||
- SSL证书:$0(Let's Encrypt)
|
||
- 部署实施:$2K(1天人力)
|
||
|
||
年度运营成本:
|
||
- 云服务器:$600/年(阿里云2核8GB)
|
||
- 带宽流量:$240/年(10Mbps)
|
||
- 备份存储:$120/年(100GB OSS)
|
||
- SMTP服务:$0(SendGrid免费额度)
|
||
- 监控告警:$0(UptimeRobot免费)
|
||
- 运维人力:$10K/年(0.2 FTE)
|
||
|
||
5年总成本:$57K
|
||
```
|
||
|
||
### 场景3:企业级环境(500用户)
|
||
|
||
```
|
||
初始成本:
|
||
- 服务器集群:$5K(采购)
|
||
- 专业服务:$10K(架构设计+部署)
|
||
- 安全审计:$5K(第三方评估)
|
||
|
||
年度运营成本:
|
||
- 云服务器:$12K/年(4核16GB × 2)
|
||
- 数据库RDS:$8K/年(高可用版)
|
||
- 负载均衡:$3K/年
|
||
- 对象存储:$1K/年
|
||
- SMTP服务:$1K/年(SendGrid专业版)
|
||
- 监控APM:$2K/年(New Relic)
|
||
- 安全服务:$5K/年(WAF + DDoS)
|
||
- 运维人力:$50K/年(1 FTE DevOps)
|
||
- 年度审计:$10K/年(HIPAA合规)
|
||
|
||
5年总成本:$480K
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 对您项目的建议
|
||
|
||
### 当前阶段建议:先不急着部署REDCap
|
||
|
||
```
|
||
理由:
|
||
1. ✅ 您已有REDCap源代码(redcap15.8.0/)
|
||
2. ✅ 可以研究External Module开发(无需运行环境)
|
||
3. ✅ 可以阅读API文档、数据库Schema
|
||
4. ⏰ 等确定要对接时再部署(节省资源)
|
||
|
||
现阶段可以做:
|
||
- 研究REDCap代码结构
|
||
- 设计External Module架构
|
||
- 编写config.json和PHP代码(离线)
|
||
- 准备数据转换逻辑
|
||
- 设计API集成方案
|
||
```
|
||
|
||
### 何时部署REDCap测试环境?
|
||
|
||
```
|
||
时机:
|
||
- 需要测试External Module时
|
||
- 需要验证API调用时
|
||
- 需要测试数据同步时
|
||
- 准备给客户演示时
|
||
|
||
推荐方案:
|
||
Docker部署(1小时快速搭建)
|
||
|
||
命令:
|
||
cd AIclinicalresearch/
|
||
mkdir redcap-dev
|
||
cd redcap-dev
|
||
# 创建docker-compose.yml
|
||
docker-compose up -d
|
||
# 完成!
|
||
```
|
||
|
||
### 生产环境部署策略
|
||
|
||
```
|
||
方案A:客户自己部署(推荐)
|
||
- 你们只提供External Module
|
||
- 客户在自己的REDCap上安装
|
||
- 你们不承担运维责任
|
||
|
||
优势:
|
||
✅ 无需运维成本
|
||
✅ 数据在客户环境(合规)
|
||
✅ 商业模式清晰(插件销售)
|
||
|
||
方案B:你们提供托管服务
|
||
- 部署REDCap + 你们的External Module
|
||
- 按月收费(SaaS模式)
|
||
|
||
劣势:
|
||
❌ 运维成本高($50K+/年)
|
||
❌ 许可合规风险(需与范德堡确认)
|
||
❌ 数据合规责任(HIPAA)
|
||
|
||
建议:
|
||
🎯 优先推荐方案A(客户自己部署REDCap)
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 部署参考资源
|
||
|
||
### 官方文档
|
||
|
||
```
|
||
1. REDCap安装指南
|
||
/redcap15.8.0/Installation_Instructions.txt
|
||
|
||
2. REDCap技术要求
|
||
https://projectredcap.org/software/requirements/
|
||
|
||
3. REDCap社区论坛
|
||
https://community.projectredcap.org/
|
||
|
||
4. External Module开发文档
|
||
/redcap_external_module_framework_docs_main/
|
||
```
|
||
|
||
### 第三方教程
|
||
|
||
```
|
||
1. GitHub REDCap Docker
|
||
https://github.com/123andy/redcap-docker-compose
|
||
|
||
2. DigitalOcean REDCap部署教程
|
||
https://www.digitalocean.com/community/tutorials/how-to-install-redcap
|
||
|
||
3. YouTube视频教程
|
||
搜索:"REDCap installation tutorial"
|
||
```
|
||
|
||
---
|
||
|
||
## 🎬 总结与行动建议
|
||
|
||
### 回答您的问题
|
||
|
||
**Q1: 对接REDCap前需要部署吗?**
|
||
A: ✅ **是的**,需要部署REDCap服务器才能开发和测试对接功能。
|
||
|
||
**Q2: 部署复杂吗?**
|
||
A: 🟡 **中等复杂度**(3.5/5分)
|
||
- Docker方案:1-2小时(简单)
|
||
- 生产环境:1-2天(中等)
|
||
- 企业级:3-5天(复杂)
|
||
|
||
**Q3: 需要什么条件?**
|
||
A:
|
||
1. 🔑 REDCap许可(加入联盟)
|
||
2. 💾 REDCap源代码(已有✅)
|
||
3. 🖥️ 服务器(2核8GB起)
|
||
4. 📧 SMTP邮件服务
|
||
|
||
**Q4: 软硬件要求?**
|
||
A:
|
||
- CPU: 2核+
|
||
- 内存: 8GB+
|
||
- 硬盘: 100GB+ SSD
|
||
- 软件: LAMP栈(Linux + Apache + MySQL + PHP)
|
||
|
||
### 立即行动
|
||
|
||
```
|
||
Step 1: 决定部署方案
|
||
├─ Docker(开发测试) → 1小时完成
|
||
└─ 手动部署(生产环境) → 1天完成
|
||
|
||
Step 2: 准备环境
|
||
- 购买云服务器(如需)
|
||
- 安装Docker(如需)
|
||
- 确认REDCap许可状态
|
||
|
||
Step 3: 执行部署
|
||
- 按照本文档步骤操作
|
||
- 记录遇到的问题
|
||
- 完成安装向导
|
||
|
||
Step 4: 验证
|
||
- 创建测试项目
|
||
- 录入测试数据
|
||
- 测试API调用
|
||
|
||
Step 5: 开始External Module开发
|
||
- 创建模块目录
|
||
- 编写config.json
|
||
- 测试Hook功能
|
||
```
|
||
|
||
---
|
||
|
||
**文档版本**:v1.0
|
||
**最后更新**:2025-12-30
|
||
**下次更新**:部署完成后补充实际遇到的问题
|
||
|
||
---
|
||
|
||
**🚀 需要我帮您创建Docker部署脚本吗?或者有其他部署相关的问题?**
|
||
|
||
|
||
|
||
|
||
|