- api-gateway/Dockerfile: 多阶段构建,golang:1.22-alpine → alpine:3.20,CGO_ENABLED=0 静态编译,非 root 运行 - teacher-portal/Dockerfile: 多阶段构建,node:20-alpine builder → runner,含 HEALTHCHECK - docker-compose.prod.yml: 本地生产编排,3 服务,强制 DEV_MODE=false - docker-compose.deploy.yml: 服务器部署用,镜像来自 Gitea Registry,通过 edu-shared 外部网络连接 MySQL/Redis - deploy.env.example: 部署环境变量模板
39 lines
1.3 KiB
Plaintext
39 lines
1.3 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
|
||
|
||
# ============ Kafka(P3 阶段启用,P1 留空)============
|
||
KAFKA_BROKERS=
|
||
|
||
# ============ 可观测性(P6 阶段启用,P1 留空)============
|
||
OTEL_EXPORTER_OTLP_ENDPOINT=
|
||
LOG_LEVEL=info
|
||
|
||
# ============ 镜像 tag(由 CI 注入,手动部署时可改)============
|
||
# IMAGE_TAG=latest ← 默认 latest,CI 通过 export IMAGE_TAG 覆盖
|