虚拟机 Centos 整套生产环境部署

740 阅读3分钟

应用场景

当前项目为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

image.png

注意:IPADDR需要和本主机处于同一个网段,找一个不存在的IP设置即可。

centos虚拟机防火墙关闭

  • 查看防火墙状态
  • firewall-cmd --state
  • 停止firewall
  • systemctl stop firewalld.service
  • 禁止firewall开机启动
  • systemctl disable firewalld.service

安装docker并设置开机自启动

www.cnblogs.com/rwxwsblog/p…

docker设置bridge网络,保证各容器间通信

$ docker network create my-net

www.jb51.net/article/137…

docker 安装mysql rootpwd123

docker pull mysql

创建mysql数据挂载目录

image.png

启动mysql 挂载数据卷并配置网络 rootpwd123 设置开机自启动

www.cnblogs.com/jiefu/p/122…

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;

image.png

安装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目录

image.png

制作镜像 创建容器 并运行

docker build -t eladmin-system .

my.oschina.net/u/3971841/b…

image.png 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磁盘爆满而崩溃)

项目成功运行

image.png

导出虚拟机镜像

参考 blog.csdn.net/qq_39706570…

image.png

image.png

导入镜像并运行虚拟机

image.png

导入之后重新配置网络,设定ip,重启之后 移植成功。

over