飞鹅博客系统初始化及二次开发(二)后端
飞鹅博客系统初始化及二次开发(二)后端
一、后端开发
1.1 项目结构解析
飞鹅博客系统后端基于Go语言和Iris框架开发,采用了清晰的分层架构设计。以下是项目的核心目录结构:
├── cmd/ # 命令行入口│ └── flygoose/ # 主程序入口│ ├── flygoose-config.yaml # 配置文件示例│ └── main.go # 程序启动文件├── configs/ # 配置相关│ └── config.go # 配置结构定义├── datasource/ # 数据源连接│ └── db.go # 数据库初始化├── inits/ # 应用初始化│ ├── flygoose_init.go # 应用初始化逻辑│ └── middle.go # 中间件配置├── pkg/ # 公共包│ ├── beans/ # 数据传输对象│ ├── models/ # 数据模型│ ├── tlog/ # 日志工具│ └── tools/ # 通用工具├── web/ # Web相关│ ├── controllers/ # 控制器│ ├── daos/ # 数据访问层│ ├── middlers/ # 中间件│ └── services/ # 业务逻辑层└── docs/ # 文档 └── 接口文档.md # API接口文档1.2 核心配置文件说明
1.2.1 主配置文件结构
配置文件位于configs/config.go,定义了系统的核心配置结构:
// 全局配置文件实例var Cfg *Config
type Config struct { Http HttpCfg `yaml:"http"` // HTTP服务配置 Database DatabaseCfg `yaml:"database"` // 数据库配置 ExecuteDir string // 可执行文件目录 StaticDir string // 静态文件目录 StaticImgDir string // 图片静态目录}
type HttpCfg struct { Port int `yaml:"port"` // 服务端口}
type DatabaseCfg struct { Driver DbDriverType `yaml:"driver"` // 数据库类型(mysql或postgresql) Host string `yaml:"host"` // 数据库IP Name string `yaml:"name"` // 数据库名称 Port int `yaml:"port"` // 数据库端口 User string `yaml:"user"` // 用户名 Password string `yaml:"password"` // 密码}1.2.2 配置文件示例
# 服务端口http: port: 29090# 数据库配置database: driver: mysql host: 127.0.0.1 port: 3306 name: db_flygoose user: flygoose password: flygoose1.3 应用初始化流程
应用初始化主要在inits/flygoose_init.go中实现,包含以下核心步骤:
1.3.1 创建应用实例
func NewFlygooseApp(cfg *configs.Config) *FlygooseApp { app := new(FlygooseApp) app.Cfg = cfg app.Engine = iris.New() // 配置CORS中间件 app.Engine.UseRouter(cors.New().Handler()) return app}1.3.2 启动应用
func (m *FlygooseApp) Start() { m.InitDir() // 初始化目录 m.initLog() // 初始化日志 m.initDB() // 初始化数据库 m.initRouter() // 初始化路由 m.run() // 启动服务}1.3.3 数据库初始化与自动迁移
func (m *FlygooseApp) initDB() { // 初始化数据库连接 if m.Cfg.Database.Driver == configs.DbDriverMySQL { datasource.InitMySql(cfg) } else if m.Cfg.Database.Driver == configs.DbDriverPostgreSQL { datasource.InitPostgreSQL(cfg) } else { panic(errors.New("暂不支持其它数据库")) }
// 自动迁移数据模型 m.initAutoMigrate()
// 初始化默认管理员账户 m.initDefaultAdmin()}1.3.4 路由配置
func (m *FlygooseApp) initRouter() { v1 := m.Engine.Party(configs.Flygoose_Url_Prefix) // API前缀 { // 前端接口 mvc.New(v1.Party("/site")).Handle(flygoose.NewSiteController()) mvc.New(v1.Party("/blog")).Handle(flygoose.NewBlogController()) mvc.New(v1.Party("/special")).Handle(flygoose.NewSpecialController()) mvc.New(v1.Party("/ai")).Handle(ai.NewDeepSeekController()) // AI相关接口(注:此为个人修改版本新增功能,详情请参考 https://github.com/AI-FIRE/)
// 管理端接口 mvc.New(v1.Party("/health")).Handle(admin.NewHealthController()) //健康检查 mvc.New(v1.Party("/admin/access")).Handle(admin.NewAccessController()) //访问相关接口 mvc.New(v1.Party("/admin/blog")).Handle(admin.NewBlogController()) //博客相关接口 mvc.New(v1.Party("/admin/link")).Handle(admin.NewLinkController()) //友链相关接口 mvc.New(v1.Party("/admin/site")).Handle(admin.NewSiteController()) //网站信息相关接口 mvc.New(v1.Party("/admin/category")).Handle(admin.NewCategoryController()) //博客分类相关接口 mvc.New(v1.Party("/admin/notice")).Handle(admin.NewNoticeController()) //公告分类相关接口 mvc.New(v1.Party("/admin/special")).Handle(admin.NewSpecialController()) //专栏相关接口 mvc.New(v1.Party("/admin/file")).Handle(admin.NewFileController()) //文件相关接口 mvc.New(v1.Party("/admin/banner")).Handle(admin.NewBannerController()) //轮播图相关接口 mvc.New(v1.Party("/admin/workStation")).Handle(admin.NewWorkStationController()) //统计数据 }}1.4 数据模型设计
系统的数据模型定义在pkg/models/目录下,主要包含以下模型:
Admin: 管理员模型Blog: 博客文章模型Category: 分类模型Link: 友链模型Notice: 公告模型Section: 页面区块模型Site: 网站信息模型Special: 专栏模型Webmaster: 站长模型Banner: 轮播图模型- AI相关模型(注:此为个人修改版本新增功能,详情请参考 https://github.com/AI-FIRE/)
1.5 业务逻辑分层
1.5.1 控制器层 (Controllers)
控制器层负责处理HTTP请求,接收参数,调用业务逻辑,并返回响应。控制器位于web/controllers/目录下,分为前端控制器和管理端控制器。
示例:博客控制器
// 前端博客控制器func NewBlogController() *BlogController { return &BlogController{ BlogService: services.NewBlogService(), }}
// 管理端博客控制器func NewBlogController() *BlogController { return &BlogController{ BlogService: services.NewBlogService(), }}1.5.2 业务逻辑层 (Services)
业务逻辑层负责处理核心业务逻辑,位于web/services/目录下。
1.5.3 数据访问层 (DAOs)
数据访问层负责与数据库交互,位于web/daos/目录下。
1.6 AI功能集成
注:AI功能为个人修改版本新增功能,详情请参考 https://github.com/AI-FIRE/
系统集成了DeepSeek AI功能,相关代码位于以下位置:
pkg/beans/ai/: AI相关数据传输对象pkg/models/ai/: AI配置模型web/controllers/ai/: AI控制器web/daos/ai/: AI数据访问web/services/ai/: AI业务逻辑
AI接口示例:
// 直接返回型DeepSeek AI聊天接口func (c *DeepSeekController) ChatFirstPageAi(ctx iris.Context) { // 处理AI聊天请求}
// 流式传输型DeepSeek AI聊天接口func (c *DeepSeekController) StreamChatFirstPageAi(ctx iris.Context) { // 处理AI流式聊天请求}1.7 开发环境搭建
1.7.1 依赖安装
go mod tidy1.7.2 本地运行
go run cmd\flygoose\main.go1.7.3 配置说明
在cmd/flygoose/flygoose-config.yaml文件中配置数据库连接信息:
# 服务端口http: port: 29090# 数据库配置database: driver: mysql host: 127.0.0.1 port: 3306 name: db_flygoose user: root password: root1.8 编译与打包
1.8.1 本地编译
# Windows平台编译$env:GOOS="windows"; $env:GOARCH="amd64"; go build -o flygoose-api-2.0-win-amd64.exe ./cmd/flygoose
# Linux平台编译$env:GOOS="linux"; $env:GOARCH="amd64"; go build -o flygoose-api-2.0-linux-amd64 ./cmd/flygoose
# macOS平台编译 (Intel芯片)$env:GOOS="darwin"; $env:GOARCH="amd64"; go build -o flygoose-api-2.0-darwin-amd64 ./cmd/flygoose
# macOS平台编译 (Apple芯片)$env:GOOS="darwin"; $env:GOARCH="arm64"; go build -o flygoose-api-2.0-darwin-arm64 ./cmd/flygoose1.8.2 运行编译后的程序
# Linux平台chmod +x flygoose-api-2.0-linux-amd64./flygoose-api-2.0-linux-amd64 -c flygoose-config.yaml
# Windows平台flygoose-api-2.0-win-amd64.exe -c flygoose-config.yaml1.9 健康检查
系统提供了健康检查接口,用于验证服务是否正常运行:
curl http://localhost:29090/api/health返回结果:
{"code":1,"data":null,"message":"success"}二、管理端前端开发
(管理端前端部分将在后续章节中详细介绍)
三、二次开发指南
3.1 添加新功能模块
3.1.1 创建数据模型
在pkg/models/目录下创建新的数据模型。
3.1.2 创建数据传输对象
在pkg/beans/目录下创建对应的数据传输对象。
3.1.3 创建数据访问层
在web/daos/目录下创建数据访问层。
3.1.4 创建业务逻辑层
在web/services/目录下创建业务逻辑层。
3.1.5 创建控制器
在web/controllers/目录下创建控制器。
3.1.6 注册路由
在inits/flygoose_init.go文件中注册新的路由。
3.2 AI功能扩展
注:AI功能为个人修改版本新增功能,详情请参考 https://github.com/AI-FIRE/
系统支持扩展AI功能,可以在web/controllers/ai/、web/daos/ai/和web/services/ai/目录下添加新的AI接口和功能。
3.3 配置扩展
在configs/config.go文件中添加新的配置项,并在cmd/flygoose/flygoose-config.yaml文件中配置对应的值。
四、部署说明
4.1 服务器部署
4.1.1 准备工作
- 服务器或云主机(推荐配置:2核4G以上,操作系统:Ubuntu 20.04+)
- MySQL 8.0+ 数据库
- Nginx(可选,用于反向代理和HTTPS配置)
4.1.2 安装依赖
# 更新系统apt-get update
# 安装依赖apt-get install -y vim wget curl mysql-server4.1.3 配置数据库
# 登录MySQLmysql -u root -p
# 创建数据库CREATE DATABASE db_flygoose DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建用户并授权CREATE USER 'flygoose'@'%' IDENTIFIED BY 'flygoose';GRANT ALL PRIVILEGES ON db_flygoose.* TO 'flygoose'@'%';FLUSH PRIVILEGES;
# 退出EXIT;4.1.4 部署应用
# 创建应用目录mkdir -p /opt/flygoose
# 上传编译好的程序和配置文件cd /opt/flygoose
# 修改配置文件vim flygoose-config.yaml
# 赋予执行权限chmod +x flygoose-api-2.0-linux-amd64
# 后台运行nohup ./flygoose-api-2.0-linux-amd64 -c flygoose-config.yaml &4.1.5 Nginx配置(可选)
# 安装Nginxapt-get install -y nginx
# 配置Nginxvim /etc/nginx/conf.d/flygoose.confNginx配置示例:
server { listen 80; server_name yourdomain.com;
location /api { proxy_pass http://localhost:29090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}# 重启Nginxsystemctl restart nginx4.2 Docker部署(可选)
项目包含Dockerfile,可以使用Docker进行部署。
# 构建镜像docker build -t flygoose-api .
# 运行容器docker run -d -p 29090:29090 -v ./flygoose-config.yaml:/app/flygoose-config.yaml --name flygoose-api flygoose-api五、接口文档
详细的API接口文档请参考docs/接口文档.md文件。
六、常见问题与解决方案
6.1 数据库连接失败
- 检查数据库服务是否正常运行
- 检查数据库连接配置是否正确
- 检查数据库用户权限是否正确
6.2 服务启动失败
- 检查端口是否被占用
- 检查配置文件是否正确
- 检查日志文件获取详细错误信息
6.3 AI功能无法使用
注:AI功能为个人修改版本新增功能,详情请参考 https://github.com/AI-FIRE/
- 检查AI配置是否正确
- 检查网络连接是否正常
- 检查AI服务是否可用
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!