facc04aa65
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交 (5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。 一、docs 结构整改(整改 #14) 根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入, 随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录 树并存于 docs/,共 791 文件、双分类体系冲突。 修复动作: - b2 同名异主题文件改名迁移保全 9 个 - C 类 39 个孤立文件按主题正确归类 - A/B1 类 222 个重复文件删除(新结构已有内容副本) - 9 个旧独有空目录删除 - 270 处内部引用按 verified 映射改写 - 整改记录 #14 登记于 04-运维文档/部署运维 结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。 残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。 二、compose 双目录对齐(消除踩坑 A) - docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist 改为 src/frontend-*/dist(h5 / agent / admin / terminal) - docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/ - 效果:本地 docker compose up 不再把根目录 stale dist 挂回, 与线上一致,分叉隐患消除(已 docker compose config 校验通过) 防复发铁律: - 重构须提交;仓库修复须 git stash -u 或先 commit - 新结构须 git add 并提交,避免再次 untracked 复活 - H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
修复 docker-compose.yml 中 REDIS_URL 默认值的 URL-encode 问题。
|
|
|
|
背景:
|
|
- 2026-06-15 故障:REDIS_URL 里的密码 R3d!s@2026#Secure 含 @ # 两个 URL 保留字符,
|
|
Python redis 库解析时密码被截断成 R3d!s,导致鉴权失败 → Redis 连接超时
|
|
- 修复:把密码 URL-encode(@→%40, #→%23, !→%21)
|
|
- ⚠️ 关键: 只 URL-encode REDIS_URL 那行的密码,redis-server --requirepass
|
|
和 healthcheck 的 redis-cli -a 都必须保持**明文**(否则 Redis 容器启动失败/鉴权失败)
|
|
|
|
用法:
|
|
sudo python3 /tmp/patch-redis-url.py
|
|
"""
|
|
fp = '/opt/wecom-it-desk/docker-compose.yml'
|
|
|
|
# 读取当前内容
|
|
with open(fp, encoding='utf-8') as f:
|
|
c = f.read()
|
|
|
|
# 旧值(精确匹配 REDIS_URL 那一行,带 redis://://@ 上下文,避免误改 --requirepass)
|
|
old = 'REDIS_URL=redis://:${REDIS_PASSWORD:-R3d!s@2026#Secure}@redis:6379/0'
|
|
|
|
# 新值:URL-encode 后的密码(!→%21, @→%40, #→%23),仅 REDIS_URL 这一行
|
|
new = 'REDIS_URL=redis://:${REDIS_PASSWORD:-R3d%21s%402026%23Secure}@redis:6379/0'
|
|
|
|
# 检查是否已经修复过(幂等性)
|
|
if old in c:
|
|
print('[OK] 检测到未编码版本,准备修复...')
|
|
c2 = c.replace(old, new, 1) # 只替换第一次出现(更安全)
|
|
with open(fp, 'w', encoding='utf-8') as f:
|
|
f.write(c2)
|
|
delta = len(c2) - len(c)
|
|
print('[OK] 已修复:REDIS_URL 行的密码已 URL-encode')
|
|
print(f'[OK] 文件长度变化:{delta:+d} 字节')
|
|
elif new in c:
|
|
print('[OK] 已经修复过,跳过(幂等性 OK)')
|
|
else:
|
|
print('[ERROR] 既没找到旧值也没找到新值,请人工检查 docker-compose.yml')
|
|
print('---')
|
|
print('当前 REDIS_URL 相关配置:')
|
|
import subprocess
|
|
result = subprocess.run(['grep', '-n', 'REDIS_URL\\|REDIS_PASSWORD\\|--requirepass\\|redis-cli', fp],
|
|
capture_output=True, text=True)
|
|
print(result.stdout)
|
|
exit(1)
|
|
|
|
# 验证:确保 --requirepass 和 redis-cli 仍然是明文(没被误改)
|
|
import subprocess
|
|
result = subprocess.run(['grep', '-nE', 'REDIS_URL|--requirepass|redis-cli.*-a', fp],
|
|
capture_output=True, text=True)
|
|
print('---')
|
|
print('当前所有密码相关行(应只有 REDIS_URL 一行是 URL-encoded,其他保持明文):')
|
|
print(result.stdout)
|