Files
FileShare/deploy/Dockerfile
T
SKYMirror 9686fe887a FileCodeBox Go 重写版 v2.5.6(安全审计修复版)
Go 1.27.1 (Gin+GORM) + Vue 3 文件快传服务:

- 安全审计全部修复(docs/security-audit-2026-09-05.md):
  bcrypt 密码哈希与自动升级、presign 直传服务端大小/内容校验、
  全局请求体上限、依赖升级(govulncheck 0 命中)、janitor 后台清理、
  管理端审计动作落库、/admin CORS 收紧、通知内容白名单净化、
  会话默认 7 天、限流缓存故障降级、robots.txt 端点等
- 前端:取件链接复制修复(不再重复拼接提取码)、markdown 净化器加固
- Redis 支持库号(FCB_REDIS_DB / redis://…/db URL)
- 文档:docs/api/* 与 openapi.yaml 同步最新行为(robots.txt、
  提码 5 位起、chunk 32MiB 上限、admin 审计动作等)

验证:gofmt/go vet/go test 全绿;二进制端到端冒烟通过
2026-09-05 04:22:41 +08:00

46 lines
1.9 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 文件快传 Go 版多阶段构建:
# 1) node:20-alpine 构建 Vue 前端产物(web/dist
# 2) golang:1.27.1-alpine 编译 servergo:embed 前端产物,缓存指向 /tmp 避免写权限问题)
# 3) 最小运行时镜像:server 二进制 + web/dist 静态产物
FROM node:20-alpine AS frontend
WORKDIR /build
COPY web/package.json web/package-lock.json* ./
RUN npm ci || npm install
COPY web/ ./
RUN npm run build
FROM golang:1.27.1-alpine AS backend
WORKDIR /build
# GOPROXY:默认走 goproxy.cnproxy.golang.org 的 GCS 后端在本环境网络下 EOF/超时),direct 兜底
ENV CGO_ENABLED=0 GOSUMDB=off GOPROXY=https://goproxy.cn,direct GOCACHE=/tmp/.gocache GOMODCACHE=/tmp/.gomodcache
# 先拷贝 go.mod/go.sum 利用层缓存
COPY server/go.mod server/go.sum ./
RUN go mod download
COPY server/ ./
# 前端产物嵌入(go:embed 目标目录 server/web/dist):
# 优先用宿主预构建产物 web-embed/(构建前由 `cp -a web/dist web-embed/` 维护,
# 保证 embed 与前端最新修正一致);为空/缺失时回退跨阶段 COPY(CI 兜底)
COPY --from=frontend /build/dist ./frontend-dist
COPY web-embed/ ./web-embed/
RUN if [ -f web-embed/index.html ]; then \
rm -rf web/dist && cp -a web-embed/. web/dist/; \
else \
rm -rf web/dist && cp -a frontend-dist/. web/dist/; \
fi \
&& rm -rf web-embed frontend-dist
RUN go build -trimpath -ldflags "-s -w" -o /out/server ./cmd/server
FROM alpine:3.20
# curl 供容器健康检查使用
RUN apk add --no-cache ca-certificates tzdata curl && adduser -D -u 10001 fcb
WORKDIR /app
COPY --from=backend /out/server /app/server
# dist 随镜像分发(服务端已 go:embed,磁盘副本供运维检查/替换)
COPY --from=backend /build/web/dist /app/web/dist
RUN mkdir -p /app/data && chown -R fcb:fcb /app
USER fcb
ENV FCB_LISTEN=:8466
EXPOSE 8466
VOLUME ["/app/data"]
ENTRYPOINT ["/app/server"]