款自部署的内容共享工具

📅 2026/6/26 1:14:26
款自部署的内容共享工具
技术栈层技术框架.NET 10 · Blazor Web AppInteractive Server数据库SQLiteEF Core实时通信ASP.NET Core SignalR样式Tailwind CSS v4认证JWT Bearer Cookie容器Docker / Docker Compose快速开始服务端方式一Docker Compose推荐1. 克隆仓库git clone https://github.com/KOPElan/anydrop.git cd anydrop2. 创建环境变量文件cp .env.example .env # 若不存在则手动创建.env文件内容示例# 必填JWT 签名密钥建议 32 位以上随机字符串 ANYDROP_JWT_SECRETyour-very-long-random-secret-key # 可选上传文件大小上限字节默认 100 MB ANYDROP_MAX_FILE_SIZE104857600 # 可选登录令牌有效期小时默认 24 小时 ANYDROP_TOKEN_EXPIRY_HOURS243. 启动服务docker compose up -d如果要更新服务请使用build命令git pull docker compose down docker compose up -d --build4. 初始化账号首次启动后在浏览器访问http://localhost:8080/setup设置登录密码。数据SQLite 数据库 上传文件持久化到 Docker volumeanydrop-data容器重启不会丢失。方式二本地源码运行前置要求.NET 10 SDKNode.js ≥ 20用于 Tailwind CSS 编译步骤# 1. 克隆仓库 git clone https://github.com/KOPElan/anydrop.git cd anydrop # 2. 安装前端依赖Tailwind CSS npm install # 3. 配置 JWT 密钥推荐使用 .NET User Secrets避免提交密钥到版本库 cd AnyDrop dotnet user-secrets set Auth:JwtSecret your-very-long-random-secret-key cd .. # 4. 启动应用 dotnet run --project AnyDrop应用默认监听http://localhost:5002。首次运行请访问http://localhost:5002/setup完成初始化。目录结构详解AnyDrop/: 服务端主项目包含 Minimal API、SignalR Hub、EF Core 上下文与前端静态资源。Api/: Minimal API 扩展方法与请求 DTO按资源分文件组织路由前缀/api/v1/。Components/: Blazor 组件与页面Interactive Server 模式。Razor 组件应尽量使用 code-behind.razor.cs分离复杂逻辑。Data/: 包含AnyDropDbContext.cs与数据库迁移文件SQLite。Hubs/: SignalR HubShareHub用于实时推送消息到已连接的客户端。Services/: 核心业务实现接口 实现禁止直接依赖 Razor 组件。wwwroot/: Tailwind 编译后样式、JS 及其它静态资源。AnyDrop.App/: 跨平台移动/桌面客户端MAUI用于在手机/桌面上接入 AnyDrop 服务并同步内容。MAUI 项目使用net10目标框架平台代码放在Platforms/UI 放在UI/与Components/。AnyDrop.Shared/: 跨项目共享 DTO 与类型定义。Tests.Unit/与Tests.E2E/: 单元与端到端测试代码。服务端简介框架与角色: 服务端为AnyDrop项目基于 .NET 10、Minimal API 与 Kestrel。API 路由以/api/v1/命名空间暴露认证采用 JWT Cookie 混合方案。持久化: 使用 SQLite文件存储默认数据目录为data/包含数据库文件与上传的文件目录。实时同步: 通过 SignalR HubHubs/ShareHub.cs实现消息广播与客户端订阅。Hub 只负责转发与鉴权业务逻辑放在Services/中处理。配置: 推荐通过环境变量或dotnet user-secrets设置敏感配置如Auth__JwtSecret。容器部署时通过.env或容器环境变量注入。移动端MAUI简介项目:AnyDrop.App为 MAUI 应用支持 Android、iOS、Windows 等按平台包含在Platforms/。目的: 提供原生体验的接入端可在移动端快速浏览、上传与接收任意类型内容并通过 SignalR 保持实时连接。开发: 在本机开发时可在 IDEVisual Studio中启动AnyDrop.App或使用dotnet build/dotnet run针对特定平台进行调试。移动端通过配置的 API 地址与服务端通信开发时请确保服务端可访问ASPNETCORE_URLS设置为可被设备/模拟器访问的地址。Tailwind 开发监听项目包含两个 Tailwind 输入源服务端Blazor:AnyDrop/wwwroot/app.css→ 输出AnyDrop/wwwroot/tailwind.css。移动端/静态MAUI/SPA:AnyDrop.App/wwwroot/css/input.css→ 输出AnyDrop.App/wwwroot/css/tailwind.css。分别构建或监听方式如下# 服务端构建 / 监听 npm run css:build:server npm run css:watch:server # 移动端构建 / 监听 npm run css:build:app npm run css:watch:app环境变量参考变量名说明默认值Auth__JwtSecretJWT 签名密钥必填—Auth__TokenExpiryHours登录令牌有效期小时24Auth__LoginMaxFailures登录失败锁定阈值5Auth__LoginCooldownSeconds登录冷却时间秒60Storage__DatabasePathSQLite 数据库路径data/anydrop.dbStorage__BasePath上传文件存储目录data/filesStorage__MaxFileSizeBytes单文件大小上限字节104857600100 MBASPNETCORE_URLSKestrel 监听地址http://:5002容器内为http://:8080数据备份持久化数据存放在 Docker volumeanydrop-data挂载到容器的/data包含/data/anydrop.db— SQLite 数据库用户、主题、消息元数据/data/files/— 上传的文件备份示例docker run --rm \ -v anydrop-data:/data:ro \ -v $(pwd)/backup:/backup \ alpine tar czf /backup/anydrop-backup-$(date %Y%m%d).tar.gz /data开发指南运行测试# 单元测试 dotnet test AnyDrop.Tests.Unit # E2E 测试需先启动应用