fix(infra): 切换 Redis 至火山引擎实例 + 修复 channels 不支持 ACL username + .env 取消跟踪
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 8m34s
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 8m34s
- 阿里云 Redis 实例 10054 RST 导致 /api/v1/admin/login/ 等接口全线 500,切到火山实例 (db /3, user zyc)
- CHANNEL_LAYERS hosts 由手工拼接 redis://:{pwd}@{host} 改为直接消费 REDIS_LOCATION,支持 ACL username
- .gitignore 恢复 qy_lty/.env 忽略,git rm --cached 移除跟踪;历史中旧密钥仍在,需另行 rotate
- 详见 qy_lty/docs/修改记录.md 2026-05-18 条目
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
cc8ffee168
commit
a9d00a49f9
4
.gitignore
vendored
4
.gitignore
vendored
@ -36,8 +36,8 @@ qy-lty-admin/next-env.d.ts
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.pyo
|
||||
# env files
|
||||
# qy_lty/.env
|
||||
# env files(含密钥,禁止入库)
|
||||
qy_lty/.env
|
||||
# logs
|
||||
qy_lty/logs/
|
||||
# static files collected
|
||||
|
||||
107
qy_lty/.env
107
qy_lty/.env
@ -1,107 +0,0 @@
|
||||
SECRET_KEY=django-insecure-j63ZGygyiLWGqhZ-e3ZGH_HGfNVQgBkq*jjpYMz-QYqE46cuuA
|
||||
DEBUG=True
|
||||
|
||||
MYSQL_DATABASE_NAME=lty
|
||||
MYSQL_DATABASE_USER=root
|
||||
MYSQL_DATABASE_PASSWORD=123456
|
||||
MYSQL_DATABASE_HOST=localhost
|
||||
MYSQL_DATABASE_PORT=3306
|
||||
|
||||
# POSTGRESQL_DATABASE_NAME=lty
|
||||
# POSTGRESQL_DATABASE_USER=postgres
|
||||
# POSTGRESQL_DATABASE_PASSWORD=123456
|
||||
# POSTGRESQL_DATABASE_HOST=localhost
|
||||
# POSTGRESQL_DATABASE_PORT=5432
|
||||
|
||||
# 气元pg
|
||||
POSTGRESQL_DATABASE_NAME=qy_lty
|
||||
POSTGRESQL_DATABASE_USER=qy_lty
|
||||
POSTGRESQL_DATABASE_PASSWORD=NfAfCvkad8L2
|
||||
POSTGRESQL_DATABASE_HOST=pgm-7xv4811oj11j86htzo.pg.rds.aliyuncs.com
|
||||
POSTGRESQL_DATABASE_PORT=5432
|
||||
|
||||
# REDIS_LOCATION=redis://localhost:6379/0
|
||||
# REDIS_PASSWORD=
|
||||
|
||||
# 气元redis
|
||||
REDIS_LOCATION=redis://r-7xvat0vez5clwbzk5vpd.redis.rds.aliyuncs.com:6379/0
|
||||
REDIS_PASSWORD=vAhRnAA6VMco
|
||||
|
||||
ALIYUN_SMS_ACCESS_KEY_ID=LTAI5t6ZXMo3SbKUg7YrK89m
|
||||
ALIYUN_SMS_ACCESS_KEY_SECRET=ygDVmjIIAcFgXcaJP7hbiSwOr8hYur
|
||||
ALIYUN_SMS_SIGN_NAME=广州气元科技
|
||||
ALIYUN_SMS_TEMPLATE_CODE=SMS_317100048
|
||||
|
||||
# 实际是火山的
|
||||
KIMI_API_KEY=846b6981-9954-4c58-bb39-63079393bdb8
|
||||
KIMI_BASE_URL=https://ark.cn-beijing.volces.com/api/v3/
|
||||
|
||||
|
||||
# 阿里云日志配置(气元账户)
|
||||
ALIYUN_LOG_PROJECT=lty
|
||||
ALIYUN_LOG_STORE=lty-backend
|
||||
ALIYUN_LOG_ENDPOINT=cn-guangzhou.log.aliyuncs.com
|
||||
ALIYUN_LOG_ACCESS_KEY_ID=LTAI5tFYGrgcAhscCdEUB9Te
|
||||
ALIYUN_LOG_ACCESS_KEY_SECRET=YO7Bf3QDH4ErYCNvSssFkHseNsh8PP
|
||||
|
||||
# 阿里云语音配置(气元账户)
|
||||
ALIYUN_NLS_ACCESS_KEY_ID=LTAI5t6tnLjBK9edseDVH849
|
||||
ALIYUN_NLS_ACCESS_KEY_SECRET=DmiZyjnfQo03KalxYmELOfcDQUIrTX
|
||||
ALIYUN_NLS_APP_ID=Gxf9gwGYOvUTjzYC
|
||||
|
||||
|
||||
# 阿里云oss配置(气元账户)
|
||||
ALIYUN_OSS_ACCESS_KEY_ID=LTAI5tL2aUarUR99h2kdKTss
|
||||
ALIYUN_OSS_ACCESS_KEY_SECRET=62OUrzdty2oQPiPLLt0XTAbKvMT1sO
|
||||
ALIYUN_OSS_BUCKET=lty-storage
|
||||
ALIYUN_OSS_ENDPOINT=https://oss-cn-guangzhou.aliyuncs.com
|
||||
ALIYUN_OSS_HOST=https://lty-storage.airlabs.art
|
||||
ALIYUN_OSS_AUDIO_BASE_DIR=audio
|
||||
|
||||
# 火山语音配置(风也账户,洛天依声音克隆)
|
||||
AUDIO_SERVICE_HUOSHAN_APPID=5801394478
|
||||
AUDIO_SERVICE_HUOSHAN_ACCESS_TOKEN=8pNMhvG4H6VWecnYOBmzyLnribeHVhoj
|
||||
AUDIO_SERVICE_HUOSHAN_CLUSTER=volcano_icl
|
||||
AUDIO_SERVICE_HUOSHAN_VOICE_TYPE=S_PHQ1AVPl1
|
||||
AUDIO_SERVICE_HUOSHAN_STORAGE_DIR=audio
|
||||
AUDIO_SERVICE_HUOSHAN_BASE_URL=https://lty-storage.airlabs.art
|
||||
|
||||
|
||||
AUDIO_SERVICE_ALIYUN_API_KEY=
|
||||
AUDIO_SERVICE_ALIYUN_API_SECRET=
|
||||
AUDIO_SERVICE_TENCENT_API_KEY=
|
||||
AUDIO_SERVICE_TENCENT_API_SECRET=
|
||||
|
||||
# 阿里云VI配置
|
||||
ALIYUN_VI_ACCESS_KEY_ID=LTAI5tHXQGNyAws4eXB7ytYu
|
||||
ALIYUN_VI_ACCESS_KEY_SECRET=EouZq22js1pmMwMmGep4PWXqJEy9DA
|
||||
ALIYUN_VI_ENDPOINT=facebody.cn-shanghai.aliyuncs.com
|
||||
ALIYUN_VI_REGION=cn-shanghai
|
||||
|
||||
# # 火山引擎配置(风也账户)
|
||||
# VOLCENGINE_APP_ID=67b59a4586198401ec980bf9
|
||||
# VOLCENGINE_APP_KEY=285a4b02b91f425eac74605e6f42178f
|
||||
# VOLCENGINE_TOKEN_EXPIRE_TIME=2592000
|
||||
|
||||
# # 火山引擎RTC ak和sk配置(风也账户)
|
||||
# VOLCENGINE_ACCESS_KEY=AKLTMGZmMGIxNTU4MjBlNDU2OWE0M2VmMmY2MjBlODkxNzQ
|
||||
# VOLCENGINE_SECRET_KEY=WldJeU9XSXlNVFprWWpNd05HTmtNVGczTkdNMll6QXpNakEwTm1JM05qSQ==
|
||||
|
||||
## 火山引擎配置(气元账户)
|
||||
#VOLCENGINE_APP_ID=67f3951852477d017d1254d5
|
||||
#VOLCENGINE_APP_KEY=27d3197d38764205a4cd257df086325d
|
||||
#VOLCENGINE_TOKEN_EXPIRE_TIME=2592000
|
||||
|
||||
## 火山引擎RTC ak和sk配置(气元账户)
|
||||
#VOLCENGINE_ACCESS_KEY=AKLTNmVmNTU4NmEzNzFjNDYyYTk2OTZjMjMwYTljZGEwMjE
|
||||
#VOLCENGINE_SECRET_KEY=TnpReFlqQTBaalUwT1RZNU5HSXhaamt3WlRBME5EQmtNVGc1WXpOallqYw==
|
||||
|
||||
|
||||
## 火山引擎RTC ak和sk配置(气元账户)
|
||||
VOLCENGINE_ACCESS_KEY=AKLTNmVmNTU4NmEzNzFjNDYyYTk2OTZjMjMwYTljZGEwMjE
|
||||
VOLCENGINE_SECRET_KEY=TnpReFlqQTBaalUwT1RZNU5HSXhaamt3WlRBME5EQmtNVGc1WXpOallqYw==
|
||||
|
||||
## 火山引擎配置(气元账户)
|
||||
VOLCENGINE_APP_ID=68eb092fb8f0ac0173afe8c7
|
||||
VOLCENGINE_APP_KEY=8b43a113b59c47f3abd65bcd5ce8692d
|
||||
VOLCENGINE_TOKEN_EXPIRE_TIME=2592000
|
||||
@ -23,6 +23,27 @@
|
||||
|
||||
<!-- 新的修改记录添加在此处下方,最新的在最前面 -->
|
||||
|
||||
### [2026-05-18] Redis 切换为火山引擎实例 + 修复 CHANNEL_LAYERS 不支持 ACL username
|
||||
|
||||
原阿里云 Redis 实例(`r-7xvat0vez5clwbzk5vpd.redis.rds.aliyuncs.com:6379`)连接被远端 RST(10054),导致 `/api/v1/admin/login/` 等所有依赖 token / 缓存的接口报 `ConnectionError`。改用火山引擎 Redis 实例(`redis-shzlsczo52dft8mia.redis.volces.com:6379/3`,用户 `zyc`)。
|
||||
|
||||
切换过程中发现 `CHANNEL_LAYERS` 配置硬拼 URL 时只放了 password、没有 username,导致带 ACL username 的 Redis(如本次的火山实例)会拼出畸形 URL(`redis://:pwd@host` 缺 user)。改为直接消费完整 `REDIS_LOCATION`(已含 `zyc:Zyc188208@`),后续切换实例只改 .env 即可。
|
||||
|
||||
- **文件路径**:
|
||||
- `.env`(**修改** — 旧 REDIS_LOCATION/PASSWORD 注释保留作为回滚参考;新 REDIS_LOCATION 含完整 `zyc:Zyc188208@` 凭据;REDIS_PASSWORD 仍保留 `Zyc188208` 以兼容 `django-redis` OPTIONS.PASSWORD)
|
||||
- `qy_lty/settings.py`(**修改** — 第 519 行 CHANNEL_LAYERS hosts 由 `f"redis://:{config('REDIS_PASSWORD')}@{config('REDIS_LOCATION').replace('redis://', '')}"` 改为 `[config('REDIS_LOCATION')]`)
|
||||
- **修改类型**: 配置切换 + 修复Bug
|
||||
- **修改内容**:
|
||||
1. Redis 实例 URL 切换到火山引擎,库号由 `/0` 改为 `/3`
|
||||
2. CHANNEL_LAYERS hosts 不再二次拼接,直接读取完整 URL;不再丢失 ACL username
|
||||
- **修改原因**:
|
||||
- 阿里云 Redis 不可用(白名单 / 实例状态 / 网络出口任一原因均会触发 10054 RST),登录 / token / 缓存全线 500
|
||||
- channels_redis 接受标准 redis URL(含 `user:pass@`),原硬拼方式只能表达 password-only,遇到 ACL 模式实例无法登录通道层
|
||||
- **验证**: 重启 daphne 后启动日志 `Cache Status: OK`,延迟 296.67ms;HTTP 8000 监听正常
|
||||
- **回滚**: 取消 `.env` 中两行火山配置注释 → 取消阿里云两行注释;CHANNEL_LAYERS 改回原拼接(若回到不带 username 的实例可保留新写法,更通用)
|
||||
|
||||
---
|
||||
|
||||
### [2026-05-13] 好感度系统 P2 阶段 — Service 层 + 管理端 API 落地
|
||||
|
||||
配套设计文档:[../../docs/好感度系统功能与规则设计.md](../../docs/好感度系统功能与规则设计.md)
|
||||
|
||||
@ -516,7 +516,7 @@ CHANNEL_LAYERS = {
|
||||
'default': {
|
||||
'BACKEND': 'channels_redis.core.RedisChannelLayer',
|
||||
'CONFIG': {
|
||||
"hosts": [f"redis://:{config('REDIS_PASSWORD')}@{config('REDIS_LOCATION').replace('redis://', '')}"],
|
||||
"hosts": [config('REDIS_LOCATION')],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user