# 小鹿超市项目 ## 配置信息 ### 服务器硬件配置 | 硬件 | 配置 | 数量 | 参考单价 | |-----|----------------------------|----|------------| | CPU | E5 2673v3 | 2 | 56 | | 主板 | 华南金牌 x99-8D3 双路 | 1 | 580 | | 内存 | 三星 32G DDR3 ECC 4R*4 1866L | 2 | 88 | | 机箱 | 金河田 凌霜Pro 黑色 | 1 | 148 | | 电源 | 鑫谷 GN650 650W 金牌 | 1 | 299 | | 风扇 | A500 风扇 | 2 | 40 | | 显卡 | 亮机卡 | 1 | 20 | | 硬盘 | 三星 970EVO 512G | 1 | 600(笔记本拆机) | | 硬盘 | 希捷 紫盘 4T | 1 | 439 | | | | 总价 | 2454 | ### 内网穿透服务器(测试服务器) | 厂商 | 配置 | IP | 时间 | 地区 | |-----|---------|----|---------|------| | 腾讯云 | 2c2g3m | | 2024-06 | 北京 | | 腾讯云 | 4c4g8m | | 2024-06 | 北京 | | 华为云 | 2c4g1m | | 2024-02 | 北京 | | 阿里云 | 2c2g2m | | 2024-06 | 乌兰察布 | | 雨云 | 8c8g80m | | 2024-03 | 洛杉矶 | | | | | | | ### 服务器参数 | 指标 | 参数 | |-----------|------| | 核心 | 24 | | 线程 | 48 | | 内存 | 64 | | 固态硬盘 | 512G | | 机械硬盘(未购买) | | | | | ### 环境配置需求 | | | |-------|-----------------| | 底层虚拟化 | Debian12 PVE | | 集群系统 | CentOS 8 Stream | | | | ### 集群分配设置 | 模块 | 简称 | 核心 | 内存 | 硬盘 | 数量 | IP | 端口 | |-------|----------|----|----|-----|----|----|----| | 权限模块 | acl | 1 | 1 | 10 | 2 | | | | 区域模块 | Sys | 1 | 1 | 10 | 2 | | | | 订单模块 | order | 2 | 2 | 10 | 2 | | | | 支付模块 | payment | 1 | 2 | 10 | 2 | | | | 搜索模块 | search | 2 | 2 | 10 | 2 | | | | 用户模块 | user | 1 | 1 | 10 | 2 | | | | 商品模块 | product | 1 | 2 | 10 | 2 | | | | 区域模块 | sys | 1 | 1 | 10 | 2 | | | | 购物车模块 | cart | 2 | 1 | 10 | 2 | | | | 优惠券模块 | activity | 1 | 1 | 10 | 2 | | | | 网关 | gateway | 1 | 2 | 10 | 3 | | | | 后台 | admin | 1 | 2 | 5 | 2 | | | | 小程序 | user | | | | | | | | 总数 | | 25 | 33 | 110 | 23 | | | ### 环境配置 | 模块 | 版本 | 核心 | 内存 | 硬盘 | 数量 | IP | | |---------------|------------------------------|----|----|----|----|----|------| | MySQL | 8.0.30 | | | | | | | | Redis | 7.2.4 | | | | | | | | Minio | RELEASE.2023-08-16T20-17-30Z | | | | | | | | RabbitMQ | 3.12.12 | | | | | | | | Elasticsearch | 7.17.7 | | | | | | | | Kinbana | 7.17.7 | | | | | | | | Nacos | 2.2.3 | | | | | | | | | | | | | | | | | SkyWalking | 9.7.0 | | | | | | | | DevOps | | | | | | | | | Gitea | 1.21.3 | | | | | | | | Nexus3 | 2023-12-27T07:29 | | | | | | | ## 技术栈 ### 后端技术栈 | 核心技术 | | :----------------------------------------------------------- | | SpringBoot:简化新Spring应用的初始搭建以及开发过程 | | SpringCloud:基于Spring Boot实现的云原生应用开发工具,SpringCloud使用的技术:(Spring Cloud Gateway、Spring Cloud OpenFeign、Spring Cloud Alibaba Nacos等) | | MyBatis-Plus:持久层框架 | | Redis:缓存数据库 | | Redisson:基于redis的Java驻内存数据网格,实现分布式锁 | | RabbitMQ:消息中间件 | | ElasticSearch + Kibana: 全文检索服务器 +可视化数据监控 | | ThreadPoolExecutor:线程池来实现异步操作,提高效率 | | OSS/MinIO:文件存储服务 | | Knife4j(Swagger):Api接口文档工具 | | Nginx:负载均衡 | | MySQL:关系型数据库 | | 微信支付 | | 微信小程序 | | Docker:容器技术 | | DockerFile:管理Docker镜像命令文本 | | SkyWalking:链路追踪、日志、监控框架 | | | | | ### 前端技术栈 | 核心技术 | | ------------------ | | UinApp | | vue-admin-template | | ElementUI | | Axios | | Node.js | | Npm | | | | | | | ### 开发工具 | 开发工具 | 版本 | | ----------------------------- | -------------- | | Intellil IDEA Ultimate | 2023.3.2 | | DataGrip | 2023.3.2 | | WebStorm | 2023.3.2 | | HBuilderx | 3.8.12 | | Google Chrome | 120.0.6099.216 | | Another Redis Desktop Manager | 1.6 | | Apifox | 2.3.19 | | Parallels Desktop | 18.1.1 | | Termius | 8.4.0 | | 微信开发者工具 | 1.06.2306020 | ### 操作系统 | 开发工具 | 版本 | |---------------------|--------| | Mac OS Ventura | 13.6.3 | | Linux CentOS | 7.9 | | Linux CentOS Stream | 8 | | Linux CentOS Stream | 9 | ## 项目环境部署 ### portainer docker 可视化 ```shell docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce ``` ### Mysql 数据库 ```shell docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest ``` ### Redis 缓存 ```shell docker run -itd --name redis -p 6379:6379 redis ``` ### RabbitMQ 消息队列 ```shell docker run -d --restart=always -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.8-management docker exec -it rabbit /bin/bash #安装插件 rabbitmq-plugins enable rabbitmq_management ``` ### Nacos 注册中心 ```shell docker run -d --name nacos-server -p 8848:8848 -p 9848:9848 \ -e MODE=standalone \ -e JVM_XMS=512m \ -e JVM_XMX=512m \ -v /logs/nacos:/home/nacos/logs \ nacos/nacos-server:v2.2.3 ``` ### ES + Kibana 分词器 ```shell docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -d elasticsearch:7.17.7 docker exec -it elasticsearch /bin/bash ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip docker restart elasticsearch docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.17.7 ``` 其中服务器可能因为网络原因下载不下来 ik 分词器,我们下载后本地导入安装 ```shell # ik 分词器在服务器中的位置 /root/elasticsearch-analysis-ik-7.17.7.zip # 导入 docker 中 docker cp /root/elasticsearch-analysis-ik-7.17.7.zip elasticsearch:/tmp/elasticsearch-analysis-ik-7.17.7.zip # 进入容器 docker exec -it elasticsearch /bin/bash # 安装 ./bin/elasticsearch-plugin install file:///tmp/elasticsearch-analysis-ik-7.17.7.zip # 退出后继续按照上述内容重启 安装 kibana exit ``` ### GrayLog 日志框架 (已弃用,日志服务整合到 SkyWalking) ```shell #部署Elasticsearch docker run -d \ --name elasticsearch \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v es-data:/usr/share/elasticsearch/data \ -v es-plugins:/usr/share/elasticsearch/plugins \ --privileged \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.17.5 #部署MongoDB(使用之前部署的服务即可) docker run -d \ --name mongodb \ -p 27017:27017 \ --restart=always \ -v mongodb:/data/db \ -e MONGO_INITDB_ROOT_USERNAME=xlcs \ -e MONGO_INITDB_ROOT_PASSWORD=123321 \ mongo:4.4 #部署 docker run \ --name graylog \ -p 9000:9000 \ -p 12201:12201/udp \ -e GRAYLOG_HTTP_EXTERNAL_URI=http://:9000/ \ -e GRAYLOG_ELASTICSEARCH_HOSTS=http://:9200/ \ -e GRAYLOG_ROOT_TIMEZONE="Asia/Shanghai" \ -e GRAYLOG_WEB_ENDPOINT_URI="http://:9000/:9000/api" \ -e GRAYLOG_PASSWORD_SECRET="somepasswordpepper" \ -e GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 \ -e GRAYLOG_MONGODB_URI=mongodb://xlcs:123321@:27017/admin \ -d \ graylog/graylog:4.3 ``` ### SkyWalking 链路追踪、日志、监控框架 ```yaml version: "3" services: elasticsearch: image: elasticsearch:8.4.2 container_name: elasticsearch ports: - "9200:9200" healthcheck: test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出 interval: 60s #⼼跳检测间隔周期 timeout: 10s retries: 3 start_period: 60s #⾸次检测延迟时间 environment: discovery.type: single-node #单节点模式 ingest.geoip.downloader.enabled: "false" bootstrap.memory_lock: "true" ES_JAVA_OPTS: "-Xms512m -Xmx512m" TZ: "Asia/Shanghai" xpack.security.enabled: "false" #单机模式 ulimits: memlock: soft: -1 hard: -1 skywalking-oap: image: apache/skywalking-oap-server:9.4.0 container_name: skywalking-oap depends_on: elasticsearch: condition: service_healthy links: - elasticsearch environment: SW_HEALTH_CHECKER: default SW_STORAGE: elasticsearch SW_STORAGE_ES_CLUSTER_NODES: 192.168.31.50:9200 JAVA_OPTS: "-Xms2048m -Xmx2048m" TZ: Asia/Shanghai SW_TELEMETRY: prometheus healthcheck: test: ["CMD-SHELL", "/skywalking/bin/swctl ch"] interval: 30s timeout: 10s retries: 3 start_period: 10s restart: on-failure ports: - "11800:11800" - "12800:12800" skywalking-ui: image: apache/skywalking-ui:9.4.0 container_name: skywalking-ui depends_on: skywalking-oap: condition: service_healthy links: - skywalking-oap ports: - "8080:8080" environment: SW_OAP_ADDRESS: http://192.168.31.50:12800 SW_HEALTH_CHECKER: default TZ: Asia/Shanghai healthcheck: test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出 interval: 60s #⼼跳检测间隔周期 timeout: 10s retries: 3 start_period: 60s #⾸次检测延迟时间 ``` ## 开发需求 | | | | |------|------|------| | | | | | | | | | | | |