企业商城单节点部署

单节点 gpmall

咕泡商城:https://github.com/2227324689/gpmall

一、什么是咕泡商城(GPmall)

​ 咕泡商城(GPmall)是一个基于Java开发的电商系统。它旨在提供一个完整的电商平台解决方案,包括用户管理、商品管理、购物车、订单管理、支付集成等功能。这个项目通过模块化的设计,将各个功能模块独立开发,并使用微服务架构来实现高扩展性和高可维护性。

咕泡商城的主要功能:

  1. 用户管理:处理用户的注册、登录、权限管理等操作。
  2. 商品管理:支持商品的添加、删除、更新和分类管理。
  3. 购物车:实现用户将商品添加到购物车、修改商品数量、移除商品等操作。
  4. 订单管理:管理用户的订单创建、支付、订单状态跟踪等功能。
  5. 支付集成:支持多种支付方式的集成,实现从购物到支付的完整交易流程。
  6. 评论和反馈:支持用户对商品进行评论和打分,增强用户体验。

二、咕泡商城(GPmall)的作用

​ 咕泡商城提供了一个真实的项目案例,涵盖了从前端到后端的完整技术栈

三、配置 gpmall

IP 主机名
192.168.75.100 gpmall

1. 基础配置

1.1 配置主机名
1
2
3
4
5
6
7
8
9
10
11
12
$ hostnamectl set-hostname gpmall
$ hostnamectl
Static hostname: gpmall
Icon name: computer-vm
Chassis: vm
Machine ID: 4edf9db48dd74d02b42a6aa1f6f88418
Boot ID: e87a5452ca724c819470932a7cf6020d
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.el7.x86_64
Architecture: x86-64

3.1.1

1.2 修改 host
1
2
3
$ sudo vi /etc/hosts
# 添加以下内容
192.168.75.100 mall

3.1.2

1.3 配置 yum 源

​ 将提供的 packages 包上传到服务器的 /root 目录下,并配置本地 local.repo 文件,且,自带的 CentOS.repo 文件不要移除

1
2
3
4
5
6
7
8
9
$ sudo vi /etc/yum.repos.d/local.repo
# 添加以下内容
[mall]
name=mall
baseurl=file:///root/gpmall-repo
gpgcheck=0
enabled=1

$ sudo yum repolist

3.1.3_13.1.3_2

1.4 安装基础服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装 Java 环境
$ sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 检查 Java 环境
$ java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)

# 安装 Redis 缓存服务
$ sudo yum insstall -y redis
# 安装 Elasticsearch 服务
$ sudo yum install -y elasticsearch
# 安装 Nginx 服务
$ sudo yum install -y nginx
# 安装 MariaDB 数据库
$ sudo yum install -y mariadb mariadb-server

3.1.4_1

​ 安装 ZooKeeper 服务,将提供的 zookeeper-3.4.14.tar.gz 上传至 /root 目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 然后解压
$ sudo tar -zxf zookeeper-3.4.14.tar.gz

# 启用配置文件
$ cd /root/cd zookeeper-3.4.14/conf/
$ sudo mv zoo_sample.cfg zoo.cfg

# 启动 ZooKeeper 服务
$ cd /root/zookeeper-3.4.14/bin/
$ sudo ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 查看 ZooKeeper 状态
$ sudo ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone

3.1.4_2

​ 安装 Kafka 服务,将提供的 kafka_2.11-1.1.1.tgz 上传至 /root 目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 解压
$ sudo tar -zxf kafka_2.11-1.1.1.tgz

# 启动 Kafka
$ cd /root/kafka_2.11-1.1.1/bin/
$ sudo ./kafka-server-start.sh -daemon ../config/server.properties

# 检查 Kafka 是否运行
$ jps
2098 QuorumPeerMain
2422 Kafka
2491 Jps
# 安装 net-tools
$ sudo yum install -y net-tools
# 继续检查 Kafka 是否运行
$ netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 993/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1195/master
tcp6 0 0 :::45041 :::* LISTEN 2422/java
tcp6 0 0 :::22 :::* LISTEN 993/sshd
tcp6 0 0 :::41912 :::* LISTEN 2098/java
tcp6 0 0 ::1:25 :::* LISTEN 1195/master
tcp6 0 0 :::9092 :::* LISTEN 2422/java
tcp6 0 0 :::2181 :::* LISTEN 2098/java

# 当看到 Kafka 服务和 9092 端口时,说明 Kafka 服务已启动

3.1.4_33.1.4_4

2. 启动服务

