AI智能图书馆是一个基于 Gin、Gorm、Mysql、Docker 等技术栈的自动化图书管理平台,系统有借阅用户、图书管理员、系统管理员三种角色,包含图书管理、公告留言管理、用户管理、AI在线推荐等多种功能。项目开发过程中采用了符合 Go 语言哲学的分层架构。系统界面设计简洁明了、上手简单、部署快速,拥有完整的功能介绍、接口文档、部署文档、错误文档等,代码完全开源,适合新手从零搭建、二次开发
本系统旨在通过智能算法为用户提供个性化的图书推荐服务,并允许图书管理员和系统管理员高效地管理图书资源和用户借阅活动。项目亮点:
SmartLibrary
├── api -- 定义通用的响应方法、参数结构体等
├── cmd -- 项目启动相关文件
├── config -- 配置文件,分为本地环境和生产环境
├── docs -- swagger 存放目录
├── internal -- 核心业务逻辑,包括 HTTP 服务、DB 操作等
├── pkg -- 第三方包与相关方法存放目录
├── storage -- 存放日志文件
└── test -- 存放测试相关代码
项目架构以 https://github.com/go-nunu/nunu 为基础
技术 | 说明 | 官网 |
---|---|---|
Gin | Gin是一个极简和高效的Web框架,具有路由、JSON验证等功能,机制灵活且易于扩展 | https://github.com/gin-gonic/gin |
Gorm | 专用于Golang的ORM库,支持多种数据库,提供简单的操作接口和丰富的查询功能 | https://github.com/go-gorm/gorm |
Wire | 一个用于依赖注入的工具,使得Go应用程序的构建更加灵活和可测试 | https://github.com/google/wire |
Viper | 一个灵活的配置管理库,支持多种格式的配置文件,如JSON、YAML和ENV等 | https://github.com/spf13/viper |
Zap | 一个高效且具有结构化日志功能的日志库,适用于高性能应用 | https://github.com/uber-go/zap |
Golang-jwt | 用于创建和解析JSON Web Tokens (JWT)的库,支持多种算法 | https://github.com/golang-jwt/jwt |
Go-redis | 一个功能丰富的Redis客户端,支持各种Redis特性,包括集群、发布/订阅等 | https://github.com/go-redis/redis |
Testify | 一个Go语言的测试工具包,提供丰富的断言功能和模拟功能,简化测试代码编写 | https://github.com/stretchr/testify |
Sonyflake | 一个Twitter Snowflake的实现,生成唯一的ID,适用于分布式系统 | https://github.com/sony/sonyflake |
Gocron | 一个简单的Go语言定时任务调度库,支持Cron风格的调度 | https://github.com/go-co-op/gocron |
Go-sqlmock | 用于Go测试的SQL数据库模拟库,可以模仿数据库的行为而不需要真实的数据库 | https://github.com/DATA-DOG/go-sqlmock |
Gomock | 一个用于Go的Mock生成工具,帮助开发者在测试中创建模拟对象 | https://github.com/golang/mock |
Swaggo | 用于生成Swagger API文档的工具,可以自动生成API文档并支持多种格式的输出 | https://github.com/swaggo/swag |
Nginx | 一款高性能的HTTP和反向代理服务器,广泛应用于负载均衡和静态文件服务 | https://nginx.org |
Websocket | 实现了WebSocket协议的库,用于支持实时、双向通信 | https://github.com/gorilla/websocket |
MySQL | 关系型数据库管理系统,广泛应用于Web应用程序和企业级应用程序 | https://www.mysql.com/cn |
Docker | 一个开源的容器化平台,用于自动化应用程序的部署、扩展和管理 | https://docs.docker.com/desktop/ |
讯飞星火 | 一个低延迟、功能丰富、接入简单的大模型 | https://www.xfyun.cn/doc/spark/Web.html |
工具 | 说明 | 官网 |
---|---|---|
GoLand | Golang开发工具 | https://www.jetbrains.com/go/ |
DBeaver | 开源的通用数据库管理工具 | https://dbeaver.io |
Apifox | API文档与测试平台 | https://apifox.com/ |
Typora | Markdown编辑器 | https://typoraio.cn/ |
Git | 版本控制系统 | https://git-scm.com/ |
宝塔 | 服务器管理面板 | https://www.bt.cn/new/index.html |
在进行部署前,必须先下载必须的依赖,搭建好环境后编写配置文件
环境准备完成后,就要拉取项目,编写配置文件
使用 Git 拉取项目:
git clone https://gitee.com/Mercury_blue/SmartLibrary.git
在项目的 config 目录下有配置文件 prod.yml
,对应生产环境。项目默认使用 local.yml
,需要把 prod.yml
复制到相同目录下命名为 local.yml
使用 go run ./cmd/server -conf=config/prod.yml
可以指定启动项目时使用哪个配置文件
配置文件格式如下,以 local.yml
为示例
env: local # 本地开发环境
http:
host: localhost
port: 8000
# 数字签名相关密钥
security:
api_sign:
app_key: 123456
app_security: 123456
jwt:
# jwt 密钥
key: QsYjsIruThlAkrfB89fw8prOaObmrch8
data:
db:
user:
driver: mysql
# 分别替换为 MySQL 的用户名、密码、地址、端口号、数据库名称
dsn: username:psssword@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local
redis:
# 替换为 Redis 实际地址
addr: 127.0.0.1:6379
# 替换为 Redis 实际密码
password: ""
db: 0
read_timeout: 0.2s
write_timeout: 0.2s
# 日志文件相关配置,分别配置日志级别、编码方式、存储路径、最大文件数量、保存天数、最大尺寸、是否启用压缩
log:
log_level: debug
encoding: console # console or json
log_file_name: "./storage/logs/server.log"
max_backups: 30
max_age: 7
max_size: 1024
compress: true
# AI 相关配置
chat:
host_url: wss://spark-api.xf-yun.com/v1.1/chat
app_id: xxxxxx
api_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
api_key: xxxxxxxxxxxxxxxxxxxxxxxx
比较重要的有 MySQL 的配置和 AI接口相关key、密钥的配置
进入项目的 database 目录下,执行 install.sql 脚本创建数据库和所需表结构,如有需要,可以执行 demo.sql 脚本,插入示例数据
执行完成后,把 MySQL 配置项对应的用户名、密码、数据库名等替换为实际的,即可完成 MySQL 的相关配置
进入讯飞星火大模型官网:https://xinghuo.xfyun.cn/spark 完成登录
之后进入讯飞开放平台:https://console.xfyun.cn/services/cbm?from=desk
首先创建应用,输入对应的应用名称、应用分类和功能描述
创建应用之后,按提示要求进行实名认证
实名认证之后,可以免费使用 Spark Lite 模型,使用其他付费模型也一样,申请完成后,把对应的 APPID、APISecret、APIKey 和接口地址写入到配置文件中
首先要确保环境已经搭建完成,MySQL 有对应的表、主机上有 Go 1.20 以上的环境,并且项目已经拉取完毕
以 GoLand 开发工具做演示:
打开 GoLand,点击 OPEN,导入拉取好的项目
拉取完项目后,点击左下角的 Terminal 打开终端
在终端中输入 go mod tidy
自动下载依赖项
依赖项下载完毕后,使用 go run ./cmd/server
运行项目,或者使用 go build ./cmd/server
编译成可执行文件后再启动项目
打开浏览器,输入 127.0.0.1:8000/ping
看到上图示例结果,说明本地部署完成
首先确保已经安装了 docker
docker -v
若正常输出版本号说明已经安装
如果安装了 git,则执行以下命令
git clone https://gitee.com/Mercury_blue/SmartLibrary.git /tmp
如果没有安装 git,需要手动下载项目,通过 ssh 远程连接工具或者其他方法把项目文件夹放到 /tmp
下
国内是访问不到 docker.io 的,在运行 dockerfile 构建镜像之前,需要先换源
可以使用阿里的镜像加速:容器镜像服务 (aliyun.com)
使用阿里加速时,一些镜像可能拉取不下来,比如 golang:1.20-alpine,这时候可以用其他的镜像源
暂时稳定且速度快的有 rainbond
镜像源
使用方法:
1、直接加前缀获取 Docker Hub 镜像
docker pull docker.rainbond.cc/library/golang:1.20-alpine
2、配置镜像加速器
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.rainbond.cc"]
}
EOF
systemctl daemon-reload
systemctl restart docker
进入到 dockerfile 所在位置
cd /tmp/SmartLibrary
执行 docker build
docker build -t smartlibrary:v1 .
第一次运行需要下载包依赖和编译,会很漫长
构建过程中不报错,完成后执行
docker images
如果能看到构建好的镜像,说明构建成功
REPOSITORY TAG IMAGE ID CREATED SIZE
smartlibrary v1 bb78ff663970 4 minutes ago 39.3MB
docker run -d --name smartlibrary -p 8000:8000 --restart unless-stopped smartlibrary:v1
启动完成后,执行
curl localhost:8000/
看到结果:
{"code":200,"message":"ok","data":{"<(^-^)>": "Thank you for using SmartLibrary!"}}
说明部署成功
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。