前言
为什么要部署CICD
开发Java项目时,手动“写代码→编译→打包→部署→测试”要重复做很多次,既浪费时间又容易出错(比如不同人电脑环境不一样)。Maven好比是“管理者”,能统一项目结构、自动下载依赖(比如项目需要的jar包);Jenkins是“自动化流水线”,能把“编译、打包、部署”这些重复工作交给机器做。本文就是教你用这两个工具,在3台服务器上实现电商项目(项目主页 | mall学习教程)的自动化部署。
一:开发相关概念
1. 什么是Maven
新手解读
不同开发工具(比如Eclipse和IDEA)的项目文件夹结构不一样,换工具就用不了。Maven规定了一套统一的项目结构,不管用什么工具打开都一样。它本质是Apache的自动化构建工具,专门帮Java项目做“找依赖、编译、打包”这些杂活。
2. Maven的作用
项目构建:自动执行“清理→编译→测试→打包”流程,每次构建结果都一样。
依赖管理:比如项目需要SpringBoot,Maven会自动从网上下载对应的jar包,不用手动找。
项目信息管理:用配置文件记录项目作者、版本等信息,生成统一报告。
插件扩展:可加装“代码检查”“测试报告生成”等插件。
多模块支持:大型项目拆分成多个小模块(比如商城的“订单模块”“商品模块”),Maven能统一管理。
持续集成:和Jenkins配合,实现代码提交后自动构建部署。
3. 什么是构建
新手解读
“构建”就是把你写的代码、配置文件、图片等“原材料”,加工成能在服务器上运行的“成品”的过程,主要步骤包括:
清理:删除上次编译的旧文件。
编译:把Java代码转成电脑能懂的字节码文件。
测试:自动检测关键功能是否正常。
报告:生成测试结果表格。
打包:Java项目打成jar包,Web项目打成war包。
安装:把打好的包存到本地仓库(自己电脑里)。
部署:把包传到服务器上运行。
4. 自动化构建的意义
手动构建时,程序员可能每天花一半时间做“编译→打包→部署”,自动化后机器1分钟搞定,人能专心写代码。
5. Maven核心—pom文件
新手解读
pom.xml是Maven的“核心配置文件”,相当于项目的“说明书”,里面写了:项目名称、依赖的jar包(比如MySQL驱动)、打包方式、插件配置等。Maven全靠这个文件指挥工作。
6. Maven项目自动化部署流程
新手解读
程序员在本地(比如IDEA)写代码,提交到Gitlab(代码仓库)。
Gitlab通知Jenkins:“有新代码提交了!”
Jenkins从Gitlab拉取最新代码,用Maven打包成jar/war包。
Jenkins把包传到Docker服务器,部署成可运行的容器。
测试、前端人员直接访问Docker服务器上的项目。
二:电子商城项目简介
1. mall商城项目简介
项目地址:https://www.macrozheng.com/
包括镜像在内的打包好的软件包:百度网盘-Mail软件包
mall是一个完整的电商系统,分“前台商城”(用户逛的页面,比如商品列表、购物车)和“后台管理”(管理员用的,比如改商品价格、看订单),用SpringBoot(后端)和Vue(前端)开发,所有功能都跑在Docker容器里,方便迁移和管理。
2. 服务器角色分配
3. 系统架构(简化版)
后端:SpringBoot写的服务(订单、商品、搜索),跑在Docker容器里。
前端:Vue写的网页,用Nginx提供访问入口。
数据存储:MySQL存业务数据(订单、用户),Elasticsearch存搜索数据(商品搜索)。
自动化:Jenkins从Gitlab拉代码,打包后传到Docker服务器部署。
编辑不易,请乐哥一罐可乐:
三:mall商城运行环境部署(Docker主机操作)
新手解读
这一步是在Docker服务器(192.168.171.15) 上搭基础环境:Docker本身、数据库、搜索工具、网页服务器。 数据卷说明:之前用“主机目录挂载”(比如/mydata/mysql),现在改用Docker数据卷(比如mysql_data)。数据卷是Docker自带的存储区域,好处是:不用记复杂的主机路径、容器删了数据还在、方便备份迁移。
1. Docker环境安装
运行主机:Docker服务器(192.168.171.15)
# 安装Docker(CentOS系统为例)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机启动
systemctl start docker
systemctl enable docker
# 设置主机名为docker(方便识别)
hostnamectl set-hostname docker
bash2. 开启Docker远程管理API
新手解读
Jenkins需要远程操作Docker服务器构建镜像,所以要开API让Jenkins能连接。
运行主机:Docker服务器(192.168.171.15)
# 编辑Docker服务配置文件
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 --containerd=/run/containerd/containerd.sock
# 重启Docker使配置生效
systemctl daemon-reload
systemctl restart docker
# 验证端口是否开启(出现2375端口即成功)
netstat -tnlp | grep 23753. MySQL安装(用数据卷存储)
运行主机:Docker服务器(192.168.171.15)
# 1. 拉取MySQL 5.7镜像
docker pull mysql:5.7
# 2. 用数据卷启动MySQL(数据卷自动创建)
docker run -p 3306:3306 --name mysql \
-v mysql_log:/var/log/mysql \ # 日志数据卷
-v mysql_data:/var/lib/mysql \ # 数据数据卷
-v mysql_conf:/etc/mysql/conf.d/ \ # 配置数据卷
-e MYSQL_ROOT_PASSWORD=root \ # 初始root密码
-d mysql:5.7
# 3. 上传mall.sql到Docker服务器(可通过SFTP工具上传,比如Xftp)
# 假设文件传到/root目录下,拷贝到MySQL容器内
docker cp /root/mall.sql mysql:/
# 4. 进入MySQL容器
docker exec -it mysql /bin/bash
# 5. 登录MySQL(在容器内执行)
mysql -uroot -proot --default-character-set=utf8
# 6. 创建数据库并导入脚本(在MySQL命令行执行)
create database mall character set utf8;
use mall;
source /mall.sql;
# 7. 创建访问账号(允许远程连接,在MySQL命令行执行)
grant all privileges on *.* to 'reader'@'%' identified by '123456';
exit # 退出MySQL
# 8. 退出容器
exit4. Elasticsearch安装(商品搜索用)
运行主机:Docker服务器(192.168.171.15)
# 1. 拉取Elasticsearch 7.17.3镜像
docker pull elasticsearch:7.17.3
# 2. 调整虚拟内存(否则启动失败)
sysctl -w vm.max_map_count=262144
# 3. 用数据卷启动Elasticsearch
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \ # 单节点模式
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \ # 限制内存使用
-v elasticsearch_plugins:/usr/share/elasticsearch/plugins \ # 插件数据卷(容器内路径: /usr/share/elasticsearch/plugins)
-v elasticsearch_data:/usr/share/elasticsearch/data \ # 数据数据卷(容器内路径: /usr/share/elasticsearch/data)
-d elasticsearch:7.17.3
# 4. 授权数据卷目录(Docker主机上的数据卷实际路径)
# 数据卷在主机的默认存储路径为:/var/lib/docker/volumes/[卷名]/_data/
chmod 777 /var/lib/docker/volumes/elasticsearch_data/_data/
# 5. 重启Elasticsearch确保权限生效
docker restart elasticsearch
# 6. 验证是否启动(返回JSON格式信息即成功)
curl http://192.168.171.15:9200安装IK分词器(基于数据卷挂载)
由于启动Elasticsearch时已将容器内的插件目录(/usr/share/elasticsearch/plugins)与Docker主机的elasticsearch_plugins数据卷绑定,因此只需将分词器解压到主机上的数据卷实际路径,即可自动同步到容器内。
1. 准备前提
已完成上述Elasticsearch安装(确保容器正常运行);
下载与Elasticsearch版本严格匹配的IK分词器:
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases,选择
elasticsearch-analysis-ik-7.17.3.zip(必须与Elasticsearch版本一致);若已获取该安装包,可直接使用。
2. 上传分词器到服务器
通过SFTP工具(如Xftp)将下载的elasticsearch-analysis-ik-7.17.3.zip文件上传到Docker服务器的/root目录(或其他容易访问的目录)。
3. 安装解压工具(若未安装)
在Docker服务器终端执行以下命令安装unzip(用于解压zip文件):
yum -y install unzip4. 解压分词器到数据卷路径
执行以下命令,将分词器解压到elasticsearch_plugins数据卷在主机的实际路径下(自动同步到容器内插件目录):
# 数据卷在主机的实际路径:/var/lib/docker/volumes/elasticsearch_plugins/_data/
# 解压后会在该路径下创建analysis-ik目录,存放分词器文件
unzip elasticsearch-analysis-ik-7.17.3.zip \
-d /var/lib/docker/volumes/elasticsearch_plugins/_data/analysis-ik/5. 验证分词器文件(可选)
执行以下命令检查解压结果(应显示分词器相关文件,如jar包、config目录等):
ll /var/lib/docker/volumes/elasticsearch_plugins/_data/analysis-ik/正常输出示例:
[root@docker ~]# ll /var/lib/docker/volumes/elasticsearch_plugins/_data/analysis-ik/6. 授权分词器目录(避免权限问题)
# 确保容器内进程可访问分词器文件
# 小芝士:在主机上对目录执行chmod授权,容器内的目录权限会同时被修改,两者是 “实时同步” 的。
chmod -R 755 /var/lib/docker/volumes/elasticsearch_plugins/_data/analysis-ik/7. 重启Elasticsearch生效
分词器需在容器启动时加载,因此重启容器使分词器生效:
docker restart elasticsearch关键注意事项
版本严格匹配:Elasticsearch与IK分词器版本必须完全一致(如7.17.3对应7.17.3),版本不匹配会导致容器启动失败;
数据卷路径对应:所有操作均针对主机上的
/var/lib/docker/volumes/elasticsearch_plugins/_data/路径,而非容器内路径,数据卷会自动同步;权限检查:若重启后Elasticsearch异常,可通过
docker logs elasticsearch查看日志,若提示“权限拒绝”,重新执行步骤6的授权命令即可。
5. Nginx安装(前端网页服务器)
运行主机:Docker服务器(192.168.171.15)
# 1. 拉取Nginx 1.22镜像
docker pull nginx:1.22
# 2. 用数据卷启动Nginx
docker run -p 80:80 --name nginx \
-v nginx_html:/usr/share/nginx/html \ # 网页文件数据卷
-v nginx_logs:/var/log/nginx \ # 日志数据卷
-d nginx:1.22
# 3. 授权网页数据卷目录
chmod -R 755 /var/lib/docker/volumes/nginx_html/_data/四:利用Jenkins部署mall后台程序(Jenkins主机操作)
新手解读
这一步在Jenkins服务器(192.168.171.12) 上配置Maven,让Jenkins能拉取Gitlab的代码、打包后端项目,再传到Docker服务器部署。
1. 安装Maven
运行主机:Jenkins服务器(192.168.171.12)
# 1. 安装JDK(Maven依赖Java)
yum install -y java-17-openjdk java-17-openjdk-devel
# 2. 下载Maven 3.8.6(可先通过浏览器下好再上传,或用wget)
wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
# 3. 解压并移动到指定目录
tar zxvf apache-maven-3.8.6-bin.tar.gz
mv apache-maven-3.8.6 /usr/local/maven
# 4. 配置环境变量
vim /etc/profile
# 在文件末尾添加以下内容:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
# 5. 生效环境变量
source /etc/profile
# 6. 验证Maven是否安装成功(显示版本即成功)
mvn -version2. 修改Maven阿里源(加速下载依赖)
运行主机:Jenkins服务器(192.168.171.12)
# 编辑Maven配置文件
vim /usr/local/maven/conf/settings.xml
# 找到<mirrors>标签,替换为阿里源:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>3. Jenkins配置JDK和Maven
运行主机:Jenkins服务器(192.168.171.12)(网页操作)
打开Jenkins网页:
http://192.168.171.12:8080(首次登录需输入初始密码,密码在/var/jenkins_home/secrets/initialAdminPassword)。点击“Manage Jenkins”→“Global Tool Configuration”。

