目录

项目概述

项目地址

功能模块

框架与技术栈

单体应用版本

微服务版本

安装教程

单体应用与微服务应用部署说明大纲

单体应用部署说明

安装git 拉取代码

前端部署

安装Node.js 和 npm

安装依赖项并构建

使用Nginx部署

后端部署

原始构建运行

使用systemd来启动服务(应用崩溃时自动重启)

重新加载配置并启动服务

后续更新

数据库部署

微服务应用部署说明

本地构建打包形式

远程仓库部署

K8s部署

安装 kubectl:

安装虚拟化驱动(以 Docker 为例):

安装 Minikube

启动 Minikube

验证安装

启动服务

数据初始化

步骤 1:将本地 aitest.sql 复制到 MySQL 容器内

步骤 2:进入 MySQL 容器

步骤 3:使用 mysql 命令执行 SQL 脚本

登陆


项目概述

乐思平台是一款集成多种功能的综合性应用平台,涵盖用户管理、学习答题与 AI 图像识别场景。用户可通过 QQ 邮箱注册、登录,便捷管理个人账号;内置练题系统,支持在线答题,答题成绩实时记录于后台成绩中心,还能按需导出作答情况 Word 文档,方便复盘总结。集成先进 AI 模块,依托 YOLOv8 技术,允许用户上传图片识别,识别后的图片自动存储,随时查看详情。系统界面配备直观数据大屏,精准呈现识别次数、用户注册量等关键指标。

平台经历了从单体应用到微服务架构的演进,不断优化性能与扩展性,以满足日益增长的用户需求和复杂的业务场景。

项目地址

单体应用版本

https://gitee.com/libihao520/ai-recognition-system

微服务版本

1. (前端) LeSi-Platform-Web

2. (网关/聚合层) LeSi-Platform-Api

3. (管理后台核心) LeSi-Admin-Api

4. (AI处理核心) LeSi-AI-Api

该平台拥有演示地址:http://47.107.226.106:8080/login,用户可使用账号 “lbhlbh”、密码 “123456” 登录体验。

功能模块

无论是单体应用版本还是微服务版本,功能模块基本一致,以下是部分功能截图:

登录注册:

数据大屏

题库系统:

在线识别:

AI 大模型:

用户管理:

框架与技术栈

单体应用版本

  • 基于微软.NetCore8.0、C#12.0 开发,采用主流数据库 MySQL、Redis,ORM 框架为 EFCore。
  • 后端:asp.net Core Api、JWT、QRCode、YoloDotNet、Autofac、AutoMapper、EPPlus、word 模板引擎 SharpDocx、YOLOv8、ONNX。
  • 前端:vue3、nodejs、vuex、axios 请求、promise、element ui、element plus、pinia 用户仓库与 token 持久化。

微服务版本

  • 基于微软.NetCore8.0、.NetCore9.0 开发,采用主流数据库 MySQL、Redis,ORM 框架为 EFCore、Dapper。
  • 后端:
    • Platform-Api (网关 / 聚合层):.NET 8 MVC, EFCore, SignalR, Autofac, AutoMapper, EPPlus, SharpDocx, QRCode。
    • AI Server (AI 处理核心):.NET 8, Dapper, RabbitMQ/Kafka, YoloDotNet, ONNX。
    • Admin Server (管理后台核心):.NET 8, DDD, 中介者模式,CQRS, EFCore 仓储,动态密钥,gRPC。
  • 前端:vue3、nodejs、vuex、axios 请求、promise、element ui、element plus、pinia 用户仓库与 token 持久化。
  • 服务通讯:gRPC (内部), 消息队列 (异步解耦), SignalR (前后端实时)。
  • 运维部署:Kubernetes (k8s), Docker, Jenkins CI/CD。

安装教程

模型合并:由于演示模型过大,单独上传到了百度云网盘,需要的用户可自行下载。通过网盘分享的文件:Model,链接: https://pan.baidu.com/s/1sTZ8uQLpyrl3hygkZ3VmvA?pwd=ewfk 提取码: ewfk。模型下载下来后放到路径 ai-recognition-system\Ai-Web-API\WebApi\Model 下。

单体应用与微服务应用部署说明大纲

单体应用部署说明

安装git 拉取代码
# 安装git
sudo apt update
sudo apt install git
git --version

