docker-电商-Mall商城项目
·
一.环境需求
|
配置项 |
说明 |
|
操作系统 |
CentOS 7.9 |
|
CPU |
4 核 |
|
内存 |
8 GB |
二.项目介绍
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis
实现。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、
会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管
理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
2.1系统构架图

2.2 业务架构图

2.3 涉及到部署技术栈

2.4 项目环境需求

三.前置准备
3.1 Docker环境安装
安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker:
yum install docker-ce
为yum源添加docker仓库位置:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-
ce.repo -O /etc/yum.repos.d/docker-ce.repo
vim /etc/docker/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"
]
}
#重启docker
systemctl daemon-reload
systemctl restart docker
3.2 MySQL安装
下载MySQL5.7的docker镜像
docker pull mysql:5.7
使用如下命令启动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 \
-d mysql:5.7
进入运行MySQL的docker容器:
# 安装mysql客户端
yum -y install mysql
# 登入数据库
mysql -uroot -proot -h 127.0.0.1 --default-character-set=utf8
# 创建数据库
create database mall character set utf8;
将sql文件导入到数据库:
mysql -uroot -proot -h 127.0.0.1 mall < mall.sql
创建一个reader:123456帐号并修改权限,使得任何ip都能访问:
mysql -uroot -proot -h 127.0.0.1
grant all privileges on *.* to 'reader' @'%' identified by
'123456';
flush privileges;
exit
3.3 Redis安装
下载Redis7的docker镜像:
docker pull redis:7
使用如下命令启动Redis服务:
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
--restart=always \
-d redis:7 redis-server --appendonly yes
进入Redis容器使用redis-cli命令进行连接:
docker exec -it redis redis-cli


3.4 Nginx安装
下载Nginx1.22的docker镜像:
docker pull nginx:1.22
先运行一次容器(为了拷贝配置文件):
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
--restart=always \
-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 \
-d nginx:1.22






3.5 RabbitMQ
安装 + 下载rabbitmq:3.7.15的docker镜像:
docker pull rabbitmq:3.7.15
使用如下命令启动RabbitMQ服务:
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



访问管理界面

添加用户

创建一个虚拟主机

给mall用户配置该虚拟host的权限


3.6 Elasticsearch安装
下载Elasticsearch7.17.3的docker镜像:
docker pull elasticsearch:7.17.3
修改虚拟内存区域大小,否则会因为过小而无法启动
sysctl -w vm.max_map_count=262144
使用如下命令启动Elasticsearch服务,内存小的服务器可以通过ES_JAVA_OPTS来
设置占用内存大小:
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
启动时会发现/usr/share/elasticsearch/data目录没有访问权限,只需要修
改/mydata/elasticsearch/data目录的权限,再重新启动即可;
chmod 777 /mydata/elasticsearch/data/
docker restart elasticsearch
下载分词插件
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,
{
"name": "708f1d885c16",
"cluster_name": "elasticsearch",
"cluster_uuid": "mza51wT-QvaZ5R0NmE183g",
"version": {
"number": "7.17.3",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "5ad023604c8d7416c9eb6c0eadb62b14e766caff",
"build_date": "2022-04-19T08:11:19.070913226Z",
"build_snapshot": false,
"lucene_version": "8.11.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}

![]()






3.7 Logstash安装
下载Logstash7.17.3的docker镜像:
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}"
}
}
进入容器内部,安装json_lines插件
docker exec -it logstash /bin/bash
logstash-plugin install logstash-codec-json_lines




3.8 Kibana安裝
下载kibana7.17.3的docker镜像:
docker pull kibana:7.17.3
使用docker命令启动:
docker run --name kibana -p 5601:5601 \
--restart=always \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.17.3


浏览器访问

3.9 Mongo安裝
下载mongo4的docker镜像:
docker pull mongo:4
使用docker命令启动:
docker run -p 27017:27017 --name mongo \
--restart=always \
-v /mydata/mongo/db:/data/db \
-d mongo:4


3.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"


浏览器访问 账号密码:minioadmin / minioadmin

3.11Jenkins安装
拉取镜像
docker pull jenkins/jenkins:lts
启动jendins
docker run -p 8088:8080 -p 50000:50000
--name jenkins
restart=always-v /mydata/jenkins:/var/jenkins_home\
-v /var/run/docker.sock:/var/run/docker.sock\
-v /usr/bin/docker:/usr/bin/docker \> -d jenkins/jenkins:lts
获得初始密码
cat /mydata/jenkins/secrets/initialAdminPassword


![]()
浏览器访问,前面还有个输入密码,前面获取的初始密码输入进去就行

四、后端服务部署
4.1 Java代码编译打包前置准备
安装Maven

安装jdk1.8.0
yum install java-1.8.0-openjdk java-1.8.0-devel -y
java -version

修改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


因为重启docker确认之前的容器是否启动成功,如果部分没启动可以使用下面的命令(执行3次)
docker start `docker ps -qa`
docker start `docker ps -qa`
docker start `docker ps -qa`
docker ps
拉取后端服务代码
cd /root
git clone https://github.com/macrozheng/mall.git
mall
├── mall-common -- 工具类及通用代码
├── mall-mbg -- MyBatisGenerator生成的数据库操作代码
├── mall-security -- SpringSecurity封装公用模块
├── mall-admin -- 后台商城管理系统接口[*]
├── mall-search -- 基于Elasticsearch的商品搜索系统[*]
├── mall-portal -- 前台商城系统接口[*]
└── mall-demo -- 框架搭建时的测试代码
修改配置参数
cd /root/mall
vim pom.xml
#找到如下关键字,改为docker机器IP:2375
<docker.host>http://192.168.83.168:2375</docker.host>

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

开始构建打包服务
docker run --rm\
-v /root/mall:/app \
-w /app \
eclipse-temurin:17-jdk \
/bin/bash -c "apt-get update && apt-get install -y maven && mvn clean package -Dmaven.test.skip=true"
启动 JDK 17 容器 挂载项目代码到 /app 在容器内安装 Maven 执行 mvn clean package -Dmaven.test.skip=true


启动后端服务
部署mall-admin
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
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-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

五、部署管理系統前端页面
5.1 前端服务前置准备
下载安装nodejs工具
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
# 查看npm版本
npm -v
node -v
5.2 拉取前端web代码
git clone --branch dev-v2 https://gitee.com/macrozheng/mall-admin-
web.git
修改mall-admin-web配置文件
cd /root/mall-admin-web
vim config/prod.env.js
#将BASE_API修改为后端mall-admin地址端口

编译打包前端服务
### SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm
install node-sass
cd /root/mall-admin-web
npm cache clean --force
npm install --registry=https://registry.npmmirror.com
npm run build
生成目录
将目录复制到nginx目录下替换原有内容
mv dist html
mv /root/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
浏览器验证

六、部署APP-UI前端
6.1 打开HbuilderX开发工具

导入项目:
手动下载软件包:https://gitee.com/macrozheng/mall-app-
web/repository/archive/master.zip
导入到软件中

改配置



"sassImplementationName": "node-sass",

6.2 发行 ==> PC web 或 H5

找到编译后的网页文件上到Nginx /mydata/nginx/html目录内
6.3 访问验证:http://$ip/app/

更多推荐

所有评论(0)