配置JDK:
取消“Install automatically”。
别名填“jdk-17”。
JAVA_HOME填
/usr/lib/jvm/java-17-openjdk。
配置Maven:
取消“Install automatically”。
名称填“maven-3.8.6”。
MAVEN_HOME填
/usr/local/maven。
点击“Save”保存。
4. Gitlab创建项目(Gitlab主机操作)
运行主机:Gitlab服务器(192.168.171.11)(网页操作)
打开Gitlab网页:
http://192.168.171.11,登录后点击“New project”。选择“Import project”→“Repository by URL”。
输入仓库URL:
https://gitee.com/kgc-wjq/mall.git,项目名称填“mall”,可见性选“Private”,点击“Create project”。
导入成功后,进入项目→编辑
pom.xml文件:找到
<properties>标签,添加Docker服务器地址:<docker.host>http://192.168.171.15:2375</docker.host>
提交修改(点击“Commit changes”)。
复制项目HTTP地址:
http://192.168.171.11/root/mall.git(后续Jenkins要用)。
pom.xml 是什么?
当 Jenkins 拉取 Gitlab 上的mall项目代码后,会用 Maven 执行打包命令(mvn clean package)。这个过程中,Maven 需要调用 Docker 插件(比如docker-maven-plugin)来构建项目的 Docker 镜像,并将镜像推送到你的 Docker 服务器(192.168.171.15)。
pom.xml 是 Maven 项目的核心配置文件,相当于项目的 “说明书” 或 “配置清单”,所有用 Maven 管理的 Java 项目(比如你部署的mall商城后端)都必须包含这个文件。
它的主要作用是告诉 Maven:
项目的基本信息(名称、版本、作者等);
项目依赖哪些第三方库(比如 SpringBoot、MySQL 驱动等,Maven 会自动下载这些依赖);
项目打包方式(比如打成 jar 包还是 war 包);
构建项目时需要用到的插件(比如编译代码的插件、生成 Docker 镜像的插件等)。
编辑pom.xml添加docker.host配置,是为了让 Maven 的 Docker 插件知道 Docker 服务器的地址,从而完成后续的镜像构建和部署操作。
5. Jenkins配置SSH连接Docker服务器
新手解读
Jenkins需要免密码连接Docker服务器,才能传文件和执行命令。
步骤1:Jenkins生成SSH密钥(运行主机:Jenkins服务器)
# 生成密钥(一路按回车,不要设密码)
ssh-keygen
# 把公钥传到Docker服务器(输入Docker服务器root密码)
ssh-copy-id root@192.168.171.15
# 验证免密是否成功(不用输密码就能登录即成功)
ssh root@192.168.171.15
exit # 退出Docker服务器步骤2:Jenkins添加Docker服务器凭据(网页操作)
让 Jenkins 保存登录 Docker 服务器的账号密码,让后续的自动化部署能远程登录操控 Docker 服务器。
Jenkins网页→“Manage Jenkins”→“Credentials”→“System”→“Global credentials”→“Add Credentials”。

