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

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服务是否可用
飞鹅博客系统初始化及二次开发(二)后端
https://blog.ai-nous.com/posts/飞鹅博客系统初始化及二次开发二后端/
作者
PankitGG
发布于
2025-08-02
许可协议
CC BY-NC-SA 4.0