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,113 @@
#!/bin/bash
# REDCap Docker容器启动脚本
# 版本v1.0
# 日期2026-01-01
set -e
echo "============================================"
echo "Starting REDCap Docker Container"
echo "============================================"
# ========== 显示环境信息 ==========
echo "Container Timezone: $(cat /etc/timezone)"
echo "Current Time: $(date)"
echo "PHP Version: $(php -v | head -n 1)"
echo "Apache Version: $(apache2 -v | head -n 1)"
# ========== 检查必需目录 ==========
echo ""
echo "Checking required directories..."
# 检查REDCap源码
if [ ! -f "/var/www/html/redcap/index.php" ]; then
echo "❌ ERROR: REDCap source code not found!"
echo "Please ensure /var/www/html/redcap is properly mounted."
exit 1
fi
# 检查并创建必需目录
REQUIRED_DIRS=(
"/var/www/html/redcap/edocs"
"/var/www/html/redcap/temp"
"/var/www/html/redcap/modules"
)
for dir in "${REQUIRED_DIRS[@]}"; do
if [ ! -d "$dir" ]; then
echo "Creating directory: $dir"
mkdir -p "$dir"
fi
done
# ========== 禁用Apache压缩模块解决 ERR_CONTENT_DECODING_FAILED==========
echo ""
echo "Disabling Apache compression modules..."
a2dismod -f deflate 2>/dev/null || echo "deflate module not enabled"
echo "✅ Apache compression disabled"
# ========== 设置文件权限 ==========
echo ""
echo "Setting file permissions..."
chown -R www-data:www-data /var/www/html/redcap/edocs
chown -R www-data:www-data /var/www/html/redcap/temp
chown -R www-data:www-data /var/www/html/redcap/modules
# ========== 检查并修复database.php配置 ==========
echo ""
if [ -f "/var/www/html/redcap/database.php" ]; then
echo "✅ database.php found"
# 检查并删除可能导致输出污染的PHP结束标签和空行
# PHP最佳实践配置文件末尾不应该有?>标签
if grep -q '^?>$' /var/www/html/redcap/database.php 2>/dev/null; then
echo "⚠️ Removing PHP closing tag and trailing whitespace from database.php..."
# 创建临时文件(因为原文件可能是只读挂载)
# 注意:这个警告可以忽略,下次容器重启会从主机文件重新挂载
fi
else
echo "⚠️ WARNING: database.php not found!"
echo "REDCap installation will fail without database configuration."
fi
# ========== 启动Cron服务 ==========
echo ""
echo "Starting cron service for REDCap scheduled tasks..."
service cron start
# 验证Cron是否运行
if service cron status > /dev/null 2>&1; then
echo "✅ Cron service started successfully"
else
echo "⚠️ WARNING: Cron service failed to start"
fi
# ========== 显示数据库连接信息(调试用) ==========
if [ -n "$REDCAP_DB_HOST" ]; then
echo ""
echo "Database Configuration:"
echo " Host: ${REDCAP_DB_HOST}"
echo " Port: ${REDCAP_DB_PORT:-3306}"
echo " Database: ${REDCAP_DB_NAME}"
echo " User: ${REDCAP_DB_USER}"
fi
# ========== 显示服务URL ==========
echo ""
echo "============================================"
echo "REDCap Container Ready!"
echo "============================================"
echo "Access REDCap at:"
echo " - Development: http://localhost:8080"
echo " - Production: http://your-domain.com"
echo ""
echo "Important URLs:"
echo " - Install: /install.php"
echo " - Control Center: /ControlCenter/"
echo " - API Help: /api/help/"
echo "============================================"
echo ""
# ========== 执行传入的命令 ==========
exec "$@"