feat(redcap): REDCap 15.8.0 Docker本地开发环境部署完成

核心成果:
- REDCap 15.8.0成功部署在Docker环境
- 登录功能正常,管理员账户: Admin/Admin123!
- MySQL 8.0 + PHP 8.1 + Apache 2.4环境验证通过

问题解决:
1. 修复ERR_CONTENT_DECODING_FAILED错误
   - 强制禁用Apache deflate模块
   - PHP配置关闭zlib.output_compression
   - 自动注释REDCap源码中的压缩设置

2. 修复Base URL配置错误
   - 更新redcap_config表中的redcap_base_url
   - 统一DocumentRoot与访问路径

3. 修复登录失败问题(CRLF污染)
   - 删除database.php末尾的PHP结束标签
   - 创建.gitattributes规范换行符
   - 验证REDCap官方源码无此问题

技术改进:
- 添加密码重置工具脚本
- 完善docker-entrypoint.sh启动脚本
- 创建详细的部署问题解决记录
- 建立PHP配置文件最佳实践

部署文档:
- REDCap本地Docker开发环境部署方案
- REDCap生产环境部署决策报告(ECS vs SAE)
- 部署问题解决记录(含根因分析)

下一步:
- Day 2: 开发REDCap API Adapter
- 实现与IIT Manager Agent的数据对接
This commit is contained in:
2026-01-02 10:02:46 +08:00
parent dac3cecf78
commit 38d9bf99d6
25 changed files with 3990 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
# REDCap Docker镜像定义
# 基于PHP 8.1 Apache官方镜像
# 版本v1.0
# 日期2026-01-01
# 适用:开发/测试/生产环境
FROM php:8.1-apache
LABEL maintainer="IIT Manager Team"
LABEL description="REDCap 15.8.0 Docker Image for IIT Manager Agent"
LABEL version="1.0"
# ========== 设置时区 ==========
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# ========== 配置APT使用阿里云镜像源加速国内构建 ==========
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources || \
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
# ========== 安装系统依赖 ==========
RUN apt-get update && apt-get install -y \
# 图片处理库GD扩展需要
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
# ZIP扩展
libzip-dev \
# LDAP扩展可选企业认证用
libldap2-dev \
# SOAP扩展可选Web Service用
libxml2-dev \
# Cron定时任务
cron \
# 常用工具
curl \
vim \
unzip \
# 清理APT缓存
&& rm -rf /var/lib/apt/lists/*
# ========== 安装PHP扩展 ==========
# GD扩展图片处理
RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
docker-php-ext-install -j$(nproc) gd
# 数据库扩展
RUN docker-php-ext-install -j$(nproc) \
mysqli \
pdo_mysql
# 其他必需扩展
RUN docker-php-ext-install -j$(nproc) \
zip \
soap \
calendar \
bcmath
# LDAP扩展可选
RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \
docker-php-ext-install ldap
# ========== 启用Apache模块 ==========
RUN a2enmod rewrite ssl headers
# ========== 创建必需目录 ==========
RUN mkdir -p /var/www/html/redcap/edocs && \
mkdir -p /var/www/html/redcap/temp && \
mkdir -p /var/www/html/redcap/modules && \
chown -R www-data:www-data /var/www/html
# ========== 配置Cron定时任务 ==========
# REDCap需要定期运行cron.php
RUN echo "* * * * * www-data /usr/local/bin/php /var/www/html/redcap/cron.php > /proc/1/fd/1 2>&1" >> /etc/crontab && \
echo "" >> /etc/crontab
# ========== 复制启动脚本 ==========
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# ========== 暴露端口 ==========
EXPOSE 80 443
# ========== 健康检查 ==========
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost/ || exit 1
# ========== 工作目录 ==========
WORKDIR /var/www/html
# ========== 启动命令 ==========
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["apache2-foreground"]