文档与配置同步 v0.3.0 的破坏性变更: README.md: - 特性列表更新:管理入口 /dashboard、凭证分离、默认无匿名监控端点 - 环境变量表补充 METRICS_ALLOW_CIDR,并说明未配任何管理凭证时服务拒绝启动 - 端点文档重写:/healthz(匿名且不含字段)、/health(需鉴权)、 /metrics(默认 404,两种使用方式)、管理页面与安装页对照表 (含"页面需鉴权为何又能直接打开"的内容协商说明) - 公网部署安全清单重写:按端点列出真实暴露面,并提醒探针必须指向 /healthz - 故障排查、架构表、迁移表中的 /admin 引用统一改为 /dashboard .env.example:新增 METRICS_ALLOW_CIDR 与 admin_key 说明(含 Docker 网段警告)。 两处部署陷阱修复(阶段一给 /health 加鉴权引发的连带问题): - docker-compose.yml 的 healthcheck 原指向 /health,加鉴权后会一律 401, 导致容器被判定为 unhealthy → 改为 /healthz - Dockerfile 的 HEALTHCHECK 同样指向 /health → 改为 /healthz (这两处若不改,升级后容器健康状态会持续异常,且现象与鉴权改动看起来无关,排查成本高) 新增 docs/RELEASE_NOTES_v0.3.0.md:可直接用于创建 Release, 含 Breaking Change 清单、新特性、验证方式与实测结果、升级步骤。 docs/IMPLEMENT_v0.3.0.md: - 按合并后的阶段编号重写实施进度表与阶段标题 (原「阶段 1 收紧鉴权」与「阶段 2 收口端点」合并为「阶段 1」,后续顺延), 并说明合并原因:两者只做前者是"有风险无收益" - 记录本轮实际验证结果 验证:go build / go vet / go test ./... -count=1 全绿。
46 lines
1.3 KiB
Docker
46 lines
1.3 KiB
Docker
FROM golang:1.26-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
COPY . .
|
|
|
|
# VERSION 由 CI/CD 传入,通常为 `git describe --tags --always --dirty` 的输出
|
|
# COMMIT 为 `git rev-parse --short HEAD`
|
|
# 本地默认 dev
|
|
ARG VERSION=dev
|
|
ARG COMMIT=dev
|
|
RUN CGO_ENABLED=0 GOOS=linux go build \
|
|
-ldflags "-X github.com/volcano-tts/tts-api/version.Version=${VERSION} \
|
|
-X github.com/volcano-tts/tts-api/version.Commit=${COMMIT}" \
|
|
-o tts-api .
|
|
|
|
FROM alpine:3.21
|
|
|
|
RUN apk --no-cache add ca-certificates tzdata \
|
|
&& addgroup -S appgroup && adduser -S appuser -G appgroup
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /app/tts-api .
|
|
# health.html 已通过 //go:embed 嵌入 binary,无需单独复制
|
|
|
|
# 准备 /data 目录存 SQLite (tts.db + installed.lock)
|
|
# appuser 必须可写,否则启动后无法创建 DB
|
|
RUN mkdir -p /data \
|
|
&& chown -R appuser:appgroup /app /data
|
|
|
|
USER appuser
|
|
|
|
EXPOSE 8080
|
|
|
|
# v0.3.0:健康检查必须用 /healthz(匿名存活探针)。
|
|
# /health 现在需要管理凭证,而 HEALTHCHECK 不带 Authorization ——
|
|
# 继续用 /health 会让镜像一直被判定为 unhealthy。
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget -qO- http://localhost:8080/healthz || exit 1
|
|
|
|
ENTRYPOINT ["./tts-api"]
|