应用场景
当前项目为springboot项目,运用有mysql mongodb redis nginx mqtt等组件由于常规部署相对复杂,现需要简单的本地部署方式以达到快速部署的效果
方案
主机为windows,利用VMware将整套环境搭建好,后续直接做虚拟机移植
实施
安装VMware
下载VMware 下载安装centos的操作系统镜像 运行虚拟机
设置虚拟机固定ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static" #dhcp改为static
ONBOOT="yes" #开机启用本配置
IPADDR=192.168.1.200 #静态IP
GATEWAY=192.168.1.1 #默认网关
NETMASK=255.255.255.0 #子网掩码
DNS1=192.168.1.1 #DNS 配置
重启网卡:service network restart
注意:IPADDR需要和本主机处于同一个网段,找一个不存在的IP设置即可。
centos虚拟机防火墙关闭
- 查看防火墙状态
- firewall-cmd --state
- 停止firewall
- systemctl stop firewalld.service
- 禁止firewall开机启动
- systemctl disable firewalld.service
安装docker并设置开机自启动
docker设置bridge网络,保证各容器间通信
$ docker network create my-net
docker 安装mysql rootpwd123
docker pull mysql
创建mysql数据挂载目录
启动mysql 挂载数据卷并配置网络 rootpwd123 设置开机自启动
docker run --name mysql --restart=always --network=my-net -v /zx_feed/mysql/conf:/etc/mysql/conf.d -v /zx_feed/mysql/logs:/logs -v /zx_feed/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpwd123 -d -i -p 3306:3306 mysql:latest
进入mysql容器,并登陆mysql 设置远程访问开启
- docker exec -it mysqlserver bash
- mysql -uroot -p
- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- flush privileges;
安装mongodb adminpwd123
创建mongo数据挂载文件夹
- docker pull mongo
- docker run -d -p 27017:27017 --restart=always --network=my-net -v /zx_feed/mongodb/config:/data/configdb -v /zx_feed/mongodb/data:/data/db --name mongo -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=adminpwd123 mongo --auth
安装redis kaide0630pwd
- 创建redis数据挂载文件夹 /zx_feed/redis
- docker pull redis
- docker run -d -p 6379:6379 --network=my-net -v /zx_feed/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /zx_feed/redis/data:/data --privileged=true --restart=always --name redis redis:latest /usr/local/etc/redis/redis.conf
安装mqtt服务器
拉取镜像 docker pull docker.io/emqx/emqx
- –name 名字
- 1883:MQTT 协议端口
- 8883:MQTT/SSL 端口
- 8083:MQTT/WebSocket 端口
- 8081:HTTP API 端口
- 18083:Dashboard 管理控制台端口
- -d 指定容器
docker run -itd --network=my-net --name mqtt -p 8085:8081 -p 8883:18083 -p 8884:1883 --restart=always docker.io/emqx/emqx
安装nginx
拉取镜像 docker pull nginx
配置文件随便找改下
挂载
docker run
--network=my-net
--name nginx
--restart=always
-d -p 80:80
-d -p 443:443
-v /etc/localtime:/etc/localtime
-v /zx_feed/nginx/html:/usr/share/nginx/html
-v /zx_feed/nginx/conf.d:/etc/nginx/conf.d
-v /zx_feed/nginx/logs:/var/log/nginx
nginx
-v /home/nginx/cert:/home/nginx/cert 是否挂载证书
前端项目打包dist文件放于 /zx_feed/nginx/html 下
docker安装部署springboot项目
编写Dockerfile
FROM openjdk:8u201-jdk-alpine
ENV LANG zh_CN.UTF-8 ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/Shanghai" > /etc/timezone RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
CMD ["sh","-c","/data/startServer.sh"]
startSeerver 脚本呢编写
java -server -Xms512m -Xmx512m -jar /data/kingdom-server-auth-1.0-SNAPSHOT.jar --spring.profiles.active=prod`
上传jar包 以及 Dockerfile 在java目录
制作镜像 创建容器 并运行
docker build -t eladmin-system .
jar包内以容器名访问其他容器 (注意由于是通过DOCKER内部通讯,端口应是容器内部端口)
docker run -dit --network=my-net -v /home/zx_iot:/data --name zx_iot_server -p 8000:8000 zx_iot_server --log-opt max-size=500m --log-opt max-file=3 --restart=always
(--log-opt max-size=10m --log-opt max-file=3 日志限制,限制文件大小,以及文件数量, 不加若控制台打印日志过多,会导致docker磁盘爆满而崩溃)
项目成功运行
导出虚拟机镜像
导入镜像并运行虚拟机
导入之后重新配置网络,设定ip,重启之后 移植成功。
over