硬件环境要求:CentOS7.9,4 核 CPU,8G 内存,服务器可联网;所有命令复制直接执行,规避文档原始笔误,保证流程无报错。,防火墙开放端口:80、3306、6379、5672、15672、9200、9300、5601、27017、9000、9001、8080、8081、8085

一、系统基础环境准备

bash

#关闭防火墙&selinux(测试环境,生产环境配置防火墙放行端口)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#更新yum
yum clean all
yum makecache

二、Docker 环境安装配置

bash

#安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2

#配置阿里docker-ce源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

#安装docker-ce
yum install -y docker-ce

#配置镜像加速器
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.fxxk.dedyn.io",
"https://hub.rat.dev",
"https://mirror.aliyuncs.com",
"https://mirror.baidubce.com",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://mirror.iscas.ac.cn"
]
}
EOF

#重载配置,启动docker,设置开机自启
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

#验证docker
docker info

开启 Docker 远程 2375 端口(maven 插件打包镜像需要)

bash

vim /usr/lib/systemd/system/docker.service
#修改ExecStart行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

#重载重启
systemctl daemon-reload
systemctl restart docker

#检查2375端口监听
ss -nlt | grep 2375

三、中间件 Docker 部署

3.1 MySQL5.7 部署

bash

#拉取镜像
docker pull mysql:5.7

#创建本地数据挂载目录
mkdir -p /mydata/mysql/log /mydata/mysql/data /mydata/mysql/conf

#启动mysql容器
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 \
--restart=always \
-d mysql:5.7

#安装mysql客户端
yum -y install mysql

#等待10秒容器初始化,创建mall数据库
sleep 10
mysql -uroot -proot -h127.0.0.1 -e "create database mall character set utf8;"

#导入mall.sql,**提前把mall.sql上传服务器/root目录**
mysql -uroot -proot -h127.0.0.1 mall < /root/mall.sql

#创建reader用户,密码123456,允许任意ip访问
mysql -uroot -proot -h127.0.0.1 <<EOF
grant all privileges on *.* to 'reader'@'%' identified by '123456';
flush privileges;
EOF

3.2 Redis7 部署

bash

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 set a 100
docker exec -it redis redis-cli get a

3.3 Nginx1.22 部署

bash

docker pull nginx:1.22
mkdir -p /mydata/nginx/html /mydata/nginx/logs

#临时启动复制配置文件
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.22

#拷贝容器配置到宿主机
docker cp nginx:/etc/nginx /mydata/nginx/
cd /mydata/nginx
mv nginx conf

#删除临时容器
docker stop nginx
docker rm nginx

#正式启动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 \
--restart=always \
-d nginx:1.22

3.4 RabbitMQ 3.7.15 部署

bash

docker pull rabbitmq:3.7.15
mkdir -p /mydata/rabbitmq/data

docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-v /mydata/rabbitmq/data:/var/lib/rabbitmq \
--restart=always \
-d rabbitmq:3.7.15

sleep 10
#进入容器开启管理插件
docker exec -it rabbitmq /bin/bash -c "rabbitmq-plugins enable rabbitmq_management"

后续 web 页面操作:浏览器访问http://服务器ip:15672,默认账号密码guest/guest

  1. 添加用户mall密码mall,标签选administrator
  2. 新建虚拟 host:/mall
  3. 给 mall 用户授权访问/mall虚拟 host 权限

3.5 Elasticsearch7.17.3 部署

bash

docker pull elasticsearch:7.17.3

#修改系统虚拟内存,必须执行,否则es启动失败
sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" >> /etc/sysctl.conf

mkdir -p /mydata/elasticsearch/plugins /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

#修改目录权限,解决权限拒绝报错
chmod 777 /mydata/elasticsearch/data/
docker restart elasticsearch
sleep 15

#安装ik分词器,版本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 -c "elasticsearch-plugin install file:///elasticsearch-analysis-ik-7.17.3.zip"
docker restart elasticsearch

#验证es访问
curl http://127.0.0.1:9200

3.6 Logstash7.17.3 部署

bash

docker pull logstash:7.17.3
mkdir -p /mydata/logstash

#写入logstash.conf配置
cat > /mydata/logstash/logstash.conf <<'EOF'
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}"
}
}
EOF

#启动logstash
docker run --name logstash -p 4560-4563:4560-4563 \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
--link elasticsearch:es \
--restart=always \
-d logstash:7.17.3