类型选“Username with password”,用户名填“root”,密码填Docker服务器root密码,ID填“docker-auth”,描述填“Docker服务器凭据”,点击“Create”。

步骤3:Jenkins添加SSH Remote Hosts(网页操作)
让 Jenkins “记住” 如何通过 SSH 协议安全连接到你的 Docker 服务器(192.168.171.15),为后续自动化部署时远程操作 Docker 服务器做准备。
“Manage Jenkins”→“System”→“SSH remote hosts”→“Add”。
Hostname填
192.168.171.15,Port填22,Credentials选“root (Docker服务器凭据)”,点击“Save”。
6. Jenkins新建后端部署任务(网页操作)
Jenkins首页→“New Item”,任务名称填“mall-backend”,选择“构建一个maven项目”,点击“OK”。
源码管理:
选“Git”,Repository URL填
http://192.168.171.11/root/mall.git。Branches to build填
*/master(默认分支)。
Build:
Goals and options填
clean package -Dmaven.test.skip=true(清理→打包→跳过测试)。
Post Steps(构建后操作):

点击“Add post-build step”→“Execute shell”,输入:
# 把启动脚本传到Docker服务器(先把mall-sh文件夹传到Jenkins的/var/jenkins_home目录) # 在jenkins服务器上操作 mkdir -p /var/jenkins_home/mall-sh cd !$ rz # 将 Jenkins 服务器上存放的 3 个启动脚本所在的`mall-sh`文件夹,通过`scp`命令复制到 Docker 服务器的`/root`目录下。 scp -r /var/jenkins_home/mall-sh root@192.168.171.15:/root再点击“Add post-build step”→“Execute shell script on remote host using ssh”:
SSH site选
root@192.168.171.15:22。Command填:
chmod +x /root/mall-sh/* # 给脚本加执行权限 /root/mall-sh/mall-admin.sh # 启动后台管理服务 /root/mall-sh/mall-search.sh # 启动搜索服务 /root/mall-sh/mall-portal.sh # 启动前台服务
点击“Save”保存。
7. 执行构建并验证
进入“mall-backend”任务→点击“Build Now”,首次构建需下载依赖,耗时较长(确保网络正常)。
构建成功后,验证服务:
后台管理API:
http://192.168.171.15:8080/swagger-ui/搜索服务API:
http://192.168.171.15:8081/swagger-ui/前台服务API:
http://192.168.171.15:8085/swagger-ui/
五:利用Jenkins部署NodeJS前端应用(Jenkins主机操作)
新手解读
前端项目用NodeJS构建,步骤和后端类似:Jenkins拉取Gitlab的前端代码,用npm打包,再传到Docker服务器的Nginx数据卷里。
1. 安装NodeJS
运行主机:Jenkins服务器(192.168.171.12)
# 1. 安装编译依赖
yum -y install gcc gcc-c++ make
# 2. 下载NodeJS 14.18.0(或通过浏览器下载)
wget https://nodejs.org/dist/v14.18.0/node-v14.18.0-linux-x64.tar.gz
# 3. 解压并创建软链接(方便全局使用)
tar zxvf node-v14.18.0-linux-x64.tar.gz
mv node-v14.18.0-linux-x64 /usr/local/nodejs14
ln -s /usr/local/nodejs14/bin/* /usr/local/bin
# 4. 验证安装(显示版本即成功)
node -v # 输出v14.18.0
npm -v # 输出6.14.152. Gitlab创建前端项目
运行主机:Gitlab服务器(192.168.171.11)(网页操作)
新建项目→“Import project”→“Repository by URL”。
输入仓库URL:
https://gitee.com/kgc-wjq/mall-admin-web.git,项目名称填“mall-admin-web”,点击“Create project”。编辑
config/prod.env.js文件:
把
BASE_API改成后端API地址:http://192.168.171.15:8080。
提交修改,复制项目HTTP地址:
http://192.168.171.11/root/mall-admin-web.git。
3. Jenkins新建前端部署任务(网页操作)
Jenkins首页→“New Item”,任务名称填“mall-frontend”,选“Freestyle project”,点击“OK”。
源码管理:
选“Git”,Repository URL填
http://192.168.171.11/root/mall-admin-web.git。Branches to build填
*/master。
Build Steps:
点击“Add build step”→“Execute shell”,输入打包脚本:
# 查看npm版本 npm -v # 删除旧依赖和缓存 rm -rf node_modules package-lock.json npm cache clear --force # 用腾讯云镜像加速(国内快) npm config set registry http://mirrors.cloud.tencent.com/npm/ # 安装依赖 npm install --unsafe-perm # 打包项目 npm run build # 把打包后的文件传到Docker服务器的Nginx数据卷 scp -r /root/.jenkins/workspace/mall-frontend/dist/* root@192.168.171.15:/var/lib/docker/volumes/nginx_html/_data/
构建后操作:
点击“Add post-build step”→“Send build artifacts over SSH”。
SSH Server选“mall”(之前配置的Docker服务器)。
Exec command填:
chmod -R 755 /var/lib/docker/volumes/nginx_html/_data/(授权网页文件)。
点击“Save”保存。
4. 执行构建并验证
进入“mall-frontend”任务→“Build Now”。
构建成功后,访问前端页面:
http://192.168.171.15,用默认账号admin、密码macro123登录,能看到商品列表即部署成功。
六:APP端测试
新手解读
APP端用HBuilder X模拟器测试,只需修改连接的后端地址为Docker服务器的前台API。
在Windows上安装HBuilder X,导入
mall-app-web-1.0.0项目。编辑
utils/requestUtil.js文件:把
config.baseUrl改成http://192.168.171.15:8085。
点击“运行”→“运行到浏览器”→“Chrome”,浏览器切换到“手机模式”,即可看到APP界面。
三个脚本的具体作用(均在Docker服务器执行)
1. mall-admin.sh(后台管理服务启动脚本)
#!/usr/bin/env bash
app_name='mall-admin'
# 停止并删除旧容器
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
# 清理无用镜像
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
# 使用数据卷启动新容器(日志存储到数据卷)
docker run -p 8080:8080 --name ${app_name} \
--link mysql:db \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v mall_admin_logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'核心功能:启动商城的后台管理服务(管理员用于管理商品、订单等的系统),并确保与MySQL数据库关联,日志持久化到主机。
2. mall-portal.sh(前台服务启动脚本)
#!/usr/bin/env bash
app_name='mall-portal'
# 停止并删除旧容器
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
# 清理无用镜像
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
# 使用数据卷启动新容器(日志存储到数据卷)
docker run -p 8085:8085 --name ${app_name} \
--link mysql:db \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v mall_ortal_logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'
核心功能:启动商城的前台服务(用户浏览商品、下单的系统),关联MySQL数据库,确保用户操作日志被持久化保存。
3. mall-search.sh(搜索服务启动脚本)
#!/usr/bin/env bash
app_name='mall-search'
# 停止并删除旧容器
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
# 清理无用镜像
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
# 使用数据卷启动新容器(日志存储到数据卷)
docker run -p 8081:8081 --name ${app_name} \
--link mysql:db \
--link elasticsearch:es \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v mall_search-logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'
核心功能:启动商品搜索服务(用户搜索商品时调用),同时关联MySQL(获取商品数据)和Elasticsearch(实现高效搜索),确保搜索日志被保存。
三、统一说明
脚本共性操作:
每个脚本都遵循“停止旧容器→删除旧容器→清理无用镜像→启动新容器”的流程,目的是确保每次部署都是最新版本,避免旧版本残留导致冲突。
数据卷适配建议:
若需将日志目录改为数据卷(而非主机目录),可将
-v /mydata/app/${app_name}/logs:/var/logs替换为数据卷挂载,例如:-v mall_admin_logs:/var/logs # 后台服务日志数据卷 -v mall_portal_logs:/var/logs # 前台服务日志数据卷 -v mall_search_logs:/var/logs # 搜索服务日志数据卷(需提前创建对应数据卷:
docker volume create mall_admin_logs等)执行逻辑:
三个脚本依次启动后台、搜索、前台服务,共同构成完整的商城系统,用户通过前台访问,管理员通过后台管理,搜索功能依赖Elasticsearch提供支持。
新手常见问题
Docker启动失败?
用
docker logs 容器名(比如docker logs mysql)看日志,常见原因:端口被占用、数据卷权限不够。Jenkins拉取Gitlab代码失败?
检查Gitlab地址是否正确、Jenkins服务器能否ping通Gitlab(
ping 192.168.171.11)。前端页面403错误?
确认Nginx数据卷目录权限:
chmod -R 755 /var/lib/docker/volumes/nginx_html/_data/。Maven下载依赖慢?
检查阿里源配置是否正确,或换华为源:
https://mirrors.huaweicloud.com/repository/maven/。
