一、项目概述

1.1 概述

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

1.2 项目职责

1、负责 CentOS 7.9 服务器上 Docker 环境的安装配置,利用 Docker 容器化部署 MySQL、Redis、Nginx、RabbitMQ、Elasticsearch、Logstash、MongoDB、Minio 等基础中间件服务,完成端口映射与数据持久化配置。
2、负责 MySQL 数据库的搭建维护,执行 SQL 脚本完成 mall 数据库的创建与表结构初始化,创建 reader 用户并配置远程访问权限。
3、负责后端 Spring Boot 项目的打包部署,修改 application-prod.yml 中的数据库、Redis、RabbitMQ、Elasticsearch 等连接参数,使用 Maven 构建生成 Docker 镜像,通过 docker run 启动 mall-admin、mall-search、mall-portal 三个后端服务容器。
4、负责前端 Vue 项目的编译构建与 Nginx 部署,安装 Node.js 环境,修改 BASE_API 为后端服务地址,执行 npm run build 打包生成静态文件并部署到 Nginx 的 html 目录下,配置反向代理转发 API 请求至后端 8080 端口,解决前后端分离跨域访问问题。
5、负责日常运维与故障排查,查看应用日志定位启动报错、端口冲突、数据库连接超时等问题,修复 Elasticsearch 数据目录权限,重启异常容器,确保系统稳定运行。
6、负责 Shell 脚本编写,实现日志备份清理、服务定期重启等自动化运维操作,配合开发完成版本迭代更新与上线部署。

二、部署架构

在这里插入图片描述

三、部署步骤

3.1 环境准备

# 关闭防火墙和增强功能
systemctl stop firewalld
setenforce 0

3.2 前置准备

3.2.1 Docker环境安装

# 安装yum-utils
 yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装docker
 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io

mkdir /etc/docker
vim daemon.json
{
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.fxxk.dedyn.io",
    "https://hub.rat.dev",
    "https://docker.anyhub.us.kg",
    "https://dockerhub.jobcher.com",
    "https://dockerhub.icu",
    "https://mirror.aliyuncs.com",
    "https://mirror.baidubce.com",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
    "https://atomhub.openatom.cn",
    "https://dockerpull.com"
  ]
}
systemctl daemon-reload
systemctl restart docker
systemctl status docker

在这里插入图片描述
在这里插入图片描述

3.2.2 MySQL安装

docker pull mysql:5.7
# 创建宿主机挂载目录
mkdir -p /mydata/mysql/{log,data,conf}
# 添加配置文件
sudo tee /mydata/mysql/conf/my.cnf <<-'EOF'
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
EOF
# 重启docker
systemctl restart docker
# 添加配置文件
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
# 安装mysql客户端
yum -y install mysql
# 克隆数据
git clone https://github.com/macrozheng/mall.git
# 登入数据库
mysql -uroot -proot -h 127.0.0.1 --default-character-set=utf8
# 创建数据库
create database mall character set utf8;
exit
# 找到文件路径
find . -type f -name "*.sql"
# 进入该文件,进行导入数据
mysql -uroot -proot -h 127.0.0.1 mall < mall.sql
# 创建一个reader:123456帐号并修改权限
mysql -uroot -proot -h 127.0.0.1
CREATE USER 'reader'@'%' IDENTIFIED BY '123456';
grant all privileges on *.* to 'reader' @'%' identified by '123456';
flush privileges;
exit

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.3 Redis安装

docker pull redis:7
mkdir -p /mydata/redis/data
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
--restart=always \
-d redis:7 redis-server --appendonly yes
docker exec -it redis redis-cli

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.4 Nginx安装

docker pull nginx:1.22
mkdir -p /mydata/nginx/{html,logs}
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
--restart=always \
-d nginx:1.22
# 将容器内的配置文件拷贝到指定目录
docker cp nginx:/etc/nginx /mydata/nginx/
# 修改文件名称
cd /mydata/nginx
mv nginx conf
#  终止并删除容器
docker stop nginx
docker rm nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.22

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.5 RabbitMQ

docker pull rabbitmq:3.7.15
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
--restart=always \
-v /mydata/rabbitmq/data:/var/lib/rabbitmq \
-d rabbitmq:3.7.15
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management
访问地址查看是否安装成功:http://IP:15672
输入账号密码并登录:guest guest
创建帐号并设置其角色为管理员:mall mall

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
创建帐号并设置其角色为管理员:mall mall
在这里插入图片描述
创建一个新的虚拟host为:/mall
在这里插入图片描述
点击mall用户进入用户配置页面
在这里插入图片描述
给mall用户配置该虚拟host的权限
在这里插入图片描述
在这里插入图片描述