# 拉取代码
cd ../home
mkdir -p projects
cd projects
git clone https://gitee.com/libihao520/ai-recognition-system.git
前端部署
安装Node.js 和 npm

安装Node.js 和 npm(Node Package Manager)。这些工具通常一起安装,因为 npm 是 Node.js 的包管理器。

# node建议v16.20.2
# 若使用sudo apt install nodejs npm命令安装Node.js和npm时
# 通常安装的是Ubuntu官方软件仓库中提供的版本。这些版本可能是稳定的,但不一定是最新的
# 如果要指定版本,通过其他方式安装


#方法一 使用NodeSource的安装脚本指定安装 node  v16.20.2
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
# 添加NodeSource的APT源
VERSION=node_16.x
DISTRO=$(lsb_release -s -c)
echo "deb https://deb.nodesource.com/$VERSION $DISTRO main" | sudo tee /etc/apt/sources.list.d/nodesource.list
# 更新APT源并安装Node.js
sudo apt update
sudo apt install nodejs -y

# 安装完成后查看版本
node -v
npm -v

# 换镜像源
npm config set registry https://mirrors.huaweicloud.com/repository/npm/
安装依赖项并构建
cd ai-recognition-system/Vue3-ai-system-admin
npm install
npm run build
使用Nginx部署

安装Nginx

sudo apt update
sudo apt install nginx

vim /etc/nginx/nginx.conf

# 找到http包裹部分,修改为如下部分

# listen : 监听的端口
# server_name : 你当前服务器的 IP 或者 域名
http {
        server {
                listen     8080;
                server_name 47.107.226.106;
                
                root /home/projects/ai-recognition-system/Vue3-ai-system-admin/dist;
                index index.html;
                location / {
                         try_files $uri $uri/ /index.html;
                           }
                }
      }
# 退出编辑
:wq!
# 检查配置并重启Nginx
sudo nginx -t
sudo systemctl restart nginx
# 服务器开端口,完成!
后端部署

添加Microsoft包管理源

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update

安装.Net 8.0SDK

sudo apt-get install -y dotnet-sdk-8.0
# 查看版本是否安装成功
dotnet --version

字体安装

cd /usr/share/fonts/truetype/msttcorefonts/
sudo apt install cabextract
wget https://www.freedesktop.org/software/fontconfig/webfonts/webfonts.tar.gz
# 解压
tar -xzf webfonts.tar.gz
cd msfonts/
cabextract *.exe
# 移动字体
cp *.ttf *.TTF ~ /usr/share/fonts/truetype/msttcorefonts/
原始构建运行
cd /home/projects/ai-recognition-system/Ai-Web-API
# 构建
dotnet build -c Release
# 运行项目
dotnet  /home/projects/ai-recognition-system/Ai-Web-API/WebApi/bin/Release/net8.0/WebApi.dll --urls http://0.0.0.0:5157
使用systemd来启动服务(应用崩溃时自动重启)
sudo vim /etc/systemd/system/webapi.service

在文件中添加如下内容

[Unit]
Description=Ai Web API Service
After=network.target

[Service]
WorkingDirectory=/home/projects/ai-recognition-system/Ai-Web-API/WebApi/bin/Release/net8.0
ExecStart=/usr/bin/dotnet ./WebApi.dll --urls http://0.0.0.0:5157
Restart=always
# 如果需要,可以取消注释并设置内存限制或运行用户
# MemoryMax=500M
# User=yourusername
Environment=ASPNETCORE_ENVIRONMENT=Production
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=webapi

[Install]
WantedBy=multi-user.target
重新加载配置并启动服务
sudo systemctl daemon-reload
sudo systemctl start webapi.service
#  设置服务开机自启(可选)
sudo systemctl enable webapi.service
# 检查服务状态和日志
# 使用 systemctl status 命令检查服务的状态,并使用 journalctl 命令查看服务的日志输出。
sudo systemctl status webapi.service
sudo journalctl -u webapi.service -f
后续更新
# 更新代码
cd /home/projects/ai-recognition-system
git pull origin master

# 前端
cd /home/projects/ai-recognition-system/Vue3-ai-system-admin
npm run build

# 后端(systemctl )
sudo systemctl stop webapi.service
cd /home/projects/ai-recognition-system/Ai-Web-API
dotnet build -c Release
sudo systemctl start webapi.service

# 查看日志
sudo journalctl -u webapi.service -f
数据库部署

自行安装mysql与redis

微服务应用部署说明

