学茶商城项目
- 项目介绍
“学茶商城”是一个面向茶文化爱好者的一站式线上平台,集茶叶、茶具销售与茶艺教学于一体。项目以SpringCloud+Vue3为核心架构,采用MySQL、Redis、Nacos、RocketMQ等技术,实现高并发秒杀、会员积分、直播授课、社区问答、溯源扫码等功能;小程序端提供扫码识茶、附近茶馆、茶师预约,打造“学茶-购茶-品茶-论茶”闭环。通过数字化手段传播茶文化,让新手轻松入门,老客深度交流,构建有温度的茶友生态圈。
项目结构
teamall/
├── code
│ ├── backend
│ │ ├── tarena-passport # 验证码程序
│ │ └── tarena-tp-tea
│ │ ├── tea-server # 学茶网前台程序
│ │ └── tea-admin # 学茶后台管理程序
│ └── page
│ ├── admin-page # 后台管理页面
│ └── front-page # 商品展示页面
└── sql # 数据库、表结构依赖环境
软件包 | 备注 |
java-openjdk | 版本推荐 java-1.8.0 |
redis | 版本不低于 3.0 |
mysql-server | 版本不低于 8.0 |
nacos | 版本不高于 2.1.0 |
rocketmq | 版本不低于 3.0 |
nginx | 版本不低于 1.0 |
编译工具
- maven-3.6.3
- node-v16.13
架构图例
部署文档
mysql 安装
# 安装部署
[root@tea ~]# dnf install -y mysql-server
[root@tea ~]# systemctl enable --now mysqld
[root@tea ~]# mysqladmin -uroot password '123456'
# 验证测试
[root@tea ~]# mysql -uroot -p123456 -h127.0.0.1 -e 'SELECT 1;'
Enter password:
+---+
| 1 |
+---+
| 1 |
+---+redis 安装
# 安装部署
[root@tea ~]# dnf install -y redis
[root@tea ~]# vim /etc/redis.conf
69: bind 0.0.0.0
507: requirepass 123456
[root@tea ~]# systemctl enable --now redis
# 验证测试
[root@tea ~]# redis-cli -h 127.0.0.1 -a 123456
127.0.0.1:6379> ping
PONGrocketmq 安装
[root@tea ~]# dnf install -y unzip git java-1.8.0-openjdk-devel
[root@tea ~]# unzip package/rocketmq-all-4.9.4-bin-release.zip
[root@tea ~]# mv rocketmq-all-4.9.4-bin-release /usr/local/rocketmq
# 启动 MQNamesrv
[root@tea ~]# setsid /usr/local/rocketmq/bin/mqnamesrv
OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
# 启动 MQBroker
[root@tea ~]# vim /usr/local/rocketmq/bin/runbroker.sh
85: JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"
[root@tea ~]# setsid /usr/local/rocketmq/bin/mqbroker
The broker[tea, 192.168.88.200:10911] boot success. serializeType=JSONnacos 安装
# 解压软件包
[root@tea ~]# tar zxf package/nacos-server-2.0.2.tar.gz
# nacos 需要使用 mysql 作为数据源
[root@tea ~]# ls nacos/conf/nacos-mysql.sql
nacos/conf/nacos-mysql.sql
# 创建数据库并导入表结构
[root@tea ~]# mysql -uroot -p123456
mysql> CREATE DATABASE nacos;
mysql> USE nacos
mysql> SOURCE nacos/conf/nacos-mysql.sql;
# 创建管理用户
mysql> CREATE USER 'nacos'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON nacos.* TO 'nacos'@'%';
# 设置数据库地址
[root@tea ~]# vim nacos/conf/application.properties
33: spring.datasource.platform=mysql
36: db.num=1
39: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
40: db.user.0=nacos
41: db.password.0=123456
# 启动 standalone 模式
[root@tea ~]# mv nacos /usr/local/
[root@tea ~]# /usr/local/nacos/bin/startup.sh -m standalone
[root@tea ~]# cat /usr/local/nacos/logs/start.out- 访问 web页面:8848/nacos
用户名:nacos
密码:nacos
安装前后端代码编译工具maven和node
# 安装 maven
[root@tea ~]# tar -zxf package/apache-maven-3.6.3-bin.tar.gz
[root@tea ~]# mv apache-maven-3.6.3/ /usr/local/maven
[root@tea ~]# tar -Jxf package/maven_repository.tar.xz -C /usr/local/maven/
[root@tea ~]# sed '55i\ <localRepository>/usr/local/maven/repository</localRepository>' -i /usr/local/maven/conf/settings.xml
# 安装 node
[root@tea ~]# tar -zxf package/node-v16.13.0-linux-x64.tar.gz
[root@tea ~]# mv node-v16.13.0-linux-x64/ /usr/local/node
# 配置编译环境
[root@tea ~]# source <(echo export PATH=${PATH}:/usr/local/maven/bin:/usr/local/node/bin |tee -a ~/.bashrc)
[root@tea ~]# npm -v
8.1.0发布服务
[root@tea ~]# mkdir -p /var/teamall/{front,frontApi,images,admin,adminApi,passport}
[root@tea ~]# tree /var/teamall
/var/teamall
├── passport # 验证码服务
├── frontApi # 前台程序
├── adminApi # 后台管理程序
├── front # 前台页面
├── admin # 后台管理页面
└── images # 图片目录验证码程序
# 配置数据库
[root@tea ~]# cd ~/teamall/sql
[root@tea sql]# ls
cs_mall_passport.sql nacos-mysql.sql tarena_tp_tea.sql
# 创建数据库并导入表结构
[root@tea sql]# mysql -uroot -p123456
mysql> CREATE DATABASE cs_mall_passport;
mysql> USE cs_mall_passport
mysql> SOURCE cs_mall_passport.sql;
# 创建管理用户
mysql> CREATE USER 'cs_mall_user'@'%' IDENTIFIED BY 'Tarena123';
mysql> GRANT ALL PRIVILEGES ON cs_mall_passport.* TO 'cs_mall_user'@'%';
[root@tea sql]# cd ~/teamall/code/backend/tarena-passport/passport-provider
[root@tea passport-provider]# mvn clean package -Dmaven.test.skip=true
[root@tea passport-provider]# cp -f target/passport-provider-1.0-SNAPSHOT.jar /var/teamall/passport/passport.jar
[root@tea passport-provider]# cp -f src/main/resources/application-vm.yml /var/teamall/passport/
# 设置数据库地址
[root@tea ~]# vim /var/teamall/passport/application-vm.yml
32: url: jdbc:mysql://127.0.0.1:3306/cs_mall_passport?useSSL=......
33: username: cs_mall_user
34: password: Tarena123
35: redis:
36: host: 127.0.0.1
37: port: 6379
38: password: 123456
48: nacos:
49: discovery:
50: server-addr: 127.0.0.1:8848
51: namespace: teamall # id 名称
# 手动添加 nacos: namespace/teamall
# 启动服务使用 8085 端口
[root@tea ~]# cd /var/teamall/passport/
[root@tea passport]# setsid java -Dfile.encoding=utf-8 -Xmx128M -Xms128M -Xmn64m -XX:MaxMetaspaceSize=128M -XX:MetaspaceSize=128M -jar passport.jar --server.port=8085 --spring.profiles.active=vm &>passport.log
[root@tea passport]# cat passport.log
[root@tea passport]# ss -anputl | grep 8085前台程序
# 配置数据库
[root@tea ~]# cd ~/teamall/sql
[root@tea sql]# ls
cs_mall_passport.sql nacos-mysql.sql tarena_tp_tea.sql
# 创建数据库并导入表结构
[root@tea sql]# mysql -uroot -p123456 -h127.0.0.1
mysql> CREATE DATABASE tarena_tp_tea;
mysql> USE tarena_tp_tea
mysql> SOURCE tarena_tp_tea.sql;
# 创建管理用户
mysql> CREATE USER 'teauser'@'%' IDENTIFIED BY 'Tarena123';
mysql> GRANT ALL PRIVILEGES ON tarena_tp_tea.* TO 'teauser'@'%';
[root@tea tea-server]# cd ~/teamall/code/backend/tarena-tp-tea/tea-server
[root@tea tea-server]# mvn clean package -Dmaven.test.skip=true
[root@tea tea-server]# cp -f tea-server-main/target/tea-server-admin-1.0.0-SNAPSHOT.jar /var/teamall/frontApi/frontApi.jar
[root@tea tea-server]# cp -f tea-server-main/src/main/resources/application-vm.yaml /var/teamall/frontApi/
# 设置数据库地址
[root@tea tea-server]# vim /var/teamall/frontApi/application-vm.yaml
04: url: jdbc:mysql://127.0.0.1:3306/tarena_tp_tea?useSSL=......
05: username: teauser
06: password: Tarena123
18: redis:
19: host: 127.0.0.1
20: port: 6379
21: password: 123456
31: # 上传图片路径
32: image_path: /var/teamall/images/
33: # 页面访问路径
34: url: /images/
36: rocketmq:
37: name-server: 127.0.0.1:9876
# 启动服务使用 8081 端口
[root@tea ~]# cd /var/teamall/frontApi/
[root@tea frontApi]# setsid java -Dfile.encoding=utf-8 -Xmx128M -Xms128M -Xmn64m -XX:MaxMetaspaceSize=128M -XX:MetaspaceSize=128M -jar frontApi.jar --server.port=8081 --spring.profiles.active=vm &>api.log
[root@tea frontApi]# cat api.log
[root@tea frontApi]# ss -anputl | grep 8081后台管理程序
[root@tea ~]# cd ~/teamall/code/backend/tarena-tp-tea/tea-admin
[root@tea tea-admin]# mvn clean package -Dmaven.test.skip=true
[root@tea tea-admin]# cp -f tea-admin-main/target/tea-admin-main-1.0.0-SNAPSHOT.jar /var/teamall/adminApi/adminApi.jar
[root@tea tea-admin]# cp -f tea-admin-main/src/main/resources/application-vm.yaml /var/teamall/adminApi/
# 设置数据库地址
[root@tea tea-admin]# vim /var/teamall/adminApi/application-vm.yaml
04: url: jdbc:mysql://127.0.0.1:3306/tarena_tp_tea?useSSL=......
05: username: teauser
06: password: Tarena123
18: redis:
19: host: 127.0.0.1
20: port: 6379
21: password: 123456
31: # 上传图片路径
32: image_path: /var/teamall/images/
33: # 页面访问路径
34: url: /images/
36: rocketmq:
37: name-server: 127.0.0.1:9876
# 启动服务使用 8082 端口
[root@tea ~]# cd /var/teamall/adminApi/
[root@tea adminApi]# setsid java -Dfile.encoding=utf-8 -Xmx128M -Xms128M -Xmn64m -XX:MaxMetaspaceSize=128M -XX:MetaspaceSize=128M -jar adminApi.jar --server.port=8082 --spring.profiles.active=vm &>api.log
[root@tea adminApi]# cat api.log
[root@tea adminApi]# ss -anputl | grep 8082前台页面
[root@tea ~]# cd ~/teamall/code/page/front-page
[root@tea front-page]# npm install (如果有报错,尝试再运行一次)
[root@tea front-page]# npm run build:linuxTech
[root@tea front-page]# rsync -avXSH --delete dist/ /var/teamall/front/后台管理页面
[root@tea ~]# cd ~/teamall/code/page/admin-page
[root@tea admin-page]# npm install
[root@tea admin-page]# npm run build:prod
[root@tea admin-page]# rsync -avXSH --delete dist/ /var/teamall/admin/图片目录
[root@tea ~]# tar -jxf ~/package/teaimg.tar.bz2 -C /var/teamall/images/发布服务
[root@tea ~]# dnf install -y nginx
# 注释掉 38 ~ 57 行
[root@tea ~]# sed '38,57s/^ /&# /g' -i /etc/nginx/nginx.conf
[root@tea ~]# vim /etc/nginx/conf.d/teamall.conf
server {
listen 80;
server_name localhost;
location /images/ {
alias /var/teamall/images/;
}
location /api/ {
proxy_pass http://127.0.0.1:8081/;
}
location /passport-api/ {
proxy_pass http://127.0.0.1:8085/;
}
location / {
root /var/teamall/front;
index index.html index.htm;
}
}
server {
listen 8080;
server_name localhost;
location /images/ {
alias /var/teamall/images/;
}
location /api/ {
proxy_pass http://127.0.0.1:8082/;
}
location /to_passport/ {
proxy_pass http://127.0.0.1:8085/;
}
location / {
root /var/teamall/admin;
index index.html index.htm;
}
}
[root@tea ~]# systemctl enable --now nginx.service
















