飞鹅博客系统初始化及二次开发(二)后端

2086 字
10 分钟
飞鹅博客系统初始化及二次开发(二)后端

飞鹅博客系统初始化及二次开发(二)后端#

一、后端开发#

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 依赖安装#

Terminal window
go mod tidy

1.7.2 本地运行#

Terminal window
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 本地编译#

Terminal window
# 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 运行编译后的程序#

Terminal window
# 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 健康检查#

系统提供了健康检查接口,用于验证服务是否正常运行:

Terminal window
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 安装依赖#

Terminal window
# 更新系统
apt-get update
# 安装依赖
apt-get install -y vim wget curl mysql-server

4.1.3 配置数据库#

Terminal window
# 登录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 部署应用#

Terminal window
# 创建应用目录
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配置(可选)#

Terminal window
# 安装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;
}
}
Terminal window
# 重启Nginx
systemctl restart nginx

4.2 Docker部署(可选)#

项目包含Dockerfile,可以使用Docker进行部署。

Terminal window
# 构建镜像
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服务是否可用

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
飞鹅博客系统初始化及二次开发(二)后端
https://blog.ai-nous.com/posts/飞鹅博客系统初始化及二次开发二后端/
作者
Pankitgg
发布于
2025-08-02
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Pankitgg
Hello, I'm Pankitgg.
公告
欢迎来到我的博客!长路漫漫,人间相遇便是缘。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
27
分类
4
标签
55
总字数
100,265
运行时长
0
最后活动
0 天前

文章目录