3.2.6 Elasticsearch安装

docker pull elasticsearch:7.17.3
# 修改虚拟内存区域大小,否则会因为过小而无法启动
sysctl -w vm.max_map_count=262144
# 创建目录并设置权限
mkdir -p /mydata/elasticsearch/{data,plugins}
chown -R 1000:1000 /mydata/elasticsearch
chmod -R 775 /mydata/elasticsearch/data
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
--restart=always \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.17.3
# 下载分词插件
wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.3.zip
# 上传到镜像内
docker cp elasticsearch-analysis-ik-7.17.3.zip elasticsearch:/
docker exec -it elasticsearch /bin/bash
elasticsearch-plugin install file:///elasticsearch-analysis-ik-7.17.3.zip
exit
# 重新启动服务
docker restart elasticsearch

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问会返回版本信息:http://IP:9200
在这里插入图片描述

3.2.7 Logstash安装

# 拉取镜像
docker pull logstash:7.17.3
# 编辑logstash收集文件
mkdir -p /mydata/logstash
vim /mydata/logstash/logstash.conf
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
    type => "debug"
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4561
    codec => json_lines
    type => "error"
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4562
    codec => json_lines
    type => "business"
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4563
    codec => json_lines
    type => "record"
  }
}
filter {
  if [type] == "record" {
    mutate {
      remove_field => "port"
      remove_field => "host"
      remove_field => "@version"
    }
    json {
      source => "message"
      remove_field => ["message"]
    }
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "mall-%{type}-%{+YYYY.MM.dd}"
  }
}
# 运行容器
docker run -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 --name logstash \
--restart=always \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.17.3
docker exec -it logstash /bin/bash

在这里插入图片描述
在这里插入图片描述

3.2.8 Kibana安裝

docker pull kibana:7.17.3
docker run --name kibana -p 5601:5601 \
  --restart=always \
  --link elasticsearch:es \
  -e "elasticsearch.hosts=http://es:9200" \
  -d kibana:7.17.3

在这里插入图片描述
登入http://$ip:5601,测试分词
在这里插入图片描述
在这里插入图片描述

3.2.9Mongo安装

docker pull mongo:4
docker run -p 27017:27017 --name mongo \
  --restart=always \
  -v /mydata/mongo/db:/data/db \
  -d mongo:4

在这里插入图片描述

3.2.10 Minio

docker pull minio/minio
docker run -p 9090:9000 -p 9001:9001 --name minio \
  --restart=always \
  -v /mydata/minio/data:/data \
  -e MINIO_ROOT_USER=minioadmin \
  -e MINIO_ROOT_PASSWORD=minioadmin \
  -d minio/minio server /data --console-address ":9001"

在这里插入图片描述
在这里插入图片描述
访问http://ip:9090
minio默认用户名密码:minioadmin

在这里插入图片描述
在这里插入图片描述

3.2.11 jenkins安装

mkdir -p /mydata/jenkins_home
chown -R 1000:1000 /mydata/jenkins_home
docker run -d \
  --name jenkins \
  -p 8180:8080 \
  -p 50000:50000 \
  -u root \
  -v /mydata/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /root/mall:/root/mall \
  --restart=always \
  jenkins/jenkins:lts
  # 获取初始管理员密码
  docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

在这里插入图片描述
在这里插入图片描述

3.3 后端服务部署

3.3.1 Java代码编译打包前置准备

3.3.1.1 安装jdk17
# 安装 JDK
sudo tar -zxvf /opt/jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local/
sudo mv /usr/local/jdk-17.0.12 /usr/local/jdk
# 配置环境变量
sudo tee -a /etc/profile <<-'EOF'
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
EOF
# 生效并验证
source /etc/profile
java -version

在这里插入图片描述

3.3.1.2 Maven安装
# 安装 Maven
sudo tar -zxvf /opt/apache-maven-3.9.9-bin.tar.gz -C /usr/local/
sudo mv /usr/local/apache-maven-3.9.9 /usr/local/maven
# 配置环境变量
sudo tee -a /etc/profile <<-'EOF'
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
EOF
# 生效并验证
source /etc/profile
mvn -v

