单节点 gpmall
咕泡商城:https://github.com/2227324689/gpmall
一、什么是咕泡商城(GPmall) 咕泡商城(GPmall)是一个基于Java开发的电商系统。它旨在提供一个完整的电商平台解决方案,包括用户管理、商品管理、购物车、订单管理、支付集成等功能。这个项目通过模块化的设计,将各个功能模块独立开发,并使用微服务架构来实现高扩展性和高可维护性。
咕泡商城的主要功能:
用户管理 :处理用户的注册、登录、权限管理等操作。
商品管理 :支持商品的添加、删除、更新和分类管理。
购物车 :实现用户将商品添加到购物车、修改商品数量、移除商品等操作。
订单管理 :管理用户的订单创建、支付、订单状态跟踪等功能。
支付集成 :支持多种支付方式的集成,实现从购物到支付的完整交易流程。
评论和反馈 :支持用户对商品进行评论和打分,增强用户体验。
二、咕泡商城(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
1.2 修改 host 1 2 3 $ sudo vi /etc/hosts# 添加以下内容 192.168.75.100 mall
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
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
安装 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
安装 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 服务已启动
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
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 条语句前的 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. 修改全局变量 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
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
6. 网址访问 Chrome 浏览器里输入 http://192.168.75.100
访问页面
然后点击右上角的 “头像” 进行登录,并使用 用户名: test 密码: test 进行登录操作
登陆后可以进行购买操作,单击首页 “坚果 R1”(李姐万岁!)
点击 “现在购买”
至此,单机部署应用完成
四、问题与解决 1. 各个服务的 log 文件 以及 检查命令
redis:/var/log/redis/redis.log
Elasticsearch:/var/log/elasticsearch/my-application.log
nginx:
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log
ZooKeeper:
Kafka:
主日志:/root/kafka_2.11-1.1.1/logs/server.log
输出日志:/root/kafka_2.11-1.1.1/logs/kafkaServer.out
MySQL(MariaDB):看 /etc/my.cnf
我配置的是 log_error = /var/log/mysql/mariadb_error.log
那几个 jar 包的日志: nohup.out
查看那几个 jar 包是否运行:ps -aux | grep java
2. 遇到的问题