2.1 启动数据库并配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 修改数据库配置文件
$ sudo vi /etc/my.cnf
# 添加以下内容
[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

# 启动数据库
$ sudo systemctl start mariadb

# 设置 root 用户的密码为 123456 并登录
$ mysqladmin -uroot password 123456
$ mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.18-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

# 给本地用户 root 用户对所有数据库和所有表授予所有权限,并且使用密码 123456 来进行身份验证,并允许本地主机的 root 用户将这些权限授予给其他用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY '123456' with GRANT OPTION;
Query OK, 0 rows affected (0.001 sec)

# 给所有主机的 root 用户对所有数据库和所有表授予所有权限,并且使用密码 123456 来进行身份验证,并允许所有主机的 root 用户将这些权限授予给其他用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456' with GRANT OPTION;
Query OK, 0 rows affected (0.001 sec)

# 将 gpmall.sql 上传至 '/root' 目录下
# 创建数据库 gpmall
MariaDB [(none)]> CREATE DATABASE gpmall;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> USE gpmall;
Database changed
MariaDB [gpmall]> SOURCE /root/gpmall.sql
......
......
Query OK, 0 rows affected (0.000 sec)

# 退出 MariaDB
MariaDB [gpmall]> Ctrl-C -- exit!
Aborted

# 设置开机自启
$ sudo systemctl enable mariadb

3.2.1_13.2.1_23.2.1_33.2.1_4

2.2 启动 Redis 服务
1
2
3
4
5
6
7
8
9
10
11
12
# 修改 reids 配置文件
$ sudo vi /etc/redis.conf
# 注释掉以下内容
bind 127.0.0.1 # 第 61 行

# 修改以下内容,把 yes 改成 no
protected-mode no # 第 80 行

# 启动 redis 服务
$ sudo systemctl start redis
$ sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
2.3 启动 Elasticsearch 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 修改 Elasticsearch 配置文件
$ sudo vi /etc/elasticsearch/elasticsearch.yml

# 添加以下内容
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true

# 将以下 4 条语句前的 # 去掉,并修改 network.host 的 IP 为本机 IP
cluster.name: my-application # 第 20 行
node.name: node-1 # 第 26 行
network.host: 192.168.75.100 # 第 58 行
http.port: 9200 # 第 62 行

# 启动 Elasticsearch 服务,并配置开机自启
$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

3.2.3

3. 修改全局变量

1
2
3
4
5
6
7
# 修改 hosts 文件
$ sudo vi /etc/hosts
# 在下面添加以下内容
192.168.75.100 kafka.mall
127.0.0.1 mysql.mall
192.168.75.100 redis.mall
192.168.75.100 zookeeper.mall

4. 部署前端

​ 将 dist 目录上传至 /root 目录下,接着将 dist 目录下的文件都复制到 nginx 默认项目路径

1
2
3
4
5
6
7
# 下载 dist.7z
$ sudo wget http://moka.anitsuri.top/images/gpmall/dist.7z
# 解压
$ sudo tar -zf dist.7z

$ sudo rm -rf /usr/share/nginx/html/*
$ sudo cp -rvf /root/dist/* /usr/share/nginx/html/

​ 修改 nginx 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ sudo vi /etc/nginx/conf.d/default.conf

# 填入以下内容
server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /user {
proxy_pass http://127.0.0.1:8082;
}

location /shopping {
proxy_pass http://127.0.0.1:8081;
}

location /cashier {
proxy_pass http://127.0.0.1:8083;
}
#error_page 404 /404.html;
}

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

3.4_13.4_2

5. 部署后端

​ 将提供的 4 个 jar 包上传到 /root 目录下,并启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 下载 4 个 jar 包
$ wget http://moka.anitsuri.top/images/gpmall/shopping-provider-0.0.1-SNAPSHOT.jar
$ wget http://moka.anitsuri.top/images/gpmall/user-provider-0.0.1-SNAPSHOT.jar
$ wget wget http://moka.anitsuri.top/images/gpmall/gpmall-shopping-0.0.1-SNAPSHOT.jar
$ wget wget http://moka.anitsuri.top/images/gpmall/gpmall-user-0.0.1-SNAPSHOT.jar

$ nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
$ nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
$ nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
$ nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &

# 检查 jar 包是否全部运行
$ ps -aux | grep java
......
......
root 6035 30.8 11.1 4648208 429316 pts/0 Sl 11:12 0:36 java -jar shopping-provider-0.0.1-SNAPSHOT.jar
root 6072 33.5 12.7 4659628 493684 pts/0 Sl 11:12 0:34 java -jar user-provider-0.0.1-SNAPSHOT.jar
root 6134 55.7 13.5 4656336 524608 pts/0 Sl 11:12 0:44 java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar
root 6194 59.8 10.1 4615356 391872 pts/0 Sl 11:13 0:34 java -jar gpmall-user-0.0.1-SNAPSHOT.jar
root 6263 0.0 0.0 112828 976 pts/0 R+ 11:14 0:00 grep --color=auto java

3.5_1

6. 网址访问

​ Chrome 浏览器里输入 http://192.168.75.100 访问页面
3.6.1

​ 然后点击右上角的 “头像” 进行登录,并使用 用户名: test 密码: test 进行登录操作
3.6.2

​ 登陆后可以进行购买操作,单击首页 “坚果 R1”(李姐万岁!)
3.6.33.6.4

​ 点击 “现在购买”
3.6.5_NET

​ 至此,单机部署应用完成

四、问题与解决

1. 各个服务的 log 文件 以及 检查命令

  1. redis:/var/log/redis/redis.log
  2. Elasticsearch:/var/log/elasticsearch/my-application.log
  3. nginx:
    • 访问日志:/var/log/nginx/access.log
    • 错误日志:/var/log/nginx/error.log
  4. ZooKeeper:
  5. Kafka:
    • 主日志:/root/kafka_2.11-1.1.1/logs/server.log
    • 输出日志:/root/kafka_2.11-1.1.1/logs/kafkaServer.out
  6. MySQL(MariaDB):看 /etc/my.cnf 我配置的是 log_error = /var/log/mysql/mariadb_error.log
  7. 那几个 jar 包的日志: nohup.out
  8. 查看那几个 jar 包是否运行:ps -aux | grep java

2. 遇到的问题


企业商城单节点部署
https://moka.anitsuri.top/2024/09/04/gpmall_single/
作者
アニつり
发布于
2024年9月4日
许可协议