This commit is contained in:
2026-06-24 10:04:03 +08:00
parent b103192fac
commit 0f961789dc
538 changed files with 128210 additions and 128008 deletions
+70 -70
View File
@@ -1,70 +1,70 @@
# Go后端项目文档
## 📚 文档目录
### 开发文档
- [后端开发规则](./后端开发规则.md)
- [接口文件](./接口文件.md)
- [服务端启动命令](./服务端启动命令.md)
- [大文件上传配置](./大文件上传配置.md) - 文件上传限制和超时配置
### 存储配置功能文档
- [📖 快速开始](./QUICK_START.md) - 5分钟快速上手
- [📘 完整实现说明](./README_STORAGE.md) - 功能概述和使用指南
- [📗 详细使用指南](./storage-config-guide.md) - 深入的配置和使用说明
- [✅ 部署检查清单](./DEPLOYMENT_CHECKLIST.md) - 生产环境部署指南
- [🎉 实现报告](./IMPLEMENTATION_COMPLETE.md) - 完整的实现细节
### 数据库文档
- [SQL迁移脚本](./sql/) - 数据库迁移文件
## 🚀 快速导航
### 新手入门
1. 阅读 [快速开始](./QUICK_START.md)
2. 查看 [服务端启动命令](./服务端启动命令.md)
3. 了解 [后端开发规则](./后端开发规则.md)
### 存储功能使用
1. [快速开始](./QUICK_START.md) - 快速配置存储
2. [完整实现说明](./README_STORAGE.md) - 了解核心功能
3. [详细使用指南](./storage-config-guide.md) - 深入学习
### 生产部署
1. [部署检查清单](./DEPLOYMENT_CHECKLIST.md) - 按清单逐项检查
2. [实现报告](./IMPLEMENTATION_COMPLETE.md) - 了解技术细节
## 📂 项目结构
```
go/
├── controllers/ # 控制器层
├── models/ # 数据模型层
├── services/ # 业务服务层
├── routers/ # 路由配置
├── pkg/ # 公共包
├── conf/ # 配置文件
├── migrations/ # 数据库迁移
├── scripts/ # 脚本工具
└── docs/ # 文档(本目录)
```
## 🔗 相关链接
- [Beego框架文档](https://beego.vip/)
- [七牛云开发文档](https://developer.qiniu.com/)
- [Go语言官方文档](https://golang.org/doc/)
## 📝 更新日志
### 2026-04-09
- ✅ 增加大文件上传支持(最大 2GB)
- ✅ 移除服务器超时限制
- ✅ 优化 CORS 配置
- ✅ 完善文件上传文档
### 2024-01-01
- ✅ 完成存储配置功能
- ✅ 支持本地存储和七牛云存储
- ✅ 实现文件迁移功能
- ✅ 完善文档体系
# Go后端项目文档
## 📚 文档目录
### 开发文档
- [后端开发规则](./后端开发规则.md)
- [接口文件](./接口文件.md)
- [服务端启动命令](./服务端启动命令.md)
- [大文件上传配置](./大文件上传配置.md) - 文件上传限制和超时配置
### 存储配置功能文档
- [📖 快速开始](./QUICK_START.md) - 5分钟快速上手
- [📘 完整实现说明](./README_STORAGE.md) - 功能概述和使用指南
- [📗 详细使用指南](./storage-config-guide.md) - 深入的配置和使用说明
- [✅ 部署检查清单](./DEPLOYMENT_CHECKLIST.md) - 生产环境部署指南
- [🎉 实现报告](./IMPLEMENTATION_COMPLETE.md) - 完整的实现细节
### 数据库文档
- [SQL迁移脚本](./sql/) - 数据库迁移文件
## 🚀 快速导航
### 新手入门
1. 阅读 [快速开始](./QUICK_START.md)
2. 查看 [服务端启动命令](./服务端启动命令.md)
3. 了解 [后端开发规则](./后端开发规则.md)
### 存储功能使用
1. [快速开始](./QUICK_START.md) - 快速配置存储
2. [完整实现说明](./README_STORAGE.md) - 了解核心功能
3. [详细使用指南](./storage-config-guide.md) - 深入学习
### 生产部署
1. [部署检查清单](./DEPLOYMENT_CHECKLIST.md) - 按清单逐项检查
2. [实现报告](./IMPLEMENTATION_COMPLETE.md) - 了解技术细节
## 📂 项目结构
```
go/
├── controllers/ # 控制器层
├── models/ # 数据模型层
├── services/ # 业务服务层
├── routers/ # 路由配置
├── pkg/ # 公共包
├── conf/ # 配置文件
├── migrations/ # 数据库迁移
├── scripts/ # 脚本工具
└── docs/ # 文档(本目录)
```
## 🔗 相关链接
- [Beego框架文档](https://beego.vip/)
- [七牛云开发文档](https://developer.qiniu.com/)
- [Go语言官方文档](https://golang.org/doc/)
## 📝 更新日志
### 2026-04-09
- ✅ 增加大文件上传支持(最大 2GB)
- ✅ 移除服务器超时限制
- ✅ 优化 CORS 配置
- ✅ 完善文件上传文档
### 2024-01-01
- ✅ 完成存储配置功能
- ✅ 支持本地存储和七牛云存储
- ✅ 实现文件迁移功能
- ✅ 完善文档体系
+18 -18
View File
@@ -1,18 +1,18 @@
-- 创建存储配置表
CREATE TABLE IF NOT EXISTS `yz_system_storage_config` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`storage_type` varchar(20) NOT NULL DEFAULT 'local' COMMENT '存储类型: local-本地存储, qiniu-七牛云',
`qiniu_access_key` varchar(255) DEFAULT NULL COMMENT '七牛云AccessKey',
`qiniu_secret_key` varchar(255) DEFAULT NULL COMMENT '七牛云SecretKey',
`qiniu_bucket` varchar(128) DEFAULT NULL COMMENT '七牛云Bucket名称',
`qiniu_domain` varchar(255) DEFAULT NULL COMMENT '七牛云CDN域名',
`qiniu_region` varchar(50) DEFAULT NULL COMMENT '七牛云存储区域',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统存储配置表';
-- 插入默认配置(本地存储)
INSERT INTO `yz_system_storage_config` (`storage_type`, `create_time`)
VALUES ('local', NOW())
ON DUPLICATE KEY UPDATE `storage_type` = 'local';
-- 创建存储配置表
CREATE TABLE IF NOT EXISTS `yz_system_storage_config` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`storage_type` varchar(20) NOT NULL DEFAULT 'local' COMMENT '存储类型: local-本地存储, qiniu-七牛云',
`qiniu_access_key` varchar(255) DEFAULT NULL COMMENT '七牛云AccessKey',
`qiniu_secret_key` varchar(255) DEFAULT NULL COMMENT '七牛云SecretKey',
`qiniu_bucket` varchar(128) DEFAULT NULL COMMENT '七牛云Bucket名称',
`qiniu_domain` varchar(255) DEFAULT NULL COMMENT '七牛云CDN域名',
`qiniu_region` varchar(50) DEFAULT NULL COMMENT '七牛云存储区域',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统存储配置表';
-- 插入默认配置(本地存储)
INSERT INTO `yz_system_storage_config` (`storage_type`, `create_time`)
VALUES ('local', NOW())
ON DUPLICATE KEY UPDATE `storage_type` = 'local';
+45 -45
View File
@@ -1,45 +1,45 @@
-- 投诉建议「产品分类」:区分用户针对哪类产品提建议
-- 请在目标库手动执行(utf8mb4)
CREATE TABLE IF NOT EXISTS `yz_system_complaint_category` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '分类名称,如:官网、租户后台、小程序',
`code` varchar(32) DEFAULT NULL COMMENT '可选编码,便于程序识别',
`sort` int NOT NULL DEFAULT 0 COMMENT '排序,越小越靠前',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL COMMENT '软删',
PRIMARY KEY (`id`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='投诉建议-产品分类';
CREATE TABLE IF NOT EXISTS `yz_system_platform_complaint` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`category_id` bigint unsigned NOT NULL COMMENT '产品分类ID',
`title` varchar(200) NOT NULL COMMENT '标题',
`content` text NOT NULL COMMENT '建议/投诉内容',
`contact_name` varchar(64) DEFAULT NULL COMMENT '联系人',
`contact_phone` varchar(32) DEFAULT NULL COMMENT '联系电话',
`contact_email` varchar(128) DEFAULT NULL COMMENT '联系邮箱',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待处理 1处理中 2已回复 3已关闭',
`reply_content` text COMMENT '平台回复内容',
`reply_time` datetime DEFAULT NULL COMMENT '回复时间',
`tid` bigint unsigned DEFAULT NULL COMMENT '可选:关联租户ID',
`remark` varchar(512) DEFAULT NULL COMMENT '管理员内部备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL COMMENT '软删',
PRIMARY KEY (`id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_tid` (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台端-投诉建议';
-- 可选:示例分类(执行完建表后按需取消注释)
-- INSERT INTO `yz_system_complaint_category` (`name`,`code`,`sort`,`status`) VALUES
-- ('官网','site',0,1),
-- ('租户后台','tenant_admin',10,1),
-- ('小程序','miniapp',20,1);
-- 投诉建议「产品分类」:区分用户针对哪类产品提建议
-- 请在目标库手动执行(utf8mb4)
CREATE TABLE IF NOT EXISTS `yz_system_complaint_category` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '分类名称,如:官网、租户后台、小程序',
`code` varchar(32) DEFAULT NULL COMMENT '可选编码,便于程序识别',
`sort` int NOT NULL DEFAULT 0 COMMENT '排序,越小越靠前',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL COMMENT '软删',
PRIMARY KEY (`id`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='投诉建议-产品分类';
CREATE TABLE IF NOT EXISTS `yz_system_platform_complaint` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`category_id` bigint unsigned NOT NULL COMMENT '产品分类ID',
`title` varchar(200) NOT NULL COMMENT '标题',
`content` text NOT NULL COMMENT '建议/投诉内容',
`contact_name` varchar(64) DEFAULT NULL COMMENT '联系人',
`contact_phone` varchar(32) DEFAULT NULL COMMENT '联系电话',
`contact_email` varchar(128) DEFAULT NULL COMMENT '联系邮箱',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待处理 1处理中 2已回复 3已关闭',
`reply_content` text COMMENT '平台回复内容',
`reply_time` datetime DEFAULT NULL COMMENT '回复时间',
`tid` bigint unsigned DEFAULT NULL COMMENT '可选:关联租户ID',
`remark` varchar(512) DEFAULT NULL COMMENT '管理员内部备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL COMMENT '软删',
PRIMARY KEY (`id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_tid` (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台端-投诉建议';
-- 可选:示例分类(执行完建表后按需取消注释)
-- INSERT INTO `yz_system_complaint_category` (`name`,`code`,`sort`,`status`) VALUES
-- ('官网','site',0,1),
-- ('租户后台','tenant_admin',10,1),
-- ('小程序','miniapp',20,1);
@@ -1,31 +1,31 @@
-- Cursor 激活码管理
-- status: 0 未使用 1 已使用 2 已过期 3 已禁用
-- type: 0 自定义 1 天卡 7 周卡 30 月卡 90 季卡 365 年卡
CREATE TABLE IF NOT EXISTS `yz_platform_cursor_activation_code` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` varchar(128) NOT NULL COMMENT '激活码',
`type` int NOT NULL DEFAULT 30 COMMENT '卡密类型:0自定义 1天卡 7周卡 30月卡 90季卡 365年卡',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0未使用 1已使用 2已过期 3已禁用',
`duration_days` int NOT NULL DEFAULT 30 COMMENT '有效天数',
`bind_account` varchar(128) DEFAULT NULL COMMENT '绑定账号',
`bind_device_id` bigint unsigned DEFAULT NULL COMMENT '绑定设备ID,关联 yz_platform_cursor_equipment.id',
`machine_code` varchar(128) DEFAULT NULL COMMENT '绑定设备机器码',
`device_info` varchar(1000) DEFAULT NULL COMMENT '绑定设备信息',
`owner_user_id` bigint unsigned DEFAULT NULL COMMENT '归属用户ID',
`owner_user_name` varchar(128) DEFAULT NULL COMMENT '归属用户名称',
`activated_at` datetime DEFAULT NULL COMMENT '激活时间',
`expired_at` datetime DEFAULT NULL COMMENT '过期时间',
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_status_delete` (`status`,`delete_time`),
KEY `idx_type_status` (`type`,`status`),
KEY `idx_bind_account` (`bind_account`),
KEY `idx_bind_device_id` (`bind_device_id`),
KEY `idx_owner_user_id` (`owner_user_id`),
KEY `idx_expired_at` (`expired_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cursor续杯激活码';
-- Cursor 激活码管理
-- status: 0 未使用 1 已使用 2 已过期 3 已禁用
-- type: 0 自定义 1 天卡 7 周卡 30 月卡 90 季卡 365 年卡
CREATE TABLE IF NOT EXISTS `yz_platform_cursor_activation_code` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` varchar(128) NOT NULL COMMENT '激活码',
`type` int NOT NULL DEFAULT 30 COMMENT '卡密类型:0自定义 1天卡 7周卡 30月卡 90季卡 365年卡',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0未使用 1已使用 2已过期 3已禁用',
`duration_days` int NOT NULL DEFAULT 30 COMMENT '有效天数',
`bind_account` varchar(128) DEFAULT NULL COMMENT '绑定账号',
`bind_device_id` bigint unsigned DEFAULT NULL COMMENT '绑定设备ID,关联 yz_platform_cursor_equipment.id',
`machine_code` varchar(128) DEFAULT NULL COMMENT '绑定设备机器码',
`device_info` varchar(1000) DEFAULT NULL COMMENT '绑定设备信息',
`owner_user_id` bigint unsigned DEFAULT NULL COMMENT '归属用户ID',
`owner_user_name` varchar(128) DEFAULT NULL COMMENT '归属用户名称',
`activated_at` datetime DEFAULT NULL COMMENT '激活时间',
`expired_at` datetime DEFAULT NULL COMMENT '过期时间',
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_status_delete` (`status`,`delete_time`),
KEY `idx_type_status` (`type`,`status`),
KEY `idx_bind_account` (`bind_account`),
KEY `idx_bind_device_id` (`bind_device_id`),
KEY `idx_owner_user_id` (`owner_user_id`),
KEY `idx_expired_at` (`expired_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cursor续杯激活码';
+26 -21
View File
@@ -1,21 +1,26 @@
-- 软件升级产品(客户端拉取版本与下载地址)
-- 安装包建议上传到文件管理,分类使用「appsupgrade」(或任意分类,记录 file_id 即可)
CREATE TABLE IF NOT EXISTS `yz_system_software_upgrade` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL COMMENT '软件显示名称',
`code` varchar(64) NOT NULL COMMENT '客户端唯一标识,与 check 接口 code 一致',
`latest_version` varchar(32) NOT NULL DEFAULT '0.0.0' COMMENT '当前发布的最新版本号',
`file_id` bigint unsigned DEFAULT NULL COMMENT '关联 yz_system_files.id,安装包',
`download_url` varchar(512) DEFAULT NULL COMMENT '完整下载地址;为空则用 file_id 对应 src 拼公开 URL',
`force_update` tinyint NOT NULL DEFAULT 0 COMMENT '1 建议强制更新',
`release_notes` varchar(2000) DEFAULT NULL COMMENT '更新说明',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1 启用 0 停用',
`sort` int NOT NULL DEFAULT 0,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_status_delete` (`status`,`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='软件升级产品';
-- 软件升级产品(客户端拉取版本与下载地址)
-- 安装包建议上传到文件管理,分类使用「appsupgrade」(或任意分类,记录 file_id 即可)
CREATE TABLE IF NOT EXISTS `yz_system_software_upgrade` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL COMMENT '软件显示名称',
`code` varchar(64) NOT NULL COMMENT '客户端唯一标识,与 check 接口 code 一致',
`latest_version` varchar(32) NOT NULL DEFAULT '0.0.0' COMMENT '当前发布的最新版本号',
`file_id` bigint unsigned DEFAULT NULL COMMENT '关联 yz_system_files.id,安装包',
`download_url` varchar(512) DEFAULT NULL COMMENT '兼容旧客户端的单安装包地址;为空则用 file_id 对应 src 拼公开 URL',
`download_urls` text DEFAULT NULL COMMENT '多运行环境安装包地址 JSON,如 {"windows":"...","mac":"...","ubuntu":"...","linux":"..."}',
`force_update` tinyint NOT NULL DEFAULT 0 COMMENT '1 建议强制更新',
`release_notes` varchar(2000) DEFAULT NULL COMMENT '更新说明',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1 启用 0 停用',
`sort` int NOT NULL DEFAULT 0,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_status_delete` (`status`,`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='软件升级产品';
-- 已有表升级:
-- ALTER TABLE `yz_system_software_upgrade`
-- ADD COLUMN `download_urls` text DEFAULT NULL COMMENT '多运行环境安装包地址 JSON,如 {"windows":"...","mac":"...","ubuntu":"...","linux":"..."}' AFTER `download_url`;
+42 -42
View File
@@ -1,43 +1,43 @@
go/
├── models/ # 仅负责数据模型相关
│ ├── 结构体(struct)定义
│ ├── 字段标签与表名(TableName)
│ └── 数据库初始化(注册模型、连接数据库)
├── services/ # 核心业务逻辑层
│ ├── 所有业务处理方法(含CRUD)
│ ├── 模型数据校验
│ ├── 密码等安全相关加解密
│ └── 与 models 层的数据库操作
└── controllers/ # 控制器层,专注 HTTP
├── 请求参数解析
├── 参数有效性验证
├── 调用 services 处理业务
└── 响应数据统一格式化与错误处理
## 分层架构开发规范
### Models 层
- 只负责定义数据库结构和初始化,包含结构体、字段标签与表名映射,数据库注册与连接。
- 不允许包含任何业务逻辑、数据校验、密码处理或和 HTTP 相关的代码。
### Services 层
- 实现所有业务流程、数据访问、校验和跨模型业务逻辑。
- 通过 models 操作数据库,仅返回 struct 或错误。
- 实现数据校验、密码加密等业务需求;不直接处理 HTTP 请求或响应。
### Controllers 层
- 只负责接收和解析 HTTP 请求,进行参数校验。
- 调用 services 执行业务逻辑。
- 负责返回统一格式的响应结果,对业务错误进行捕获和转义为 HTTP 状态码和消息。
### 其它要求
- 各层代码职责单一,禁止跨层调用(如 controllers 直接操作 models)。
- 统一异常处理,业务错误只在 services 返回,controllers 负责转换为 HTTP 响应。
- 保持 controller 轻量简洁,绝不包含业务处理逻辑。
- services 层所有数据变更、校验等均可单元测试。
- models 变动需清晰文档和数据库迁移脚本。
go/
├── models/ # 仅负责数据模型相关
│ ├── 结构体(struct)定义
│ ├── 字段标签与表名(TableName)
│ └── 数据库初始化(注册模型、连接数据库)
├── services/ # 核心业务逻辑层
│ ├── 所有业务处理方法(含CRUD)
│ ├── 模型数据校验
│ ├── 密码等安全相关加解密
│ └── 与 models 层的数据库操作
└── controllers/ # 控制器层,专注 HTTP
├── 请求参数解析
├── 参数有效性验证
├── 调用 services 处理业务
└── 响应数据统一格式化与错误处理
## 分层架构开发规范
### Models 层
- 只负责定义数据库结构和初始化,包含结构体、字段标签与表名映射,数据库注册与连接。
- 不允许包含任何业务逻辑、数据校验、密码处理或和 HTTP 相关的代码。
### Services 层
- 实现所有业务流程、数据访问、校验和跨模型业务逻辑。
- 通过 models 操作数据库,仅返回 struct 或错误。
- 实现数据校验、密码加密等业务需求;不直接处理 HTTP 请求或响应。
### Controllers 层
- 只负责接收和解析 HTTP 请求,进行参数校验。
- 调用 services 执行业务逻辑。
- 负责返回统一格式的响应结果,对业务错误进行捕获和转义为 HTTP 状态码和消息。
### 其它要求
- 各层代码职责单一,禁止跨层调用(如 controllers 直接操作 models)。
- 统一异常处理,业务错误只在 services 返回,controllers 负责转换为 HTTP 响应。
- 保持 controller 轻量简洁,绝不包含业务处理逻辑。
- services 层所有数据变更、校验等均可单元测试。
- models 变动需清晰文档和数据库迁移脚本。
建议先设计 models 层,随后 services 层,最后实现 controllers,实现过程中注意分层原则。
+243 -243
View File
@@ -1,243 +1,243 @@
# 大文件上传配置说明
## 概述
为支持大型软件安装包(如桌面客户端安装程序)的上传,系统已调整文件上传限制和超时配置。
## 配置修改
### 1. 文件大小限制
**文件位置**: `go/controllers/platform_file.go`
**修改内容**:
```go
// 修改前
const fileUploadMaxMB = 200 // 200MB
// 修改后
const fileUploadMaxMB = 2048 // 2GB,适用于大型软件安装包
```
### 2. 服务器超时配置
**文件位置**: `go/conf/app.conf`
**新增配置**:
```ini
# 服务器超时配置(支持大文件上传)
# 0 表示不设置超时限制
ServerTimeOut = 0
# 最大请求体大小(字节),0 表示不限制
MaxMemory = 0
```
## CORS 配置
**文件位置**: `go/routers/router.go`
当前 CORS 配置允许跨域请求:
```go
beego.InsertFilter("*", beego.BeforeRouter, func(ctx *context.Context) {
ctx.Output.Header("Access-Control-Allow-Origin", "*")
ctx.Output.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH, OPTIONS")
ctx.Output.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
ctx.Output.Header("Access-Control-Max-Age", "86400")
if ctx.Input.Method() == "OPTIONS" {
ctx.Output.Status = 200
ctx.Output.Body([]byte(""))
return
}
})
```
### 生产环境 CORS 配置建议
在生产环境中,建议将 `Access-Control-Allow-Origin` 设置为具体的前端域名:
```go
// 开发环境
ctx.Output.Header("Access-Control-Allow-Origin", "*")
// 生产环境(推荐)
allowedOrigins := []string{
"https://platform.yunzer.cn",
"https://www.yunzer.cn",
}
origin := ctx.Request.Header.Get("Origin")
for _, allowed := range allowedOrigins {
if origin == allowed {
ctx.Output.Header("Access-Control-Allow-Origin", origin)
break
}
}
```
## 上传流程
### 1. 文件上传接口
**路由**: `POST /platform/uploadfile`
**控制器**: `PlatformFileController.UploadFile`
**处理流程**:
1. 验证用户身份(JWT token
2. 解析 multipart form(最大 2GB
3. 检查文件大小(不超过 2GB
4. 获取存储服务(本地或七牛云)
5. 上传文件到存储服务
6. 检查文件 MD5 是否已存在
7. 保存文件记录到数据库
8. 返回文件信息(URL、ID、名称)
### 2. 存储服务
系统支持两种存储方式:
- **本地存储**: 文件保存在 `uploads/` 目录
- **七牛云存储**: 文件上传到七牛云 OSS
存储方式通过 `yz_system_storage_config` 表配置。
## 性能优化建议
### 1. Nginx 反向代理配置
如果使用 Nginx 作为反向代理,需要调整以下配置:
```nginx
server {
listen 80;
server_name api.yunzer.cn;
# 客户端请求体大小限制(0 表示不限制)
client_max_body_size 0;
# 客户端请求体缓冲区大小
client_body_buffer_size 128k;
# 超时配置
client_body_timeout 3600s;
send_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 禁用请求体缓冲(直接流式传输)
proxy_request_buffering off;
}
}
```
### 2. 磁盘空间监控
大文件上传需要足够的磁盘空间:
```bash
# 检查磁盘空间
df -h
# 监控 uploads 目录大小
du -sh uploads/
# 设置磁盘空间告警(推荐使用监控工具)
```
### 3. 数据库优化
对于频繁的文件查询,建议添加索引:
```sql
-- MD5 索引(用于去重)
CREATE INDEX idx_system_file_md5 ON yz_system_file(md5);
-- 租户 + 删除时间索引(用于文件列表查询)
CREATE INDEX idx_system_file_tid_delete ON yz_system_file(tid, delete_time);
```
## 故障排查
### 1. 上传失败:文件过大
**错误信息**: "文件大小不能超过 2048MB"
**解决方案**:
- 检查 `fileUploadMaxMB` 常量设置
- 确认 Nginx `client_max_body_size` 配置
- 检查磁盘剩余空间
### 2. 上传超时
**错误信息**: "请求失败,请检查网络连接"
**解决方案**:
- 检查 `app.conf` 中的 `ServerTimeOut` 配置
- 检查 Nginx 超时配置
- 检查网络带宽和稳定性
### 3. CORS 错误
**错误信息**: "已拦截跨源请求:同源策略禁止读取..."
**解决方案**:
- 检查 `go/routers/router.go` 中的 CORS 配置
- 确认 `Access-Control-Allow-Origin` 包含前端域名
- 检查 `Access-Control-Allow-Headers` 包含 `Authorization`
### 4. 文件不存在(404
**错误信息**: "请求的资源不存在"
**可能原因**:
- 文件记录在数据库中不存在
- 租户 ID (tid) 不匹配
- 文件已被标记为删除
**解决方案**:
```sql
-- 检查文件记录
SELECT * FROM yz_system_file WHERE id = 320;
-- 检查是否被删除
SELECT * FROM yz_system_file WHERE id = 320 AND delete_time IS NULL;
```
## 监控指标
建议监控以下指标:
1. **上传成功率**: 成功上传数 / 总上传请求数
2. **平均上传时间**: 按文件大小分段统计
3. **磁盘使用率**: uploads 目录大小 / 总磁盘空间
4. **错误率**: 按错误类型分类统计
## 相关文件
- `go/controllers/platform_file.go` - 文件上传控制器
- `go/services/storage_service.go` - 存储服务接口
- `go/conf/app.conf` - 服务器配置
- `go/routers/router.go` - 路由和 CORS 配置
- `go/models/system_file.go` - 文件数据模型
## 更新日志
- **2026-04-09**:
- 文件大小限制从 200MB 提升到 2GB
- 移除服务器超时限制
- 更新文档
## 参考资料
- [Beego 文档 - 文件上传](https://beego.vip/docs/mvc/controller/file.md)
- [Nginx 文件上传配置](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size)
- [七牛云 Go SDK](https://developer.qiniu.com/kodo/1238/go)
# 大文件上传配置说明
## 概述
为支持大型软件安装包(如桌面客户端安装程序)的上传,系统已调整文件上传限制和超时配置。
## 配置修改
### 1. 文件大小限制
**文件位置**: `go/controllers/platform_file.go`
**修改内容**:
```go
// 修改前
const fileUploadMaxMB = 200 // 200MB
// 修改后
const fileUploadMaxMB = 2048 // 2GB,适用于大型软件安装包
```
### 2. 服务器超时配置
**文件位置**: `go/conf/app.conf`
**新增配置**:
```ini
# 服务器超时配置(支持大文件上传)
# 0 表示不设置超时限制
ServerTimeOut = 0
# 最大请求体大小(字节),0 表示不限制
MaxMemory = 0
```
## CORS 配置
**文件位置**: `go/routers/router.go`
当前 CORS 配置允许跨域请求:
```go
beego.InsertFilter("*", beego.BeforeRouter, func(ctx *context.Context) {
ctx.Output.Header("Access-Control-Allow-Origin", "*")
ctx.Output.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH, OPTIONS")
ctx.Output.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
ctx.Output.Header("Access-Control-Max-Age", "86400")
if ctx.Input.Method() == "OPTIONS" {
ctx.Output.Status = 200
ctx.Output.Body([]byte(""))
return
}
})
```
### 生产环境 CORS 配置建议
在生产环境中,建议将 `Access-Control-Allow-Origin` 设置为具体的前端域名:
```go
// 开发环境
ctx.Output.Header("Access-Control-Allow-Origin", "*")
// 生产环境(推荐)
allowedOrigins := []string{
"https://platform.yunzer.cn",
"https://www.yunzer.cn",
}
origin := ctx.Request.Header.Get("Origin")
for _, allowed := range allowedOrigins {
if origin == allowed {
ctx.Output.Header("Access-Control-Allow-Origin", origin)
break
}
}
```
## 上传流程
### 1. 文件上传接口
**路由**: `POST /platform/uploadfile`
**控制器**: `PlatformFileController.UploadFile`
**处理流程**:
1. 验证用户身份(JWT token
2. 解析 multipart form(最大 2GB
3. 检查文件大小(不超过 2GB
4. 获取存储服务(本地或七牛云)
5. 上传文件到存储服务
6. 检查文件 MD5 是否已存在
7. 保存文件记录到数据库
8. 返回文件信息(URL、ID、名称)
### 2. 存储服务
系统支持两种存储方式:
- **本地存储**: 文件保存在 `uploads/` 目录
- **七牛云存储**: 文件上传到七牛云 OSS
存储方式通过 `yz_system_storage_config` 表配置。
## 性能优化建议
### 1. Nginx 反向代理配置
如果使用 Nginx 作为反向代理,需要调整以下配置:
```nginx
server {
listen 80;
server_name api.yunzer.cn;
# 客户端请求体大小限制(0 表示不限制)
client_max_body_size 0;
# 客户端请求体缓冲区大小
client_body_buffer_size 128k;
# 超时配置
client_body_timeout 3600s;
send_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 禁用请求体缓冲(直接流式传输)
proxy_request_buffering off;
}
}
```
### 2. 磁盘空间监控
大文件上传需要足够的磁盘空间:
```bash
# 检查磁盘空间
df -h
# 监控 uploads 目录大小
du -sh uploads/
# 设置磁盘空间告警(推荐使用监控工具)
```
### 3. 数据库优化
对于频繁的文件查询,建议添加索引:
```sql
-- MD5 索引(用于去重)
CREATE INDEX idx_system_file_md5 ON yz_system_file(md5);
-- 租户 + 删除时间索引(用于文件列表查询)
CREATE INDEX idx_system_file_tid_delete ON yz_system_file(tid, delete_time);
```
## 故障排查
### 1. 上传失败:文件过大
**错误信息**: "文件大小不能超过 2048MB"
**解决方案**:
- 检查 `fileUploadMaxMB` 常量设置
- 确认 Nginx `client_max_body_size` 配置
- 检查磁盘剩余空间
### 2. 上传超时
**错误信息**: "请求失败,请检查网络连接"
**解决方案**:
- 检查 `app.conf` 中的 `ServerTimeOut` 配置
- 检查 Nginx 超时配置
- 检查网络带宽和稳定性
### 3. CORS 错误
**错误信息**: "已拦截跨源请求:同源策略禁止读取..."
**解决方案**:
- 检查 `go/routers/router.go` 中的 CORS 配置
- 确认 `Access-Control-Allow-Origin` 包含前端域名
- 检查 `Access-Control-Allow-Headers` 包含 `Authorization`
### 4. 文件不存在(404
**错误信息**: "请求的资源不存在"
**可能原因**:
- 文件记录在数据库中不存在
- 租户 ID (tid) 不匹配
- 文件已被标记为删除
**解决方案**:
```sql
-- 检查文件记录
SELECT * FROM yz_system_file WHERE id = 320;
-- 检查是否被删除
SELECT * FROM yz_system_file WHERE id = 320 AND delete_time IS NULL;
```
## 监控指标
建议监控以下指标:
1. **上传成功率**: 成功上传数 / 总上传请求数
2. **平均上传时间**: 按文件大小分段统计
3. **磁盘使用率**: uploads 目录大小 / 总磁盘空间
4. **错误率**: 按错误类型分类统计
## 相关文件
- `go/controllers/platform_file.go` - 文件上传控制器
- `go/services/storage_service.go` - 存储服务接口
- `go/conf/app.conf` - 服务器配置
- `go/routers/router.go` - 路由和 CORS 配置
- `go/models/system_file.go` - 文件数据模型
## 更新日志
- **2026-04-09**:
- 文件大小限制从 200MB 提升到 2GB
- 移除服务器超时限制
- 更新文档
## 参考资料
- [Beego 文档 - 文件上传](https://beego.vip/docs/mvc/controller/file.md)
- [Nginx 文件上传配置](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size)
- [七牛云 Go SDK](https://developer.qiniu.com/kodo/1238/go)
+183 -183
View File
@@ -1,183 +1,183 @@
# 文档整理说明
## 📁 文档结构
所有文档已按照项目结构整理到对应的 `docs/` 目录中。
### 后端文档 (go/docs/)
```
go/docs/
├── README.md # 文档索引(新增)
├── 后端开发规则.md # 开发规范
├── 接口文件.md # 接口文档
├── 服务端启动命令.md # 启动说明
├── QUICK_START.md # 快速开始(新增)
├── README_STORAGE.md # 存储功能说明(新增)
├── storage-config-guide.md # 存储详细指南(新增)
├── DEPLOYMENT_CHECKLIST.md # 部署清单(新增)
├── IMPLEMENTATION_COMPLETE.md # 实现报告(新增)
├── 文档整理说明.md # 本文件(新增)
└── sql/
└── add_storage_config_table.sql # 数据库迁移
```
### 前端文档 (platform/docs/)
```
platform/docs/
├── README.md # 文档索引(新增)
├── dictionary-usage.md # 字典使用
├── pinia-dict-guide.md # Pinia字典指南
├── 一键复制.md # 复制功能
├── 拼接接口路径.md # 接口路径
├── 接口调用.md # 接口调用
├── 获取缓存数据.md # 缓存数据
├── 调用图片上传组件.md # 图片上传
└── 调用字典.md # 字典调用
```
### 项目根目录
```
项目根目录/
└── README.md # 总导航(新增)
```
## 📝 文档分类
### 1. 开发文档
- 后端开发规则.md
- 接口文件.md
- 服务端启动命令.md
### 2. 功能文档
- dictionary-usage.md
- pinia-dict-guide.md
- 调用字典.md
- 调用图片上传组件.md
- 等...
### 3. 存储配置功能文档(新增)
- QUICK_START.md - 快速开始
- README_STORAGE.md - 功能说明
- storage-config-guide.md - 详细指南
- DEPLOYMENT_CHECKLIST.md - 部署清单
- IMPLEMENTATION_COMPLETE.md - 实现报告
### 4. 索引文档(新增)
- 项目根目录/README.md - 总导航
- go/docs/README.md - 后端文档索引
- platform/docs/README.md - 前端文档索引
## 🔍 文档查找
### 按功能查找
**存储配置功能**:
1. 快速开始 → `go/docs/QUICK_START.md`
2. 功能说明 → `go/docs/README_STORAGE.md`
3. 详细指南 → `go/docs/storage-config-guide.md`
4. 部署清单 → `go/docs/DEPLOYMENT_CHECKLIST.md`
**字典功能**:
1. 使用说明 → `platform/docs/dictionary-usage.md`
2. Pinia指南 → `platform/docs/pinia-dict-guide.md`
**图片上传**:
1. 组件调用 → `platform/docs/调用图片上传组件.md`
### 按角色查找
**新手开发者**:
1. 项目总览 → `README.md`
2. 后端开发 → `go/docs/后端开发规则.md`
3. 快速开始 → `go/docs/QUICK_START.md`
**运维人员**:
1. 启动命令 → `go/docs/服务端启动命令.md`
2. 部署清单 → `go/docs/DEPLOYMENT_CHECKLIST.md`
**产品经理**:
1. 功能说明 → `go/docs/README_STORAGE.md`
2. 实现报告 → `go/docs/IMPLEMENTATION_COMPLETE.md`
## 📋 文档规范
### 文件命名
- 中文文档:使用中文名称(如:后端开发规则.md)
- 英文文档:使用大写+下划线(如:README_STORAGE.md
- 索引文档:统一使用 README.md
### 文档结构
```markdown
# 标题
## 概述
简要说明文档内容
## 目录
- 章节1
- 章节2
## 详细内容
...
## 相关链接
- 链接1
- 链接2
```
### 文档位置
- 后端相关文档 → `go/docs/`
- 前端相关文档 → `platform/docs/`
- 移动端相关文档 → `babyhealth/docs/`
- 项目总览 → 根目录 `README.md`
## 🔄 文档更新
### 新增文档
1. 确定文档类型(后端/前端/通用)
2. 放入对应的 `docs/` 目录
3. 更新对应的 `README.md` 索引
4. 如需要,更新根目录 `README.md`
### 修改文档
1. 直接修改对应文档
2. 更新文档底部的"最后更新"时间
3. 如有重大变更,更新索引文档
### 删除文档
1. 删除文档文件
2. 从索引中移除引用
3. 检查其他文档中的链接
## ✅ 整理完成清单
- [x] 创建后端文档索引 (go/docs/README.md)
- [x] 创建前端文档索引 (platform/docs/README.md)
- [x] 创建项目总导航 (README.md)
- [x] 移动存储功能文档到 go/docs/
- [x] 删除根目录的临时文档
- [x] 创建文档整理说明(本文件)
## 📌 注意事项
1. **文档位置**: 所有文档必须放在对应项目的 `docs/` 目录中
2. **索引更新**: 新增文档后必须更新索引文件
3. **链接检查**: 修改文档位置后检查所有引用链接
4. **命名规范**: 遵循统一的文件命名规范
5. **内容质量**: 保持文档的准确性和时效性
## 🎯 后续优化
- [ ] 添加文档搜索功能
- [ ] 生成文档网站(如使用 VuePress)
- [ ] 添加文档版本管理
- [ ] 自动化文档检查工具
- [ ] 文档贡献指南
---
**整理完成时间**: 2024-01-01
**整理人员**: AI Assistant
# 文档整理说明
## 📁 文档结构
所有文档已按照项目结构整理到对应的 `docs/` 目录中。
### 后端文档 (go/docs/)
```
go/docs/
├── README.md # 文档索引(新增)
├── 后端开发规则.md # 开发规范
├── 接口文件.md # 接口文档
├── 服务端启动命令.md # 启动说明
├── QUICK_START.md # 快速开始(新增)
├── README_STORAGE.md # 存储功能说明(新增)
├── storage-config-guide.md # 存储详细指南(新增)
├── DEPLOYMENT_CHECKLIST.md # 部署清单(新增)
├── IMPLEMENTATION_COMPLETE.md # 实现报告(新增)
├── 文档整理说明.md # 本文件(新增)
└── sql/
└── add_storage_config_table.sql # 数据库迁移
```
### 前端文档 (platform/docs/)
```
platform/docs/
├── README.md # 文档索引(新增)
├── dictionary-usage.md # 字典使用
├── pinia-dict-guide.md # Pinia字典指南
├── 一键复制.md # 复制功能
├── 拼接接口路径.md # 接口路径
├── 接口调用.md # 接口调用
├── 获取缓存数据.md # 缓存数据
├── 调用图片上传组件.md # 图片上传
└── 调用字典.md # 字典调用
```
### 项目根目录
```
项目根目录/
└── README.md # 总导航(新增)
```
## 📝 文档分类
### 1. 开发文档
- 后端开发规则.md
- 接口文件.md
- 服务端启动命令.md
### 2. 功能文档
- dictionary-usage.md
- pinia-dict-guide.md
- 调用字典.md
- 调用图片上传组件.md
- 等...
### 3. 存储配置功能文档(新增)
- QUICK_START.md - 快速开始
- README_STORAGE.md - 功能说明
- storage-config-guide.md - 详细指南
- DEPLOYMENT_CHECKLIST.md - 部署清单
- IMPLEMENTATION_COMPLETE.md - 实现报告
### 4. 索引文档(新增)
- 项目根目录/README.md - 总导航
- go/docs/README.md - 后端文档索引
- platform/docs/README.md - 前端文档索引
## 🔍 文档查找
### 按功能查找
**存储配置功能**:
1. 快速开始 → `go/docs/QUICK_START.md`
2. 功能说明 → `go/docs/README_STORAGE.md`
3. 详细指南 → `go/docs/storage-config-guide.md`
4. 部署清单 → `go/docs/DEPLOYMENT_CHECKLIST.md`
**字典功能**:
1. 使用说明 → `platform/docs/dictionary-usage.md`
2. Pinia指南 → `platform/docs/pinia-dict-guide.md`
**图片上传**:
1. 组件调用 → `platform/docs/调用图片上传组件.md`
### 按角色查找
**新手开发者**:
1. 项目总览 → `README.md`
2. 后端开发 → `go/docs/后端开发规则.md`
3. 快速开始 → `go/docs/QUICK_START.md`
**运维人员**:
1. 启动命令 → `go/docs/服务端启动命令.md`
2. 部署清单 → `go/docs/DEPLOYMENT_CHECKLIST.md`
**产品经理**:
1. 功能说明 → `go/docs/README_STORAGE.md`
2. 实现报告 → `go/docs/IMPLEMENTATION_COMPLETE.md`
## 📋 文档规范
### 文件命名
- 中文文档:使用中文名称(如:后端开发规则.md)
- 英文文档:使用大写+下划线(如:README_STORAGE.md
- 索引文档:统一使用 README.md
### 文档结构
```markdown
# 标题
## 概述
简要说明文档内容
## 目录
- 章节1
- 章节2
## 详细内容
...
## 相关链接
- 链接1
- 链接2
```
### 文档位置
- 后端相关文档 → `go/docs/`
- 前端相关文档 → `platform/docs/`
- 移动端相关文档 → `babyhealth/docs/`
- 项目总览 → 根目录 `README.md`
## 🔄 文档更新
### 新增文档
1. 确定文档类型(后端/前端/通用)
2. 放入对应的 `docs/` 目录
3. 更新对应的 `README.md` 索引
4. 如需要,更新根目录 `README.md`
### 修改文档
1. 直接修改对应文档
2. 更新文档底部的"最后更新"时间
3. 如有重大变更,更新索引文档
### 删除文档
1. 删除文档文件
2. 从索引中移除引用
3. 检查其他文档中的链接
## ✅ 整理完成清单
- [x] 创建后端文档索引 (go/docs/README.md)
- [x] 创建前端文档索引 (platform/docs/README.md)
- [x] 创建项目总导航 (README.md)
- [x] 移动存储功能文档到 go/docs/
- [x] 删除根目录的临时文档
- [x] 创建文档整理说明(本文件)
## 📌 注意事项
1. **文档位置**: 所有文档必须放在对应项目的 `docs/` 目录中
2. **索引更新**: 新增文档后必须更新索引文件
3. **链接检查**: 修改文档位置后检查所有引用链接
4. **命名规范**: 遵循统一的文件命名规范
5. **内容质量**: 保持文档的准确性和时效性
## 🎯 后续优化
- [ ] 添加文档搜索功能
- [ ] 生成文档网站(如使用 VuePress)
- [ ] 添加文档版本管理
- [ ] 自动化文档检查工具
- [ ] 文档贡献指南
---
**整理完成时间**: 2024-01-01
**整理人员**: AI Assistant
+299 -299
View File
@@ -1,300 +1,300 @@
## 方式一:使用 systemd 服务(推荐)
### 自动安装(推荐)
使用安装脚本自动配置 systemd 服务:
```bash
# 进入脚本目录
cd /www/wwwroot/api.yunzer.cn/scripts
# 添加执行权限
chmod +x install-systemd-service.sh
# 运行安装脚本
sudo bash install-systemd-service.sh
或者
sudo env PATH=$PATH:/usr/local/btgo/bin bash install-systemd-service.sh
```
脚本会自动:
- 停止现有服务和进程
- 创建正确的 systemd 配置文件
- 启动服务
- 启用开机自启
- 显示服务状态和日志
### 手动安装
如果需要手动配置:
```bash
# 1. 停止现有服务
systemctl stop go-api
pkill -f "go run main.go"
# 2. 复制服务文件
sudo cp /www/wwwroot/api.yunzer.cn/scripts/go-api.service /etc/systemd/system/
# 3. 重载 systemd
sudo systemctl daemon-reload
# 4. 启动服务
sudo systemctl start go-api
# 5. 启用开机自启
sudo systemctl enable go-api
# 6. 查看状态
sudo systemctl status go-api
```
### 启动服务
```bash
systemctl start go-api
```
### 查看状态
```bash
systemctl status go-api
```
### 常用命令
```bash
# 启动
systemctl start go-api
# 停止
systemctl stop go-api
# 重启
systemctl restart go-api
# 查看状态
systemctl status go-api
# 查看日志(systemd 日志)
journalctl -u go-api -f
# 查看日志(文件日志)
tail -f /www/wwwroot/api.yunzer.cn/go.log
# 开机自启
systemctl enable go-api
# 禁用开机自启
systemctl disable go-api
```
## 方式二:使用管理脚本(推荐)
### 脚本位置
```bash
/www/wwwroot/api.yunzer.cn/scripts/service.sh
```
### 添加执行权限
```bash
chmod +x /www/wwwroot/api.yunzer.cn/scripts/service.sh
```
### 常用命令
```bash
# 启动服务
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh start
# 停止服务
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh stop
# 重启服务
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh restart
# 查看状态
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh status
# 查看日志(最后 50 行)
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs
# 实时查看日志
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs -f
# 查看最后 100 行日志
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs 100
```
### 创建快捷命令(可选)
```bash
# 添加到 ~/.bashrc
echo 'alias go-service="bash /www/wwwroot/api.yunzer.cn/scripts/service.sh"' >> ~/.bashrc
source ~/.bashrc
# 使用快捷命令
go-service start
go-service restart
go-service status
go-service logs -f
```
## 方式三:后台直接启动
### 启动服务
```bash
cd /www/wwwroot/api.yunzer.cn
nohup go run main.go > go.log 2>&1 &
```
### 查看是否运行成功
```bash
tail -f go.log
```
### 查看进程
```bash
ps aux | grep "go run main.go" | grep -v grep
```
### 重启服务
```bash
pkill -f "go run main.go" && cd /www/wwwroot/api.yunzer.cn && nohup go run main.go > go.log 2>&1 &
```
### 停止服务
```bash
pkill -f "go run main.go"
```
## 日志查看
### 查看实时日志
```bash
# systemd 方式
journalctl -u go-api -f
# 直接启动方式
tail -f /www/wwwroot/api.yunzer.cn/go.log
```
### 查看最近日志
```bash
# systemd 方式
journalctl -u go-api -n 100
# 直接启动方式
tail -n 100 /www/wwwroot/api.yunzer.cn/go.log
```
### 查看错误日志
```bash
# systemd 方式
journalctl -u go-api -p err
# 直接启动方式
grep -i error /www/wwwroot/api.yunzer.cn/go.log
```
## 常见问题
### 1. 服务启动失败
**检查日志**
```bash
# systemd
journalctl -u go-api -n 50
# 直接启动
tail -n 50 /www/wwwroot/api.yunzer.cn/go.log
```
**常见原因**
- 端口被占用(8081
- 数据库连接失败
- 配置文件错误
### 2. 端口被占用
**查看端口占用**
```bash
netstat -tlnp | grep 8081
# 或
lsof -i :8081
```
**停止占用进程**
```bash
# 找到 PID
lsof -i :8081
# 停止进程
kill -9 <PID>
```
### 3. 进程残留
**查找残留进程**
```bash
ps aux | grep "go run main.go" | grep -v grep
```
**清理残留进程**
```bash
pkill -9 -f "go run main.go"
```
### 4. 日志文件不存在
**原因**:启动命令没有重定向输出
**解决**:使用正确的启动命令
```bash
nohup go run main.go > go.log 2>&1 &
```
## 性能监控
### 查看资源占用
```bash
# CPU 和内存
top -p $(pgrep -f "go run main.go")
# 详细信息
ps aux | grep "go run main.go" | grep -v grep
```
### 查看连接数
```bash
netstat -an | grep 8081 | wc -l
```
### 查看文件描述符
```bash
lsof -p $(pgrep -f "go run main.go") | wc -l
```
## 生产环境建议
1. **使用 systemd 服务**:更稳定,支持自动重启
2. **配置日志轮转**:防止日志文件过大
3. **监控服务状态**:使用监控工具(如 Prometheus
4. **定期备份**:备份数据库和配置文件
5. **使用编译后的二进制**:比 `go run` 更高效
### 编译并运行(推荐生产环境)
```bash
# 编译
cd /www/wwwroot/api.yunzer.cn
go build -o server main.go
# 运行
nohup ./server > go.log 2>&1 &
# 或使用 systemd(修改 ExecStart
# ExecStart=/www/wwwroot/api.yunzer.cn/server
```
## 更新日期
## 方式一:使用 systemd 服务(推荐)
### 自动安装(推荐)
使用安装脚本自动配置 systemd 服务:
```bash
# 进入脚本目录
cd /www/wwwroot/api.yunzer.cn/scripts
# 添加执行权限
chmod +x install-systemd-service.sh
# 运行安装脚本
sudo bash install-systemd-service.sh
或者
sudo env PATH=$PATH:/usr/local/btgo/bin bash install-systemd-service.sh
```
脚本会自动:
- 停止现有服务和进程
- 创建正确的 systemd 配置文件
- 启动服务
- 启用开机自启
- 显示服务状态和日志
### 手动安装
如果需要手动配置:
```bash
# 1. 停止现有服务
systemctl stop go-api
pkill -f "go run main.go"
# 2. 复制服务文件
sudo cp /www/wwwroot/api.yunzer.cn/scripts/go-api.service /etc/systemd/system/
# 3. 重载 systemd
sudo systemctl daemon-reload
# 4. 启动服务
sudo systemctl start go-api
# 5. 启用开机自启
sudo systemctl enable go-api
# 6. 查看状态
sudo systemctl status go-api
```
### 启动服务
```bash
systemctl start go-api
```
### 查看状态
```bash
systemctl status go-api
```
### 常用命令
```bash
# 启动
systemctl start go-api
# 停止
systemctl stop go-api
# 重启
systemctl restart go-api
# 查看状态
systemctl status go-api
# 查看日志(systemd 日志)
journalctl -u go-api -f
# 查看日志(文件日志)
tail -f /www/wwwroot/api.yunzer.cn/go.log
# 开机自启
systemctl enable go-api
# 禁用开机自启
systemctl disable go-api
```
## 方式二:使用管理脚本(推荐)
### 脚本位置
```bash
/www/wwwroot/api.yunzer.cn/scripts/service.sh
```
### 添加执行权限
```bash
chmod +x /www/wwwroot/api.yunzer.cn/scripts/service.sh
```
### 常用命令
```bash
# 启动服务
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh start
# 停止服务
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh stop
# 重启服务
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh restart
# 查看状态
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh status
# 查看日志(最后 50 行)
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs
# 实时查看日志
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs -f
# 查看最后 100 行日志
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs 100
```
### 创建快捷命令(可选)
```bash
# 添加到 ~/.bashrc
echo 'alias go-service="bash /www/wwwroot/api.yunzer.cn/scripts/service.sh"' >> ~/.bashrc
source ~/.bashrc
# 使用快捷命令
go-service start
go-service restart
go-service status
go-service logs -f
```
## 方式三:后台直接启动
### 启动服务
```bash
cd /www/wwwroot/api.yunzer.cn
nohup go run main.go > go.log 2>&1 &
```
### 查看是否运行成功
```bash
tail -f go.log
```
### 查看进程
```bash
ps aux | grep "go run main.go" | grep -v grep
```
### 重启服务
```bash
pkill -f "go run main.go" && cd /www/wwwroot/api.yunzer.cn && nohup go run main.go > go.log 2>&1 &
```
### 停止服务
```bash
pkill -f "go run main.go"
```
## 日志查看
### 查看实时日志
```bash
# systemd 方式
journalctl -u go-api -f
# 直接启动方式
tail -f /www/wwwroot/api.yunzer.cn/go.log
```
### 查看最近日志
```bash
# systemd 方式
journalctl -u go-api -n 100
# 直接启动方式
tail -n 100 /www/wwwroot/api.yunzer.cn/go.log
```
### 查看错误日志
```bash
# systemd 方式
journalctl -u go-api -p err
# 直接启动方式
grep -i error /www/wwwroot/api.yunzer.cn/go.log
```
## 常见问题
### 1. 服务启动失败
**检查日志**
```bash
# systemd
journalctl -u go-api -n 50
# 直接启动
tail -n 50 /www/wwwroot/api.yunzer.cn/go.log
```
**常见原因**
- 端口被占用(8081
- 数据库连接失败
- 配置文件错误
### 2. 端口被占用
**查看端口占用**
```bash
netstat -tlnp | grep 8081
# 或
lsof -i :8081
```
**停止占用进程**
```bash
# 找到 PID
lsof -i :8081
# 停止进程
kill -9 <PID>
```
### 3. 进程残留
**查找残留进程**
```bash
ps aux | grep "go run main.go" | grep -v grep
```
**清理残留进程**
```bash
pkill -9 -f "go run main.go"
```
### 4. 日志文件不存在
**原因**:启动命令没有重定向输出
**解决**:使用正确的启动命令
```bash
nohup go run main.go > go.log 2>&1 &
```
## 性能监控
### 查看资源占用
```bash
# CPU 和内存
top -p $(pgrep -f "go run main.go")
# 详细信息
ps aux | grep "go run main.go" | grep -v grep
```
### 查看连接数
```bash
netstat -an | grep 8081 | wc -l
```
### 查看文件描述符
```bash
lsof -p $(pgrep -f "go run main.go") | wc -l
```
## 生产环境建议
1. **使用 systemd 服务**:更稳定,支持自动重启
2. **配置日志轮转**:防止日志文件过大
3. **监控服务状态**:使用监控工具(如 Prometheus
4. **定期备份**:备份数据库和配置文件
5. **使用编译后的二进制**:比 `go run` 更高效
### 编译并运行(推荐生产环境)
```bash
# 编译
cd /www/wwwroot/api.yunzer.cn
go build -o server main.go
# 运行
nohup ./server > go.log 2>&1 &
# 或使用 systemd(修改 ExecStart
# ExecStart=/www/wwwroot/api.yunzer.cn/server
```
## 更新日期
2026-04-09