Files
AIclinicalresearch/redcap-docker-dev/docker-entrypoint.sh
HaHafeng 38d9bf99d6 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的数据对接
2026-01-02 10:02:46 +08:00

114 lines
3.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "$@"