飞鹅博客系统初始化及二次开发(二)后端
一、后端开发
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: flygoose
1.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 tidy
1.7.2 本地运行
go run cmd\flygoose\main.go
1.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: root
1.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/flygoose
1.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.yaml
1.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-server
4.1.3 配置数据库
# 登录MySQL
mysql -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配置(可选)
# 安装Nginx
apt-get install -y nginx
# 配置Nginx
vim /etc/nginx/conf.d/flygoose.conf
Nginx配置示例:
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;
}
}
# 重启Nginx
systemctl restart nginx
4.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服务是否可用
