c9a4404052
- 公开前端 SPA(根路径 /):首页大搜索框、检索结果、只读商品详情、贡献档案表单 - 公开写入端点 POST /api/public/submissions(无需登录,基础频率限流),投稿进入 submission 待审核队列,不直接写 product - 迁移 0006:submission 投稿表 + community 来源(trust=0.50) - 后台审核队列:列表(待审核/已通过/已驳回) → 查看投稿 → 通过(创建/补全商品 + 记 source=community + 字段级溯源 + 审计 + 重算质量分) / 驳回(记原因) - 公开只读 api 服务内嵌公开 SPA;Dockerfile.prod 增加 node 构建阶段 + 内嵌 dist Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
32 lines
1.1 KiB
Docker
32 lines
1.1 KiB
Docker
# Public API image: builds the public SPA (homepage + search + contribute),
|
|
# embeds it into the Go read-only server binary, and ships a static scratch
|
|
# runtime (used where gcr.io/distroless is not reachable). Build context is the
|
|
# repo root.
|
|
|
|
# Stage 1: build the public SPA.
|
|
FROM node:22-alpine AS web
|
|
WORKDIR /web
|
|
ENV npm_config_registry=https://registry.npmmirror.com
|
|
COPY public-frontend/package.json public-frontend/package-lock.json* ./
|
|
RUN npm ci || npm install
|
|
COPY public-frontend/ ./
|
|
RUN npm run build
|
|
|
|
# Stage 2: build the Go server binary with the SPA embedded.
|
|
FROM golang:1.23-alpine AS build
|
|
ENV GOPROXY=https://goproxy.cn,direct
|
|
WORKDIR /src
|
|
COPY api/go.mod api/go.sum ./
|
|
RUN go mod download
|
|
COPY api/ ./
|
|
RUN rm -rf internal/publicweb/dist && mkdir -p internal/publicweb/dist
|
|
COPY --from=web /web/dist/ internal/publicweb/dist/
|
|
RUN CGO_ENABLED=0 go build -o /out/server ./cmd/server
|
|
|
|
# Stage 3: minimal runtime.
|
|
FROM scratch
|
|
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
|
COPY --from=build /out/server /server
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["/server"]
|