Files
EveryPublish/docs/tech-stack.md
T

48 lines
2.2 KiB
Markdown
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.
# EveryPublish 技术栈定版(唯一权威来源)
> 2026-08-20 · 其他文档中与本文件冲突之处,以本文件为准。
## 1. 总览
| 端 | 层 | 技术 |
|---|---|---|
| 网页端 | 页面(UI) | React 18 + TypeScript + TDesign React(Tencent starter,MIT,已拉取 apps/web) |
| 网页端 | 服务端/API | **Go**:gin + coder/websocket + asynq + GORM + argon2 |
| 客户端 | UI 壳 | WinUI 3(C# / .NET 8) |
| 客户端 | 核心 | **Go**:WSS 客户端 + go-rod(CDP)+ 凭据保险库 |
| 数据 | 数据库 | **MySQL 8.x**(GORM + go-sql-driver/mysql;迁移 golang-migrate) |
| 数据 | 队列/缓存 | Redis 7(asynq) |
| 存储 | 一期 | 服务器本地盘(签名直链下载) |
| 存储 | 二期 | OSS 双桶(StorageDriver 抽象预留) |
## 2. 「网页端与后端都用 Go」的说明
- **页面层仍是 React + TDesign**(starter 已拉取预览,MIT 可商用),不写自定义样式。
- 「用 Go」指两处:**网页端的服务端/API 层** 与 **客户端 agent-core**,统一 Go 语言。
- 二者共享同一协议 Go module(server 与 agent-core 引用同一 shared/proto 包),消息 Schema 只写一次。
## 3. Go 选型明细
- Web 框架:gin
- WebSocket:github.com/coder/websocket(原生 JSON 协议,不用 Socket.IO)
- 任务队列:asynq(Redis)
- ORM/DB:GORM + go-sql-driver/mysql(MySQL 8.x);迁移 golang-migrate
- 鉴权:golang-jwt + x/crypto/argon2(用户);Ed25519 设备签名(Agent)
- 浏览器自动化(客户端):go-rod + rod-stealth,驱动系统 Chrome/Edge
- 常驻服务(二期):kardianos/service
## 4. 目录结构(monorepo)
- web/ —— React 前端(现有 apps/web 的 starter)
- server/ —— Go 服务器(REST + WSS 网关 + 队列 worker)
- client/ui —— WinUI 3 壳(C#)
- client/core —— agent-core(Go)
- shared/ —— 协议 Go module(server 与 core 共用)
- tools/ —— 联调诊断(diag-connection.mjs 等)
## 5. 版本与工具
- Go 1.23+;Node 20 LTS(前端,starter 依赖升级见交付文档 D1);.NET 8;MySQL 8.x;Redis 7
- 包管理:pnpm(前端)、go mod(后端)
- CI:GitHub Actions(前端构建 / Go 单测 / WinUI 打包)