Deployment of mall in Linux environment (based on Docker Compose)

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

至此所有服务已经正常启动

图片

图片


Guess you like

Origin blog.51cto.com/15082397/2590803