Files
Logan.LiandCursor bac72e6945 fix: 按评审报告止血支付漏洞并加固授权链路
废除浏览器回跳自助结算,通用 webhook 强制密钥鉴权,Waffo 支持验签与未知事件忽略;重构订单状态机/激活占座/SQLite WAL,并补备份、readyz、限流与前端导出/登录页安全修复。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 21:26:58 +08:00

67 lines
1.8 KiB
Docker

# opsx-licence — 前端嵌入 Go 单二进制,Docker 部署
# Stage 1: Node 构建 Vue
# Stage 2: Go(+CGO) 嵌入 static 并编译
# Stage 3: 精简运行时
# 署名 Logan.Li
# ==================== Stage 1: Frontend ====================
FROM node:20-bookworm-slim AS frontend-builder
WORKDIR /frontend
ENV NODE_OPTIONS="--max-old-space-size=2048"
RUN npm config set registry https://registry.npmmirror.com
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build
# ==================== Stage 2: Backend ====================
FROM golang:1.25-bookworm AS backend-builder
WORKDIR /src
ENV GOPROXY=https://goproxy.cn,direct
ENV CGO_ENABLED=1
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev \
&& rm -rf /var/lib/apt/lists/*
COPY backend/go.mod backend/go.sum ./
RUN go mod download
COPY backend/ ./
RUN rm -rf static && mkdir -p static
COPY --from=frontend-builder /frontend/dist/. ./static/
RUN go build -trimpath -ldflags="-s -w" -o /out/opsx-licence .
# ==================== Stage 3: Runtime ====================
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates tzdata curl \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --system --uid 10001 --home-dir /app --shell /usr/sbin/nologin opsx
ENV TZ=Asia/Shanghai \
PORT=9001 \
GIN_MODE=release \
DB_DRIVER=sqlite \
DB_NAME=/data/db.sqlite3
WORKDIR /app
COPY --from=backend-builder /out/opsx-licence /app/opsx-licence
RUN mkdir -p /data && chown -R opsx:opsx /app /data
USER opsx
VOLUME ["/data"]
EXPOSE 9001
HEALTHCHECK --interval=15s --timeout=3s --start-period=10s --retries=5 \
CMD curl -fsS "http://127.0.0.1:${PORT}/readyz" || exit 1
ENTRYPOINT ["/app/opsx-licence"]