f21fa5b5e8
Commilitia Drop:自托管的跨设备剪贴板同步与点对点文件传输。 - 后端 Go(chi / SQLite WAL / SSE Hub / WebRTC signaling + 状态机 / Relay ring buffer),编译进单个 distroless 镜像(前端 go:embed)。 - 前端 React + TanStack Router + Zustand,自实现 SSE + WebRTC P2P,NAT 受阻时回退服务端中继;聚珍(Juzhen)CJK 综合排版。 - 桌面端 Wails v2(macOS / Windows),瘦客户端复用 web。 - 鉴权 OIDC PKCE(自建 Casdoor 等),refresh_token 信封加密存系统密钥库;iOS Shortcut 用 HS256 scoped token。 架构文档与变更记录见 docs 分支(PROJECT_BRIEF / FRONTEND_DESIGN / CHANGELOG)。 本次为公开发布初始提交:完整开发历史(含部署细节)留存于私有归档,公开仓库自此干净起步。
44 lines
1.6 KiB
Docker
44 lines
1.6 KiB
Docker
# syntax=docker/dockerfile:1.7
|
||
#
|
||
# cdrop:latest —— 应用镜像。基础环境(Go 工具链 + node_modules + go modules)
|
||
# 已被 cdrop-base:latest 预热(见 docker/Dockerfile.base),这里只做源码层与
|
||
# 跨编译。
|
||
#
|
||
# 构建(部署平台为 linux/amd64):
|
||
# docker buildx build --platform linux/amd64 \
|
||
# -f docker/Dockerfile -t cdrop:latest --load .
|
||
#
|
||
# BUILDPLATFORM 让 build 阶段跑在宿主原生 arch(macOS arm64),跨编译产出
|
||
# linux/amd64 的 Go 二进制;最终 runtime FROM distroless 是 linux/amd64
|
||
# 但只有 COPY 一层,不经过 qemu 执行任何 amd64 程序。
|
||
|
||
# ---- build (uses cached base) ----
|
||
FROM --platform=$BUILDPLATFORM cdrop-base:latest AS build
|
||
ARG TARGETOS=linux TARGETARCH=amd64
|
||
# Vite 编译期 env:dev 模式 token 必须随 image 烤进 bundle;prod 部署留空即可
|
||
ARG VITE_CDROP_DEV_TOKEN=""
|
||
ARG VITE_CDROP_STUN_URLS=""
|
||
ENV VITE_CDROP_DEV_TOKEN=$VITE_CDROP_DEV_TOKEN \
|
||
VITE_CDROP_STUN_URLS=$VITE_CDROP_STUN_URLS
|
||
WORKDIR /src
|
||
|
||
# 复制源码(依赖在 base 中已就位)
|
||
COPY . .
|
||
|
||
# 前端构建(VITE_* 环境变量已 export)
|
||
RUN cd web && npm run build
|
||
|
||
# 嵌入到 internal/webui/dist 让 //go:embed 拿到
|
||
RUN rm -rf ./internal/webui/dist && cp -a web/dist ./internal/webui/dist
|
||
|
||
# 跨编译 Go 到目标平台
|
||
RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 \
|
||
go build -trimpath -ldflags="-s -w" -o /out/cdropd ./cmd/cdropd
|
||
|
||
# ---- runtime (linux/amd64 distroless) ----
|
||
FROM gcr.io/distroless/static-debian12:nonroot
|
||
COPY --from=build /out/cdropd /cdropd
|
||
USER nonroot:nonroot
|
||
EXPOSE 8080
|
||
ENTRYPOINT ["/cdropd"]
|