[toc]
个人项目笔记
介绍
这是对个人项目的总结性笔记,以及对个人项目的大致介绍和架构设计。
目前个人项目主要分为前端,后端,数据库及其依赖环境。这几个都是通过Docker容器来部署的。
个人项目总结
个人项目大致分为以下几个部分:
项目工程命名规范
所有的个人项目,都已统一采用以下命名规范。
- 所有的项目的工程目录名称都以shuyx- 开头。例如:shuyx-xxx 等。
- 其中前端工程,工程目录名称都以 -ui 结尾,表示这是一个前端工程。例如:shuyx-admin-ui, shuyx-uniapp-ui, shuyx-blog-ui 等。
- 对于前端工程,前端工程目录名称中除了 -ui 结尾,其他部分需要根据前端工程的功能和技术栈,来确定工程目录名称。例如:shuyx-admin-ui 中的 admin 是管理页面,shuyx-uniapp-ui 中的 uniapp 是技术栈。
- 其中后端工程,工程目录名称中需要包含 services 或 service 字样,表示这是一个后端服务工程。例如:shuyx-services-fastapi, shuyx-admin-service 等。
- 对于后端工程,工程目录名称还要根据后端工程采用的架构或功能,来确定工程目录名称。例如: shuyx-services-fastapi 是一个基于fastapi框架的后端多服务工程。shuyx-admin-service 是一个用于管理的后端多服务工程。
项目部署规范
目前所有的个人项目都采用Docker容器来部署。并且主要使用docker compose 来部署编排各个项目的容器。
对于前端工程项目,每个前端工程都需要部署在各自的nginx容器中,并且根据需要来配置SSL证书。容器名称为:工程名-container。例如:shuyx-admin-ui-container, shuyx-uniapp-ui-container等。
对于后端工程,则是根据后端工程使用的技术栈来部署到对应的容器中。容器名称为:工程名-container。例如:shuyx-services-fastapi-container, shuyx-admin-service-container 等。
- 若后端工程是微服务架构,即该工程可以打包多个子服务,那么可以给每个子服务都部署一个对应的容器。
- 若后端工程是单服务架构,即该工程有多个子模块功能,但是只能打包一个子服务,那么可以给该工程部署一个对应的容器。只不过这一个容器中包含多个子模块功能而已。
注意:
- 所有的前端工程容器(nginx容器)都需要用https协议来访问(如果有SSL证书的话)。
- 所有的后端工程容器(python容器,java容器等)都需要用http协议来访问。
- 即通过前端服务的https协议来访问后端服务的http协议端口。
前端项目
shuyx-admin-ui 前端工程。所有的管理后台页面都在这个工程中。采用vue3 + element-plus + pinia + axios 等技术栈。
- 包含shuyx-system 子系统的前端管理页面。
- 包含shuyx-media 子系统的前端管理页面。
- 包含shuyx-file 子系统的前端管理页面。
- 包含shuyx-exam 子系统的前端管理页面。即管理员用户进行管理考试,题目等的页面。
shuyx-uniapp-ui 前端工程。主要是用uniapp框架写的(一套代码可以打包为H5页面 和 微信小程序)。
- 目前包含 shuyx-exam 子模块的前端H5页面。即用户进行考试和练题的页面。
shuyx-blog-ui 博客的前端工程。采用vue3 + vuepress 等技术栈。
- 主要用于展示个人的博客文章。
容器表格
前端工程统一由nginx容器来部署。每个前端工程都有一个对应的nginx容器。并且nginx容器内部也会配置好SSL证书。
因此所有的前端容器都需要用https协议来访问。
| 工程名称 | 容器名称 | 容器基础镜像 | 服务器端口:容器端口 | 访问地址 | 描述 |
|---|---|---|---|---|---|
| shuyx-admin-ui | shuyx-admin-ui-container | nginx 容器 | 10086:10086 | https://ip:10086 | 页面部署到nginx容器中 |
| shuyx-uniapp-ui | shuyx-uniapp-ui-container | nginx 容器 | 10010:10010 | https://ip:10010 | 页面部署到nginx容器中 |
| shuyx-blog-ui | shuyx-blog-ui-container | nginx 容器 | 443:443,80:80 | https://ip:443,http://ip:80 | 页面部署到nginx容器中 |
后端项目
shuyx-admin-service 工程。该工程是用springcloud-alibaba 微服务框架 + java 写的。目前包含以下子系统(每个子系统都是一个微服务):
- shuyx-gateway 子系统。 用于管理系统的网关功能。包括路由,负载均衡,认证,授权等。
- shuyx-system 子系统。 用于管理系统的功能模块。包括用户管理,角色管理,菜单管理,日志管理等。
- shuyx-media 子系统。类似在线电影网站的媒体管理功能。包括视频管理等。
- shuyx-file 子系统。用于管理文件的上传,下载,删除等操作。
shuyx-services-fastapi 工程。该工程是用fastapi框架 + python 写的。目前包含以下子系统:
- 包含 shuyx-exam 子模块。用于考试和练题相关的功能。包括考试管理,题目管理,学生管理,成绩管理等。
容器表格
后端工程统一由各自技术栈对应的镜像容器来部署。并且后端服务不会配置SSL证书,即所有的后端容器都需要用http协议来访问。
| 工程名称 | 子系统(或子模块)名称 | 容器名称 | 容器基础镜像 | 服务器端口:容器端口 | 访问地址 | 描述 |
|---|---|---|---|---|---|---|
| shuyx-admin-service(微服务架构) | shuyx-gateway | shuyx-gateway-container | java环境 容器 | 31001:31001 | http://ip:31001 | 网关服务 |
| shuyx-admin-service(微服务架构) | shuyx-system | shuyx-system-container | java环境 容器 | 31002:31002 | http://ip:31002 | 系统服务 |
| shuyx-admin-service(微服务架构) | shuyx-media | shuyx-media-container | java环境 容器 | 31003:31003 | http://ip:31003 | 媒体服务 |
| shuyx-admin-service(微服务架构) | shuyx-file | shuyx-file-container | java环境 容器 | 31004:31004 | http://ip:31004 | 文件服务 |
| shuyx-services-fastapi(单体应用架构) | shuyx-exam | shuyx-services-fastapi-container | python环境 容器 | 39666:39666 | http://ip:39666 | 考试练题服务 |
由于 shuyx-services-fastapi 工程是用的是单体应用架构。因此打包部署出来的一个容器名称以工程名为前缀。例如:shuyx-services-fastapi-container。而不是以子模块名为前缀。并且这一个容器包括了多个子模块的功能。
数据库
mysql数据库。 数据库名称为shuyx_db。包含以下表。
- sys_* 系统相关的表。用于给shuyx-admin-service 工程的各个服务提供数据支持。
- med_* 媒体相关的表。用于给shuyx-media 子系统的各个服务提供数据支持。
- tst_* 考试相关的表。用于给shuyx-services-fastapi 工程的各个服务提供数据支持。
redis数据库。 用于缓存数据。
容器表格
| 容器名称 | 容器基础镜像 | 服务器端口:容器端口 | 描述 |
|---|---|---|---|
| mysql-container | mysql:8.0.20-alpine | 33306:3306 | 数据库容器 |
| redis-container | redis:7.2.3-alpine | 36379:6379 | 缓存容器 |
其他依赖环境
其他依赖环境包含如下。
- portainer docker 容器。通过web界面来管理服务器的docker环境的容器。
- minio docker 容器。用于存储对象文件。
- nacos docker 容器。用于给shuyx-admin-service工程(微服务架构)中的各个微服务提供服务发现和注册。
容器表格
| 容器名称 | 容器基础镜像 | 服务器端口:容器端口 | 容器IP |
|---|---|---|---|
| portainer-container | portainer/portainer-ce | 38000:8000,39443:9443 | 两个端口,一个服务端口,一个web端口 |
| minio-container | minio/minio:7.1.10 | 39000:9000,39001:9001 | 两个端口,一个服务端口,一个web端口 |
| nacos-container | nacos/nacos:2.1.3 | 38848:8848,39848:9848,39849:9849 | 三个端口,一个服务端口,一个web端口,一个注册端口 |
项目占用端口总结
以下各个项目使用的服务器端口。这些端口后续需要在服务器防火墙中开放。
39000 minio服务端口
39001 minio界面端口
33306 mysql服务端口
38848 nacos界面端口
39443 protainer界面端口
39666 shuyx-services-fastapi后台服务端口
31001 shuyx-gateway-services后台服务端口
10086 shuyx-admin-ui界面端口
10010 shuyx-uniapp-ui访问界面
80 http默认端口,也是shuyx-blog-ui的http访问端口
443 https默认端口,也是shuyx-blog-ui的https访问端口
22 ssh默认端口,用于ssh工具登录访问服务器。个人项目全架构图
架构关系图
架构图说明
调用关系:
- 管理端:浏览器 → shuyx-admin-ui → shuyx-gateway → SpringCloud后端服务
- 用户端:移动端App/微信小程序/浏览器 → shuyx-uniapp-ui → shuyx-exam(直接调用FastAPI服务)
- SpringCloud后端服务通过Nacos进行服务注册和发现
- 所有后端服务共享MySQL、Redis、MinIO存储数据
- 所有组件通过Portainer进行容器化管理
