克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

SmartLibrary

项目介绍

AI智能图书馆是一个基于 Gin、Gorm、Mysql、Docker 等技术栈的自动化图书管理平台,系统有借阅用户、图书管理员、系统管理员三种角色,包含图书管理、公告留言管理、用户管理、AI在线推荐等多种功能。项目开发过程中采用了符合 Go 语言哲学的分层架构。系统界面设计简洁明了、上手简单、部署快速,拥有完整的功能介绍、接口文档、部署文档、错误文档等,代码完全开源,适合新手从零搭建、二次开发

本系统旨在通过智能算法为用户提供个性化的图书推荐服务,并允许图书管理员和系统管理员高效地管理图书资源和用户借阅活动。项目亮点:

  • AI驱动的个性化推荐:利用科大讯飞星火模型,能够根据用户提供的偏好信息,智能推荐图书,提升用户体验
  • 高效的条件筛选功能:用户可以在图书列表中通过多种条件(如作者、图书编号、图书描述等)快速筛选出感兴趣的图书,简化了查找过程
  • 全面的图书管理功能:图书管理员可以通过系统轻松管理用户的借阅证和借阅关系,实现借阅流程的规范化和数据化
  • 灵活的图书添加机制:系统管理员可以方便地添加新图书到系统,包括图书的详细信息和元数据,确保图书资源的更新和丰富

目录结构

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、密钥的配置

MySQL 配置

进入项目的 database 目录下,执行 install.sql 脚本创建数据库和所需表结构,如有需要,可以执行 demo.sql 脚本,插入示例数据

执行完成后,把 MySQL 配置项对应的用户名、密码、数据库名等替换为实际的,即可完成 MySQL 的相关配置

科大讯飞星火模型配置

进入讯飞星火大模型官网:https://xinghuo.xfyun.cn/spark 完成登录

之后进入讯飞开放平台:https://console.xfyun.cn/services/cbm?from=desk

首先创建应用,输入对应的应用名称、应用分类和功能描述

image-20240810214927777

创建应用之后,按提示要求进行实名认证

image-20240810215225487

实名认证之后,可以免费使用 Spark Lite 模型,使用其他付费模型也一样,申请完成后,把对应的 APPID、APISecret、APIKey 和接口地址写入到配置文件中

image-20240810215326897

本地部署

首先要确保环境已经搭建完成,MySQL 有对应的表、主机上有 Go 1.20 以上的环境,并且项目已经拉取完毕

以 GoLand 开发工具做演示:

打开 GoLand,点击 OPEN,导入拉取好的项目

image-20240810215911014

拉取完项目后,点击左下角的 Terminal 打开终端

image-20240810220015445

在终端中输入 go mod tidy 自动下载依赖项

image-20240810220123614

依赖项下载完毕后,使用 go run ./cmd/server 运行项目,或者使用 go build ./cmd/server 编译成可执行文件后再启动项目

image-20240812095447798

打开浏览器,输入 127.0.0.1:8000/ping

image-20240812095544708

看到上图示例结果,说明本地部署完成

Linux下的Docker部署

首先确保已经安装了 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!"}}

说明部署成功

接口文档

详细见:SmartLibrary 接口文档

错误文档

详情见:SmartLibrary 错误码文档

MIT License Copyright (c) 2024 Mercury Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

AI智能图书馆是一个基于 Gin、Gorm、Mysql、Docker等技术栈、集成了人工智能技术的高度自动化图书管理平台。采用了主流的互联网技术架构、用户友好的界面设计,上手简单、部署快速,拥有完整的功能介绍、接口文档、部署文档、错误文档等,代码完全开源,适合新手从零搭建、二次开发 展开 收起
Go 等 3 种语言
MIT
取消

发行版 (1)

全部
5个月前

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化