Files
admin f21fa5b5e8 cdrop — 跨 OS 剪贴板与文件传输服务
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)。

本次为公开发布初始提交:完整开发历史(含部署细节)留存于私有归档,公开仓库自此干净起步。
2026-06-15 21:38:28 +08:00

44 lines
1.6 KiB
Docker
Raw Permalink 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.
# 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 阶段跑在宿主原生 archmacOS 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 编译期 envdev 模式 token 必须随 image 烤进 bundleprod 部署留空即可
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"]