使用Docker部署项目

1.项目简介

动物实验管理系统面向生物科技相关人员提供了一系列动物实验相关功能。

2.项目架构

使用Docker部署项目_第1张图片

3.部署平台

Win10->VMware->CentOS7->Docker

4.具体部署

前端部分:dist.zip
后端部分:animal.jar、animal.properties

4.1.Mysql

docker run --name=mysql -d --privileged=true -p 13307:3306 -v /share/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="123456" mysql:5.7.39

mysql的数据不是放在容器中,而是通过关联、映射而放在了Docker外CentOS中
查看Mysql容器是否启动,使用Navicat测试能否建立连接
如果连接成功,建立数据库animal_experiment,建立表,向表中插入数据
如果连接失败,根据提示进行排错(没有使用容器的外部IP、端口号;密码错误;防火墙)

4.2.Redis

docker run --privileged=true -p 16379:6379 --name=redis -v /share/redis/data:/data -d redis redis-server --requirepass 123456

Redis的数据不是放在容器中,而是通过关联、映射而放在了Docker外CentOS中
查看Redis容器是否启动,在docker外CentOS中使用redis-cli测试能否建立连接,测试是否能够使用配置的密码进行认证

4.3.RabbitMQ

docker run -d -p 5672:5672 -p 15672:15672 --name=mq1 rabbitmq:rabbitmq:3.9.22
docker exec mq1 rabbitmq-plugins enable rabbitmq_management
docker exec mq1 rabbitmqctl add_user admin 123456
docker exec mq1 rabbitmqctl set_user_tags admin administrator
docker exec mq1 rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

查看Mysql容器是否启动,测试能否使用Chrome访问RabbitMQ的外部IP、端口,在登陆界面使用账号guest、密码guest登录,查看adminstartor中是否存在admin及密码、主机

4.4.Minio

docker run -itd -p 19000:9000 -p 19090:19090 \
  --name minio1 \
  -e "MINIO_ACCESS_KEY=minioadmin" \
  -e "MINIO_SECRET_KEY=minioadmin" \
  -v /share/data:/data \
  -v /share/config:/root/.minio \
  minio/minio server /data \
  --console-address ":19090"

查看Mysql容器是否启动,Minio的数据不是放在容器中,而是通过关联、映射而放在了Docker外CentOS中
测试能否在浏览器中使用外部IP、端口号访问Minio,在登陆页面能否使用账号minioadmin、密码minioadmin

4.5.Tomcat(animal.jar)

4.5.1编辑配置文件

查看并记录容器mysql、redis、rabbitmq、minio的内部IP、地址。
编辑animal.properties

spring.application.name=Leiren-AnimalExperiment
server.port=8188
ispring.profiles.active=test

#访问排除路径 (不用动)
access.token.exclude.path.patterns=/,/error,/actuator/**,/login,/getTransEncryptKey,/validateCode/**,/swagger-ui.html,/verifyCode/**,/register,/isRegistered/**,/file/download/**

#ws-extends-starter配置
ws.extends.always-force-close=false
ws.extends.enable-api-doc=true

#redis config redis配置
spring.session.store-type=redis
spring.redis.host=172.17.0.5
spring.redis.port=6379
spring.redis.password=123456
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.timeout=3000

#mysql config mysql配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.17.0.2:3306/animal_experiment?useSSL=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.datasource.username=root
spring.datasource.password=123456
#spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
#解决事务中懒加载session关闭问题
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

#动物实验管理系统的用户默认密码
default-password=123456

#rabbitmq 配置信息
spring.rabbitmq.host=172.17.0.4
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/
spring.rabbitmq.listener.simple.retry.enabled=true

##### minio配置 

minio.server.endpoint=172.17.0.6
minio.server.port=9000
minio.server.secure=false
minio.server.access-key=minioadmin
minio.server.secret-key=minioadmin

##### 项目需要用到的bucket 创建对应的bucket

minio.server.must-buckets=system,ethics,experiment,room-cage,animal

4.5.2 创建、启动容器

docker run -dit --name=animal \
-p 18188:8188 \
-v /opt/animalExperiment:/opt \
kdvolder/jdk8 \
java -jar -Dspring.config.location=/opt/animal.properties /opt/animal.jar

查看容器animal是否启动,日志是否没有ERROR

4.6.Nginx

4.6.1 编辑配置文件

查看并记录容器animal的IP
创建一个animal_experiment.conf

server {
    listen       8009;
    location /{
        root   /var/www/dist; #对应dist的绝对路径
        index  index.html index.htm;
    }
    location ^~ /api/{
        rewrite /api/(.*) /$1 break; #去掉路径中的/api 不然无法访问到服务器
        proxy_pass http://172.17.0.7:8188;
    }
}

修改nginx.conf文件中 user 使用root,linux做什么都要和权限打交道,tomcat的部署都是用的是root,所以这里就要修改权限.

image.png

打开dist目录中 static/js/app.6cc84a26.js文件,全局查找 ws://172.172.172.102 替换为你的 后端的服务器的IP地址 (有两处):
sed -e "s|ws://172.172.172.102|ws://192.17.0.7|g" -i.bak app.6cc84a26.js

4.6.2 创建、启动容器

docker run  -p 18880:80 -p 18889:8009 --name mynginx \
-v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /etc/nginx/conf.d:/etc/nginx/conf.d \
-v /var/www:/var/www \
-d  nginx

Nginx通过关联、映射实际使用Docker外CentOS中的配置文件、前端部分

检查容器nginx是否启动,测试能否使用外部IP、端口号在浏览器中访问nginx,登陆页面是否有验证码,输入账号admin、密码123456、验证码之后点击登录是否登陆成功

5.总结

本次部署具有一定的先后顺序:
根据项目架构中的各个服务之间关系(Nginx访问Tomcat(animal.jar),Tomcat访问Mysql、Nginx、Redis、Minio),先测试Mysql、Nginx、Redis、Minio是否正常,再测试Tomcat是否正常,最后测试Nginx是否正常。

本次docker部署项目使用的是默认网络模式,容器重启可能会发生IP改变的情况,在调试过程经常需要更改配置文件的中各个服务的IP,带来很大的不便,后期考虑使用静态IP

你可能感兴趣的:(docker)