废除浏览器回跳自助结算,通用 webhook 强制密钥鉴权,Waffo 支持验签与未知事件忽略;重构订单状态机/激活占座/SQLite WAL,并补备份、readyz、限流与前端导出/登录页安全修复。 Co-authored-by: Cursor <cursoragent@cursor.com>
67 lines
1.8 KiB
Docker
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"]
|