核心成果: - 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的数据对接
114 lines
3.4 KiB
Bash
114 lines
3.4 KiB
Bash
#!/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 "$@"
|
||
|