- Dockerfile 修复:GOPROXY 国内镜像 + go.mod 路径修正 + 构建目录
- docker-compose.deploy.yml 补全 push-gateway 全部 12 个环境变量
- deploy.env.example 新增 push-gateway 段(INTERNAL_API_TOKEN/WS_ALLOWED_ORIGINS)
- 本地 Docker 验证通过(非 mock):
- /healthz + /readyz(Redis + Kafka 健康)
- WebSocket /ws + dev-token 鉴权
- /internal/push HTTP API 投递 3 类考试事件
- Kafka → push-gateway → WebSocket 全链路透传
ExamExtended / ExamForceSubmitted / ExamQuestionReordered
- 新增 docs/nextstep.md:上游依赖(iam/Redis/Kafka)+
下游依赖(4 portal + msg)+ 事件投递架构图 + 环境变量清单
65 lines
2.2 KiB
Plaintext
65 lines
2.2 KiB
Plaintext
# 服务器部署环境变量模板
|
||
# 使用方式:复制到 /opt/edu/.env 并填入生产值
|
||
# cp infra/deploy.env.example /opt/edu/.env
|
||
# vim /opt/edu/.env
|
||
#
|
||
# 安全警告:
|
||
# - 此文件含敏感信息,禁止提交到 Git
|
||
# - .gitignore 已忽略 .env
|
||
# - 仅 SRE AI 或人类决策者可编辑
|
||
|
||
# ============ 数据库(服务器已有 MySQL)============
|
||
# DATABASE_URL 中的 host 需用容器名(如 edu-mysql)而非 localhost
|
||
# 因为应用容器通过 edu-shared 网络访问 MySQL 容器
|
||
DATABASE_URL=mysql://edu:changeme@edu-mysql:3306/next_edu_cloud
|
||
|
||
# ============ Redis(服务器已有 Redis)============
|
||
# 同理用容器名
|
||
REDIS_URL=redis://edu-redis:6379
|
||
|
||
# ============ JWT(生产密钥,必须修改)============
|
||
# 生成方式:openssl rand -hex 32
|
||
JWT_SECRET=CHANGE_ME_TO_STRONG_RANDOM_SECRET
|
||
JWT_ISSUER=next-edu-cloud
|
||
JWT_AUDIENCE=next-edu-cloud
|
||
|
||
# ============ 服务端口 ============
|
||
API_GATEWAY_PORT=8080
|
||
TEACHER_PORTAL_PORT=3000
|
||
ADMIN_PORTAL_PORT=4003
|
||
|
||
# ============ Kafka(P3+ 启用,留空则 Outbox publisher 持续重试)============
|
||
KAFKA_BROKERS=
|
||
|
||
# ============ push-gateway(WebSocket 推送服务)============
|
||
# /internal/push 鉴权 token(msg 服务调用时需携带 X-Internal-Token 头)
|
||
INTERNAL_API_TOKEN=CHANGE_ME_TO_STRONG_INTERNAL_TOKEN
|
||
# WebSocket 允许的 Origin 白名单(逗号分隔)
|
||
WS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:4000,http://localhost:4001,http://localhost:4002,http://localhost:4003
|
||
# push-gateway 对外端口
|
||
PUSH_GATEWAY_PORT=8081
|
||
|
||
# ============ 可观测性(P6 启用)============
|
||
# OTLP collector 端点,留空则服务跳过 trace 上报
|
||
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
|
||
LOG_LEVEL=info
|
||
|
||
# ============ Neo4j(content 服务,留空则降级模式)============
|
||
NEO4J_URL=
|
||
NEO4J_PASSWORD=
|
||
|
||
# ============ Elasticsearch(msg 服务,留空则降级模式)============
|
||
ES_URL=
|
||
|
||
# ============ ClickHouse(data-ana 服务,留空则降级模式)============
|
||
CLICKHOUSE_HOST=
|
||
CLICKHOUSE_PORT=8123
|
||
CLICKHOUSE_DATABASE=edu_analytics
|
||
CLICKHOUSE_USER=
|
||
CLICKHOUSE_PASSWORD=
|
||
|
||
# ============ LLM 配置(ai 服务,留空则降级模式)============
|
||
OPENAI_API_KEY=
|
||
OPENAI_BASE_URL=https://api.openai.com/v1
|
||
ANTHROPIC_API_KEY=
|