The simplest mall deployment method under Linux is to use two docker-compse scripts to complete the deployment. The first script is used to deploy the services that mall depends on (mysql, redis, nginx, rabbitmq, elasticsearch, kibana, mongo), and the second script is used to deploy applications in mall (mall-admin, mall-search, mall -portal).
Docker environment construction and use
Specific reference: Docker commands for developers
Docker-compose environment construction and use
Specific reference: Use Docker Compose to deploy SpringBoot applications
Docker-compose deployment of mall project
Run configuration requirements
CenterOS7.6 version, recommended 4G or more memory
Deployment related files
Database script mall.sql: https://github.com/macrozheng/mall/blob/master/document/sql/mall.sql
Nginx configuration file nginx.conf: https://github.com/macrozheng/mall/blob/master/document/docker/nginx.conf
docker-compose-env.yml:https://github.com/macrozheng/mall/tree/master/document/docker/docker-compose-env.yml
docker-compose-app.yml:https://github.com/macrozheng/mall/tree/master/document/docker/docker-compose-app.yml
Preparation before deployment
Package and upload the mirror image of the mall application
Need to package mall-admin, mall-search, mall-portal docker images, specific reference: Use Maven plugin to build Docker images for SpringBoot applications
Download all the Docker images that need to be installed
docker pull mysql:5.7docker pull redis:3.2docker pull nginx:1.10docker pull rabbitmq:3.7.15-managementdocker pull elasticsearch:6.4.0docker pull kibana:6.4.0docker pull mongo:3.2
elasticsearch
The system kernel parameters need to be set, otherwise it will not be able to start due to insufficient memory.
# Change the setting sysctl -w vm.max_map_count=262144# Make it effective immediately sysctl -p
You need to create the /mydata/elasticsearch/data directory and set permissions, otherwise the startup will fail due to unauthorized access.
# Create directory mkdir /mydata/elasticsearch/data/# Create and change the directory permissions chmod 777 /mydata/elasticsearch/data
nginx
You need to copy the nginx configuration file, otherwise the startup will fail because there is no configuration file when mounting.
# After creating the directory, upload the nginx.conf file to the directory mkdir /mydata/nginx/
Execute the docker-compose-env.yml script
On the Linux server where the file is uploaded, execute the docker-compose up command to start all the services that mall depends on.
version: '3'services: mysql: image: mysql:5.7 container_name: mysql command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci restart: always environment: MYSQL_ROOT_PASSWORD: root #设置root帐号密码 ports: - 3306:3306 volumes: - /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载 - /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件挂载 - /mydata/mysql/log:/var/log/mysql #日志文件挂载 redis: image: redis:3.2 container_name: redis command: redis-server --appendonly yes volumes: - /mydata/redis/data:/data #数据文件挂载 ports: - 6379:6379 nginx: image: nginx:1.10 container_name: nginx volumes: - /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf #配置文件挂载 - /mydata/nginx/html:/usr/share/nginx/html #静态资源根目录挂载 - /mydata/nginx/log:/var/log/nginx #日志文件挂载 ports: - 80:80 rabbitmq: image: rabbitmq:3.7.15-management container_name: rabbitmq volumes: - /mydata/rabbitmq/data:/var/lib/rabbitmq #数据文件挂载 - /mydata/rabbitmq/log:/var/log/rabbitmq #日志文件挂载 ports: - 5672:5672 - 15672:15672 elasticsearch: image: elasticsearch:6.4.0 container_name: elasticsearch environment: - "cluster.name=elasticsearch" #设置集群名称为elasticsearch - "discovery.type=single-node" #以单一节点模式启动 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小 volumes: - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载 - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载 ports: - 9200:9200 kibana: image: kibana:6.4.0 container_name: kibana links: - elasticsearch:es #可以用es这个域名访问elasticsearch服务 depends_on: - elasticsearch #kibana在elasticsearch启动之后再启动 environment: - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址 ports: - 5601:5601 mongo: image: mongo:3.2 container_name: mongo volumes: - /mydata/mongo/db:/data/db #数据文件挂载 ports: - 27017:27017
上传完后在当前目录下执行如下命令:
docker-compose -f docker-compose-env.yml up -d
对依赖服务进行以下设置
当所有依赖服务启动完成后,需要对以下服务进行一些设置。
mysql
需要创建mall数据库并创建一个可以远程访问的对象reader。
将mall.sql文件拷贝到mysql容器的/目录下:
docker cp /mydata/mall.sql mysql:/
进入mysql容器并执行如下操作:
#进入mysql容器docker exec -it mysql /bin/bash#连接到mysql服务mysql -uroot -proot --default-character-set=utf8#创建远程访问用户grant all privileges on *.* to 'reader' @'%' identified by '123456';#创建mall数据库create database mall character set utf8;#使用mall数据库use mall;#导入mall.sql脚本source /mall.sql;
elasticsearch
需要安装中文分词器IKAnalyzer,并重新启动。
docker exec -it elasticsearch /bin/bash#此命令需要在容器中运行elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zipdocker restart elasticsearch
rabbitmq
需要创建一个mall用户并设置虚拟host为/mall。
访问管理页面地址:http://192.168.3.101:15672/
输入账号密码并登录:guest guest
创建帐号并设置其角色为管理员:mall mall
创建一个新的虚拟host为:/mall
点击mall用户进入用户配置页面
给mall用户配置该虚拟host的权限
执行docker-compose-app.yml脚本
将该文件上传的linux服务器上,执行docker-compose up命令即可启动mall所有的应用。
version: '3'services: mall-admin: image: mall/mall-admin:1.0-SNAPSHOT container_name: mall-admin ports: - 8080:8080 external_links: - mysql:db #可以用db这个域名访问mysql服务 mall-search: image: mall/mall-search:1.0-SNAPSHOT container_name: mall-search ports: - 8081:8081 external_links: - elasticsearch:es #可以用es这个域名访问elasticsearch服务 - mysql:db #可以用db这个域名访问mysql服务 mall-portal: image: mall/mall-portal:1.0-SNAPSHOT container_name: mall-portal ports: - 8085:8085 external_links: - redis:redis #可以用redis这个域名访问redis服务 - mongo:mongo #可以用mongo这个域名访问mongo服务 - mysql:db #可以用db这个域名访问mysql服务 - rabbitmq:rabbit #可以用rabbit这个域名访问rabbitmq服务
上传完后在当前目录下执行如下命令:
docker-compose -f docker-compose-app.yml up -d
开启防火墙即可在其他主机上访问所有服务
systemctl stop firewalld