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,59 @@
# **REDCap ERR\_CONTENT\_DECODING\_FAILED 错误排查与修复指南**
如果在浏览器访问 REDCap 时遇到 net::ERR\_CONTENT\_DECODING\_FAILED 200 (OK),说明数据包在传输过程中被“弄脏”了。以下是按优先级排序的 4 种解决方案:
## **1\. 禁用 PHP 的 zlib 输出压缩 (最常见原因)**
REDCap 内部有时会尝试自己控制输出压缩,如果你的 php.ini 里也开启了 zlib.output\_compression两者冲突就会导致解码失败。
**操作步骤:**
1. 找到你挂载到 Docker 容器里的 php.ini 文件。
2. 搜索 zlib.output\_compression。
3. 将其设置为 Off
zlib.output\_compression \= Off
4. **重启 Docker 容器**docker-compose restart redcap-web。
## **2\. 检查并清理 PHP 文件的 BOM 头**
如果你编辑过 database.php 或 config.php并使用了 Windows 记事本,可能会在文件开头插入一个不可见的 **UTF-8 BOM** 字符。这个字符会抢在 Gzip 报文头之前发送,导致浏览器解压失败。
**操作步骤:**
1. 使用 VS Code 或 Notepad++ 打开 database.php。
2. 检查右下角的编码格式。如果是 UTF-8 with BOM请将其更改为 **UTF-8** (无 BOM)。
3. 确保 \<?php 标签前面**没有任何空格或换行**。
## **3\. 屏蔽 PHP 报错对输出流的干扰**
如果 PHP 开启了 display\_errors那么在 REDCap 尝试发送压缩页面时,如果代码报了一个 Notice 或 Warning这些文字信息会直接塞进压缩流里导致整个包损坏。
操作步骤:
在 php.ini 中临时关闭报错显示,看看页面能否恢复:
display\_errors \= Off
error\_reporting \= E\_ALL & \~E\_NOTICE & \~E\_STRICT & \~E\_DEPRECATED
*注:如果关闭后能访问了,说明代码里有报错,你需要去查看 docker-compose logs redcap-web 里的具体错误原因。*
## **4\. 检查临时目录 (temp) 的写入权限**
REDCap 在处理输出缓冲时需要写入 temp 目录。如果权限不足PHP 会报错,进而引发上述的解码失败。
操作步骤:
在宿主机执行以下命令,确保容器内的目录可写:
docker exec \-it redcap-web chown \-R www-data:www-data /var/www/html/temp
docker exec \-it redcap-web chmod \-R 775 /var/www/html/temp
## **5\. 常见原因总结表**
| 可能原因 | 表现 | 解决方法 |
| :---- | :---- | :---- |
| **zlib 压缩冲突** | 页面随机性报错 | 关闭 zlib.output\_compression |
| **BOM 字符污染** | 始终报错 | 将 PHP 文件保存为“无 BOM 的 UTF-8” |
| **PHP 报错混入** | 升级或安装后初次访问 | 检查日志并关闭 display\_errors |
| **文件截断** | 页面加载一半报错 | 增加 memory\_limit 或 max\_execution\_time |
## **快速测试**
你可以尝试在浏览器中使用“无痕模式”访问。如果无痕模式依然报错,则 100% 是服务器端的配置问题,请重点执行 **第 1 步**