#容器内部安装json_lines插件
docker exec -it logstash /bin/bash -c "logstash-plugin install logstash-codec-json_lines"
docker restart logstash

3.7 Kibana7.17.3 部署

bash

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

3.8 MongoDB4 部署

bash

docker pull mongo:4
mkdir -p /mydata/mongo/db

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

3.9 MinIO 部署

bash

docker pull minio/minio
mkdir -p /mydata/minio/data

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

四、后端 Java 服务编译打包部署

4.1 安装 JDK8、Maven、git

bash

yum install java-1.8.0-openjdk java-1.8.0-devel git -y
java -version

#安装maven3.9.11
wget https://archive.apache.org/dist/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
tar zxvf apache-maven-3.9.11-bin.tar.gz -C /usr/local/
echo 'export M2_HOME=/usr/local/apache-maven-3.9.11' >> /etc/profile
echo 'export PATH=$PATH:$M2_HOME/bin' >> /etc/profile
source /etc/profile
mvn -v

4.2 拉取 mall 源码

bash

cd /root
git clone https://github.com/macrozheng/mall.git
cd mall

4.3 修改 pom.xml docker.host(替换为你服务器内网 IP)

bash

vim pom.xml
#找到<docker.host>,修改为自己服务器ip:2375
<docker.host>http://192.168.83.168:2375</docker.host>

4.4 修改 application-prod.yml 配置文件

核心:使用 docker link 别名做服务地址,mysql=db,redis=redis,es=es,logstash=logstash,mongo=mongo,rabbitmq=rabbit,minio=minio,数据库账号 reader/123456

bash

#修改mall-admin配置
vim mall-admin/src/main/resources/application-prod.yml

#mall-search无需修改,mall-portal无需修改

4.5 mvn 编译打包,自动构建 docker 镜像

bash

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

#查看构建镜像
docker images | grep mall

4.6 启动 3 个后端容器

bash

#创建日志挂载目录
mkdir -p /mydata/app/admin/logs /mydata/app/search/logs /mydata/app/portal/logs

#mall-admin 8080
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

#mall-search 8081
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

#mall-portal 8085
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

访问 swagger 验证: http://服务器ip:8080/swagger-ui/ http://服务器ip:8081/swagger-ui/ http://服务器ip:8085/swagger-ui/

五、后台管理前端 mall-admin‑web 部署

5.1 安装 Nodejs v16

bash

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

node -v
npm -v

5.2 拉取前端代码

bash

cd /root
git clone --branch dev-v2 https://gitee.com/macrozheng/mall-admin-web.git
cd mall-admin-web

#修改生产环境后端地址,修改为你的服务器ip:8080
vim config/prod.env.js
'use strict'
module.exports = {
NODE_ENV:'"production"',
BASE_API:'"http://192.168.83.168:8080"'
}

5.3 npm 安装依赖、打包

bash

npm cache clean --force
npm install --registry=https://registry.npmmirror.com
npm run build

5.4 部署到 Nginx

bash

#复制dist到nginx html目录
mv dist html
mv html /mydata/nginx/

#重启nginx和mall-admin
docker restart nginx
docker restart mall-admin

访问后台管理:http://服务器ip,账号 admin,密码 macro123

六、mall‑app‑web H5 前端部署(uniapp 项目)

该部分需要本地 HBuilderX 操作,服务器只接收编译产物

  1. 本地电脑下载源码:https://gitee.com/macrozheng/mall-app-web/repository/archive/master.zip
  2. HBuilderX 导入项目,修改appConfig.jsAPI_BASE_URL = 'http://你的服务器ip:8085'
  3. HBuilderX 菜单:发行 -> 网站‑H5,编译输出 web 文件夹
  4. 将编译出来的 web 文件夹上传服务器/mydata/nginx/html

bash

#服务器执行
cd /mydata/nginx/html
mv web app
docker restart nginx

访问 H5 商城:http://服务器ip/app/

七、容器排错常用命令(部署报错时使用)

bash

#查看容器状态
docker ps -a

#查看容器日志(例如mysql)
docker logs -f mysql

#进入容器
docker exec -it 容器名 /bin/bash

#全部容器开机自启启动脚本(服务器重启后执行)
docker start `docker ps -qa`
Logo

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

更多推荐