本地构建打包形式

 1. (前端) LeSi-Platform-Web

2. (网关/聚合层) LeSi-Platform-Api

3. (管理后台核心) LeSi-Admin-Api

4. (AI处理核心) LeSi-AI-Api

每个项目依次拉取代码

每个项目的根目录下都有一个Dockerfile文件

如下图在每个项目下面分别执行dockerfile文件

命令:

docker build -t lesi-platform-web .
docker build -t lesi-platform-api .
docker build -t lesi-ai-api .
docker build -t lesi-admin-api .

等镜像全部构建完成之后,最后执行

docker-compose -f docker-compose.local.yml up -d

所有的项目启动了,访问http://127.0.0.1:8080/login查看服务是否正常

远程仓库部署

所有的项目服务我都已经已经上传到阿里云镜像平台了,因此不需要改动代码,只需要快速搭建的话,只要拉取 (网关/聚合层) LeSi-Platform-Api 代码,在根目录下执行

docker-compose -f docker-compose.aliyun.yml up -d
K8s部署

需提前安装k8s环境,我这里以minikube为例

安装 kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
安装虚拟化驱动(以 Docker 为例):
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER  # 将当前用户加入 docker 组(需重新登录生效)
安装 Minikube
# 运行以下命令确认你的系统架构:
uname -m

# 如果是 x86_64,说明是 64 位 Intel/AMD CPU 安装这个版本
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 如果是 aarch64 或 arm64,说明是 ARM 架构
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube-linux-arm64 /usr/local/bin/minikube
启动 Minikube

minikube start --driver=docker # 使用 Docker 驱动

如果遇到权限问题,请确保当前用户在 docker 组(执行 newgrp docker 或重新登录)。

验证安装
minikube status
kubectl get pods -A  # 检查 Kubernetes 集群状态
启动服务

启动服务编排好的yaml文件我都放在了 (网关/聚合层) LeSi-Platform-Api 项目的根目录k8s文件夹下面。

启动 Minikube:

bashminikube start --driver=docker --memory=8g --cpus=4

创建命名空间:

bashkubectl apply -f namespace.yaml

依次部署各个服务:

kubectl apply -f mysql-deployment.yaml
kubectl apply -f redis-deployment.yaml
kubectl apply -f rabbitmq-deployment.yaml
kubectl apply -f admin-api-deployment.yaml
kubectl apply -f platform-api-deployment.yaml
kubectl apply -f ai-api-deployment.yaml
kubectl apply -f platform-web-deployment.yaml

访问前端服务:

minikube service platform-web -n lesi-platform

会获得一个ip地址,打开地址,就可以访问到我们的服务了。

数据初始化

数据库初始化数据放在了(网关/聚合层) LeSi-Platform-Api 项目的aitest文件中,直接执行就好了,下面只举例微服务中执行步骤。

手动执行 aitest.sql 文件,可以通过 kubectl exec 进入 MySQL 容器,再使用 mysql 命令执行脚本。具体步骤如下:

步骤 1:将本地 aitest.sql 复制到 MySQL 容器内

把本地的 aitest.sql 文件上传到正在运行的 MySQL Pod 中(例如 /tmp 目录):

# 语法:kubectl cp 本地文件路径 命名空间/ Pod名称:容器内目标路径
kubectl cp ./aitest.sql lesi-platform/mysql-864ddd5c77-6rgmg:/tmp/aitest.sql
步骤 2:进入 MySQL 容器

通过 kubectl exec 登录到 MySQL 容器内部:

kubectl exec -it -n lesi-platform mysql-864ddd5c77-6rgmg -- /bin/bash

执行后会进入容器的命令行界面(类似 bash-4.4#)。

步骤 3:使用 mysql 命令执行 SQL 脚本

在容器内,通过 MySQL 客户端连接数据库并执行 aitest.sql

# 连接 MySQL(使用你的 root 密码,即 MYSQL_ROOT_PASSWORD 的值)
mysql -u root -p

# 输入密码
Enter password: 1qazZAQ!hhh333

# 执行 SQL 脚本(假设脚本需要指定数据库,若未指定可先创建或切换数据库)
mysql> source /tmp/aitest.sql;

# 执行完成后退出 MySQL 客户端
mysql> exit;

# 退出容器
exit

登陆

自此,项目已经部署完成了,系统的默认账号密码是

账号:lbhlbh

密码:123456

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