本文主要以图文的形式讲解 mall 在 Linux 环境下的部署,涉及在 Docker 容器中安装 MySQL、Redis、Nginx、RabbitMQ、MongoDB、Elasticsearch、Logstash、Kibana,以及 SpringBoot 应用部署,基于 CenterOS7.6。
# 👍 相关视频教程
# Docker环境安装
1 yum install -y yum-utils device-mapper-persistent-data lvm2
1 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# MySQL安装
1 2 3 4 5 6 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 \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7
参数说明
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
进入运行MySQL的docker容器:
1 docker exec -it mysql /bin/bash
1 mysql -uroot -proot --default-character-set=utf8
1 create database mall character set utf8
安装上传下载插件,并将document/sql/mall.sql上传到Linux服务器上:
将mall.sql文件拷贝到mysql容器的/目录下:
1 docker cp /mydata/mall.sql mysql:/
1 2 use mall; source /mall.sql;
创建一个reader:123456帐号并修改权限,使得任何ip都能访问:
1 grant all privileges on *.* to 'reader' @'%' identified by '123456';
# Redis安装
1 2 3 docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d redis:7 redis-server --appendonly yes
进入Redis容器使用redis-cli命令进行连接:
1 docker exec -it redis redis-cli
# Nginx安装
1 2 3 4 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
1 docker container cp nginx:/etc/nginx /mydata/nginx/
1 2 docker stop nginx docker rm nginx
1 2 3 4 5 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
# RabbitMQ安装
下载rabbitmq3.9-management的docker镜像:
1 docker pull rabbitmq:3.9-management
1 2 3 docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \ -v /mydata/rabbitmq/data:/var/lib/rabbitmq \ -d rabbitmq:3.9-management
1 2 firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --reload
输入账号密码并登录:guest guest
创建帐号并设置其角色为管理员:mall mall
# Elasticsearch安装
下载Elasticsearch7.17.3的docker镜像:
1 docker pull elasticsearch:7.17.3
1 sysctl -w vm.max_map_count=262144
使用如下命令启动Elasticsearch服务,内存小的服务器可以通过ES_JAVA_OPTS来设置占用内存大小:
1 2 3 4 5 6 7 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 /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目录的权限,再重新启动即可;
1 chmod 777 /mydata/elasticsearch/data/
下载完成后解压到Elasticsearch的/mydata/elasticsearch/plugins目录下;
1 docker restart elasticsearch
1 2 firewall-cmd --zone=public --add-port=9200/tcp --permanent firewall-cmd --reload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "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" }
# Logstash安装
下载Logstash7.17.3的docker镜像:
1 docker pull logstash:7.17.3
1 2 3 4 5 6 output { elasticsearch { hosts => "es:9200" index => "mall-%{type}-%{+YYYY.MM.dd}" } }
创建/mydata/logstash目录,并将Logstash的配置文件logstash.conf拷贝到该目录;
1 2 3 4 docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \ --link elasticsearch:es \ -v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \ -d logstash:7.17.3
1 logstash-plugin install logstash-codec-json_lines
# Kibana安装
1 docker pull kibana:7.17.3
1 2 3 4 docker run --name kibana -p 5601:5601 \ --link elasticsearch:es \ -e "elasticsearch.hosts=http://es:9200" \ -d kibana:7.17.3
1 2 firewall-cmd --zone=public --add-port=5601/tcp --permanent firewall-cmd --reload
# MongoDB安装
1 2 3 docker run -p 27017:27017 --name mongo \ -v /mydata/mongo/db:/data/db \ -d mongo:4
# MinIO安装
下载完成后使用如下命令运行MinIO服务,注意使用--console-address指定MinIO Console的运行端口(否则会随机端口运行):
1 2 3 4 5 docker run -p 9090:9000 -p 9001:9001 --name minio \ -v /mydata/minio/data:/data \ -e MINIO_ROOT_USER=minioadmin \ -e MINIO_ROOT_PASSWORD=minioadmin \ -d minio/minio server /data --console-address ":9001"
# Docker全部环境安装完成
1 2 3 4 5 6 7 8 9 10 11 REPOSITORY TAG IMAGE ID CREATED SIZE redis 7 604d80444252 2 days ago 117MB nginx 1.22 f9c88cc1c21a 2 weeks ago 142MB elasticsearch 7.17.3 3c91aa69ae06 8 weeks ago 613MB kibana 7.17.3 4897f4b8b6ee 8 weeks ago 797MB logstash 7.17.3 dd4291c803f4 8 weeks ago 774MB mongo 4 1c0f1e566fec 5 months ago 438MB rabbitmq 3.9-management 6c3c2a225947 6 months ago 253MB mysql 5.7 7faa3c53e6d6 3 years ago 373MB nginx 1.10 0346349a1a64 5 years ago 182MB java 8 d23bdf5b1b1b 5 years ago 643MB
# SpringBoot应用部署# 构建所有Docker镜像并上传
修改项目根目录下的pom.xml中的docker.host属性:
1 2 3 <properties> <docker.host>http://192.168.3.101:2375</docker.host> </properties>
如果项目根目录的pom.mxl中docker-maven-plugin的<executions>节点被注释掉了就打开注释,使项目在打包时直接构建Docker镜像;
直接双击根项目mall的package命令可以一次性打包所有应用的Docker镜像;
1 2 3 4 REPOSITORY TAG IMAGE ID CREATED SIZE mall/mall-portal 1.0-SNAPSHOT c668ea32b405 24 hours ago 712MB mall/mall-search 1.0-SNAPSHOT 627d1ebbc21b 24 hours ago 745MB mall/mall-admin 1.0-SNAPSHOT 2300aca75270 24 hours ago 725MB
# 部署mall-admin1 2 3 4 5 6 docker run -p 8080:8080 --name mall-admin \ --link mysql:db \ --link redis:redis \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/admin/logs:/var/logs \ -d mall/mall-admin:1.0-SNAPSHOT
注意:如果想使用Logstash收集日志的话,需要将应用容器连接到Logstsh,添加如下配置即可;
1 --link logstash:logstash \
# 部署mall-search1 2 3 4 5 6 docker run -p 8081:8081 --name mall-search \ --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-port1 2 3 4 5 6 7 8 docker run -p 8085:8085 --name mall-portal \ --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
# 开启防火墙1 2 3 4 firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --zone=public --add-port=8081/tcp --permanent firewall-cmd --zone=public --add-port=8085/tcp --permanent firewall-cmd --reload
# 访问接口进行测试