学茶商城项目

  • 项目介绍
    “学茶商城”是一个面向茶文化爱好者的一站式线上平台,集茶叶、茶具销售与茶艺教学于一体。项目以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

架构图例

学茶商城项目设计与搭建流程_sql

部署文档

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
PONG
rocketmq 安装
[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=JSON
nacos 安装
# 解压软件包
[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

访问测试

前端页面访问测试

学茶商城项目设计与搭建流程_maven_02

后端页面访问测试

学茶商城项目设计与搭建流程_mysql_03