核心成果: - 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的数据对接
95 lines
2.6 KiB
Docker
95 lines
2.6 KiB
Docker
# 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"]
|
||
|