在这里插入图片描述
在这里插入图片描述

3.3.1.3 修改docker对外接口2375
vim /usr/lib/systemd/system/docker.service
#修改下列内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
systemctl daemon-reload 
systemctl restart docker
ss -nlt | grep 2375

在这里插入图片描述
在这里插入图片描述

3.3.2 拉取后端代码并修改参数

cd /root
git clone https://github.com/macrozheng/mall.git
cd /root/mall
vim pom.xml
# 修改为docker机器IP
<docker.host>http://10.8.0.70:2375</docker.host>
#修改ip
vim mall-admin/src/main/resources/application-prod.yml
#无需修改任何配置
vim mall-search/src/main/resources/application-prod.yml
#无需修改配置
vim mall-portal/src/main/resources/application-prod.yml 

在这里插入图片描述
在这里插入图片描述

3.3.3 构建打包服务

cd /root/mall
mvn clean package -Dmaven.test.skip=true
docker images

在这里插入图片描述
在这里插入图片描述

3.3.4 启动后端服务

3.3.4.1 部署mall-admin
docker start mysql
docker run -p 8080:8080 --name mall-admin \
  --restart=always \
  --link mysql:db \
  --link redis:redis \
  --link minio:minio \
  --link logstash:logstash \
  -v /etc/localtime:/etc/localtime \
  -v /mydata/app/admin/logs:/var/logs \
  -d mall/mall-admin:1.0-SNAPSHOT

在这里插入图片描述

3.3.4.2 部署mall-search
docker run -p 8081:8081 --name mall-search \
  --restart=always \
  --link logstash:logstash \
  --link elasticsearch:es \
  --link mysql:db \
  -v /etc/localtime:/etc/localtime \
  -v /mydata/app/search/logs:/var/logs \
  -d mall/mall-search:1.0-SNAPSHOT

在这里插入图片描述

3.3.4.3 部署mall-port
docker run -p 8085:8085 --name mall-portal \
  --restart=always \
  --link logstash:logstash \
  --link mysql:db \
  --link redis:redis \
  --link mongo:mongo \
  --link rabbitmq:rabbit \
  -v /etc/localtime:/etc/localtime \
  -v /mydata/app/portal/logs:/var/logs \
  -d mall/mall-portal:1.0-SNAPSHOT

在这里插入图片描述

docker ps

在这里插入图片描述
浏览器查看每个服务接口是否正常
http://10.8.0.70:8080/swagger-ui/
http://10.8.0.70:8081/swagger-ui/
http://10.8.0.70:8085/swagger-ui/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 部署管理系统前端页面

3.4.1 前端服务前置准备

wget https://nodejs.org/dist/latest-v16.x/node-v16.20.2-linux-x64.tar.gz
tar zxvf node-v16.20.2-linux-x64.tar.gz -C /usr/local/
echo "export NODE_HOME=/usr/local/node-v16.20.2-linux-x64" >> /etc/profile
echo "export PATH=\$PATH:\$NODE_HOME/bin" >> /etc/profile
source /etc/profile 

在这里插入图片描述

3.4.2 拉取前端web代码并修改mall-admin-web配置文件

git clone https://gitee.com/humajun/docker-mall-admin-web.git
cd /root/mall/docker-mall-admin-web/
vim config/prod.env.js

在这里插入图片描述

3.4.3 编译打包前端服务

cd /root/docker-mall-admin-web
npm cache clean --force
npm install --registry=https://registry.npmmirror.com
npm run build
# 生成目录
ls
# 将目录复制到nginx目录下替换原有内容
mv dist html
mv /root/mall/docker-mall-admin-web/html/ /mydata/nginx/
# mv:是否覆盖"/mydata/nginx/html"? yes
ls /mydata/nginx/html/
# index.html static
# 重启服务
docker restart mall-admin
docker restart nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 部署APP-UI前端

3.5.1 打开HbuilderX开发工具

在这里插入图片描述

3.5.2 导入项目:

在这里插入图片描述

3.5.3 修改配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5.4 发行 ==> PC web 或 H5

在这里插入图片描述
在这里插入图片描述

3.5.5 找到编译后的网页文件上到Nginx /mydata/nginx/html目录内

在这里插入图片描述

3.5.6 访问验证:http://ip/app/

在这里插入图片描述

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