mall 电商项目 Docker 完整部署实操
·
硬件环境要求: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;
- 添加用户
mall密码mall,标签选administrator- 新建虚拟 host:
/mall- 给 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 操作,服务器只接收编译产物
- 本地电脑下载源码:
https://gitee.com/macrozheng/mall-app-web/repository/archive/master.zip - HBuilderX 导入项目,修改
appConfig.js的API_BASE_URL = 'http://你的服务器ip:8085' - HBuilderX 菜单:发行 -> 网站‑H5,编译输出 web 文件夹
- 将编译出来的 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`更多推荐




所有评论(0)