Skip to content
🗂️ 文章分类: 个人项目  
🏷️ 文章标签: 个人项目  
📅 文章创建时间: 2024-12-24
🕘️ 文章最后更新时间:2026-06-29

[toc]

个人项目笔记

介绍

这是对个人项目的总结性笔记,以及对个人项目的大致介绍和架构设计。

目前个人项目主要分为前端,后端,数据库及其依赖环境。这几个都是通过Docker容器来部署的。

个人项目总结

个人项目大致分为以下几个部分:

项目工程命名规范

所有的个人项目,都已统一采用以下命名规范。

  1. 所有的项目的工程目录名称都以shuyx- 开头。例如:shuyx-xxx 等。
  2. 其中前端工程,工程目录名称都以 -ui 结尾,表示这是一个前端工程。例如:shuyx-admin-ui, shuyx-uniapp-ui, shuyx-blog-ui 等。
    • 对于前端工程,前端工程目录名称中除了 -ui 结尾,其他部分需要根据前端工程的功能和技术栈,来确定工程目录名称。例如:shuyx-admin-ui 中的 admin 是管理页面,shuyx-uniapp-ui 中的 uniapp 是技术栈。
  3. 其中后端工程,工程目录名称中需要包含 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-uishuyx-admin-ui-containernginx 容器10086:10086https://ip:10086页面部署到nginx容器中
shuyx-uniapp-uishuyx-uniapp-ui-containernginx 容器10010:10010https://ip:10010页面部署到nginx容器中
shuyx-blog-uishuyx-blog-ui-containernginx 容器443:443,80:80https://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-gatewayshuyx-gateway-containerjava环境 容器31001:31001http://ip:31001网关服务
shuyx-admin-service(微服务架构)shuyx-systemshuyx-system-containerjava环境 容器31002:31002http://ip:31002系统服务
shuyx-admin-service(微服务架构)shuyx-mediashuyx-media-containerjava环境 容器31003:31003http://ip:31003媒体服务
shuyx-admin-service(微服务架构)shuyx-fileshuyx-file-containerjava环境 容器31004:31004http://ip:31004文件服务
shuyx-services-fastapi(单体应用架构)shuyx-examshuyx-services-fastapi-containerpython环境 容器39666:39666http://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-containermysql:8.0.20-alpine33306:3306数据库容器
redis-containerredis:7.2.3-alpine36379:6379缓存容器

其他依赖环境

其他依赖环境包含如下。

  • portainer docker 容器。通过web界面来管理服务器的docker环境的容器。
  • minio docker 容器。用于存储对象文件。
  • nacos docker 容器。用于给shuyx-admin-service工程(微服务架构)中的各个微服务提供服务发现和注册。

容器表格

容器名称容器基础镜像服务器端口:容器端口容器IP
portainer-containerportainer/portainer-ce38000:8000,39443:9443两个端口,一个服务端口,一个web端口
minio-containerminio/minio:7.1.1039000:9000,39001:9001两个端口,一个服务端口,一个web端口
nacos-containernacos/nacos:2.1.338848:8848,39848:9848,39849:9849三个端口,一个服务端口,一个web端口,一个注册端口

项目占用端口总结

以下各个项目使用的服务器端口。这些端口后续需要在服务器防火墙中开放。

bash
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进行容器化管理