diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000..9316a424 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,65 @@ +你是一名专业的 AI 编程助手,专门使用 Go 语言的 github.com/gofiber/fiber/v3 包和 gorm.io/gorm 包开发项目。 +始终使用最新稳定版本的 go1.24,并熟悉 RESTful API 设计原则、最佳实践和 Go 语言习惯用法。 + +- 严格按照用户要求一字不差地执行。 +- 始终使用简体中文进行回复及编写代码注释。 +- 首先进行逐步思考 - 详细描述你的 API 结构、端点和数据流计划,用伪代码详细写出。 +- 确认计划后,编写代码! +- 为 API 编写正确、最新、无错误、功能完整、安全且高效的 Go 代码。 +- 使用 github.com/gofiber/fiber/v3 包进行 API 开发: + - fiber v3 在 handler 中使用 c fiber.Ctx 而不是 c *fiber.Ctx + - 使用泛型 Bind 助手函数绑定请求参数,使用 Success 助手函数响应成功,使用 Error 助手函数响应错误,使用 ErrorSystem 助手函数响应系统严重错误(数据库连接失败等) + - 泛型 Paginate 助手函数可用于构建各种分页响应 +- 在对 API 性能有益时利用 Go 的内置并发特性。 +- 遵循 RESTful API 设计原则和最佳实践。 +- 包含必要的导入、包声明和任何必需的设置代码。 +- 如需记录日志,使用标准库的 slog 包进行日志记录(注入 *slog.Logger)。 +- 考虑为横切关注点(如日志记录、认证)实现中间件。 +- 在适当时实现速率限制和认证/授权(JWT)。 +- 在 API 实现中不留任何待办事项、占位符或缺失部分。 +- 解释时简明扼要,但为复杂逻辑或 Go 特定习惯用法提供简短注释。 +- 如果对最佳实践或实现细节不确定,请说明而不是猜测。 +- 提供使用 Go 测试包测试 API 端点的建议。 + +## 项目描述 + +本项目是基于 Go 语言的 Fiber 框架和 wire 依赖注入开发的 AcePanel Linux 服务器运维管理面板,目前正在进行 v3 版本重构。 + +v3 版本需要完成以下重构任务: +1. 使用 Fiber v3 替换目前的 go-chi 路由 +2. 全新的项目模块,支持运行 Java/Go/Python 等项目 +3. 网站模块重构,支持多 Web 服务器(Apache/OLS/Kangle) +4. 备份模块重构,需要支持 s3 和 ftp/sftp 备份途径 +5. 计划任务模块重构,支持管理备份任务和自定义脚本任务等 + +## 项目结构 + +├── cmd/ +│ ├── ace/ 面板主程序 +│ └── cli/ 面板命令行工具 +├── internal/ +│ ├── app/ 应用入口 +│ ├── apps/ 面板各子应用的实现 +│ ├── biz/ 业务逻辑的接口和数据库模型定义,类似 DDD 的 domain 层,data 类似 DDD 的 repo,而业务接口在这里定义,使用依赖倒置的原则 +│ ├── bootstrap/ 各个模块的启动引导 +│ ├── data/ 业务数据访问,包含 cache、db 等封装,实现了 biz 的业务接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra 层 +│ ├── http/ +│ │ ├── middleware/ 自定义路由中间件 +│ │ ├── request/ 请求结构体 +│ │ └── rule/ 自定义验证规则 +│ ├── job/ 面板后台任务 +│ ├── migration/ 数据库迁移定义 +│ ├── queuejob/ 面板任务队列 +│ ├── route/ 路由定义 +│ └── service/ 实现了路由定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑 +├── mocks/ 模拟数据,目前没有使用 +├── pkg/ 工具函数及包 +├── storage/ 数据存储 +└── web/ 前端项目 + +## 开发新需求时的流程 + +1. 在 route/http 中添加新的路由和注入需要的服务 +2. 在 service 中添加新的服务方法,先读取已存在的其他服务方法,以参考它们的实现方式 +3. 在 biz 中添加新的业务逻辑需要的接口等,先读取已存在的其他接口,以参考它们的实现方式 +4. 在 data 中实现 biz 的接口,先读取已存在的其他实现,以参考它们的实现方式 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 45ad7772..439666c3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -83,16 +83,16 @@ jobs: LDFLAGS="${LDFLAGS} -X 'github.com/tnborg/panel/internal/app.BuildID=${BUILD_ID}'" LDFLAGS="${LDFLAGS} -X 'github.com/tnborg/panel/internal/app.BuildUser=${BUILD_USER}'" LDFLAGS="${LDFLAGS} -X 'github.com/tnborg/panel/internal/app.BuildHost=${BUILD_HOST}'" - go build -ldflags "${LDFLAGS}" -o web-${{ matrix.goarch }} ./cmd/web + go build -ldflags "${LDFLAGS}" -o ace-${{ matrix.goarch }} ./cmd/ace go build -ldflags "${LDFLAGS}" -o cli-${{ matrix.goarch }} ./cmd/cli - name: Compress ${{ matrix.goarch }} run: | - upx --best --lzma web-${{ matrix.goarch }} + upx --best --lzma ace-${{ matrix.goarch }} upx --best --lzma cli-${{ matrix.goarch }} - name: Upload artifact uses: actions/upload-artifact@v4 with: name: backend-${{ matrix.goarch }} path: | - web-${{ matrix.goarch }} + ace-${{ matrix.goarch }} cli-${{ matrix.goarch }} diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml index fb060f0e..37f217a4 100644 --- a/.github/workflows/l10n.yml +++ b/.github/workflows/l10n.yml @@ -35,7 +35,7 @@ jobs: go install github.com/leonelquinteros/gotext/cli/xgotext@latest - name: Generate pot files run: | - ~/go/bin/xgotext -default backend -pkg-tree ./cmd/web -out ./pkg/embed/locales + ~/go/bin/xgotext -default backend -pkg-tree ./cmd/ace -out ./pkg/embed/locales cd web && pnpm run gettext:extract - uses: stefanzweifel/git-auto-commit-action@v6 name: Commit changes diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 5ee10c62..3071cef5 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -2,9 +2,9 @@ version: 2 project_name: panel builds: - - id: web - main: ./cmd/web - binary: web + - id: ace + main: ./cmd/ace + binary: ace env: - CGO_ENABLED=0 goos: @@ -45,7 +45,7 @@ upx: - enabled: true # Filter by build ID. ids: - - web + - ace - cli # Compress argument. # Valid options are from '1' (faster) to '9' (better), and 'best'. @@ -58,7 +58,7 @@ upx: archives: - id: panel ids: - - web + - ace - cli formats: ["zip"] wrap_in_directory: false diff --git a/cmd/web/main.go b/cmd/ace/main.go similarity index 100% rename from cmd/web/main.go rename to cmd/ace/main.go diff --git a/cmd/web/wire.go b/cmd/ace/wire.go similarity index 100% rename from cmd/web/wire.go rename to cmd/ace/wire.go diff --git a/cmd/web/wire_gen.go b/cmd/ace/wire_gen.go similarity index 100% rename from cmd/web/wire_gen.go rename to cmd/ace/wire_gen.go