Springboot+SpringCloud+vue微服务项目,后端使用Docker-compose部署至虚拟机环境

整理pom文件

这里 <relativePath/>与指定的父级pom不能同时存在,不然打包时会报错,在这里<relativePath> 元素用于指定父级项目的相对路径,直接指定不要使用相对路径

<parent>
   <groupId>music</groupId>
   <artifactId>music</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <!--        <relativePath/>-->
</parent>

接下来

添加打包插件,注意这里的

<executions>
        <execution>
                <id>repackage</id>
                <goals>
                        <goal>repackage</goal>
                </goals>
        </execution>
</executions>

在整个项目的根pom中不要添加这段executions(但是需要添加打包插件),如下,其他的模块全部需要添加打包插件和executions,解释一下execution,它的 id 为 repackage,这个 id 可以是任意的,用于标识这个执行阶段。<goals> 元素指定了这个执行阶段要执行的目标(goals),在这里,它指定了要执行 repackage 

接下来再注意一些pom的小细节

1.服务的父模块如mchat-service只能指定<packaging>为pom而不能为jar

2.如下2图类似的utils,model,feign依赖模块,有时候会(经常)报错,业务模块找不到指定的如下1图的依赖,导致无法打包,这时候就可以在被依赖模块中添加2图中框选的<configuration>,这样就不会打包报错了

3.有时候依赖服务模块(utils,model......)还会打包报错----无法找到主类,这时候直接创建一个main类里面添加一个空的main方法就可以了

打包业务服务与依赖服务

在这里我们要使用到docker和docker-compose来创建服务镜像和容器

这里如何在虚拟机中使用docker操作就不赘述了,一搜一大把

这里讲如何在IDEA中使用docker,直接在plugins里面搜索Docker安装Docker然后启用就可以了如下

然后需要配置远程连接虚拟机中的docker,

选择TCP连接,填写URL,这里需要修改虚拟机中的docker配置才能连接成功,怎么修改这里就不赘述了,一搜一大把

编写DockerFile

根据这里的注释编写把变量换成自己对应的表示就好了,---DcokerFile是为了创建服务镜像

注意暴露端口就是你的服务端口后面会讲到

编写业务依赖的docker-compose-env.yml

如下,用于创建依赖(如mysql,redis........)的镜像和启动对应容器

具体如何编写这里不再赘述,一搜一大把

version: '3'

services:
  mysql:
    container_name: mysql
    image: mysql:8.0.27
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ""
    volumes:
      - ./mysql_data:/var/lib/mysql #挂载到本地目录实现持久化
      - ./mysql_init:/docker-entrypoint-initdb.d #启动脚本
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    networks:
      - fuckingNet

  redis:
    container_name: redis
    image: redis:latest
    ports:
      - "6379:6379"
    environment:
      PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      GOSU_VERSION: "1.17"
      REDIS_VERSION: "7.2.4"
      REDIS_DOWNLOAD_URL: "http://download.redis.io/releases/redis-7.2.4.tar.gz"
      REDIS_DOWNLOAD_SHA: "8d104c26a154b29fd67d6568b4f375212212ad41e0c2caa3d66480e78dbd3b59"
    command:
      - "--requirepass"
      - ""
    volumes:
      - ./redis_data:/data
    working_dir: "/data"
    restart: always
    entrypoint:
      - "docker-entrypoint.sh"
    networks:
      - fuckingNet

  rabbitmq:
    container_name: rabbitmq
    image: rabbitmq:3.12.12-management
    ports:
      - "15671:15671"
      - "15672:15672"
      - "15691:15691"
      - "15692:15692"
      - "25672:25672"
      - "4369:4369"
      - "5671:5671"
      - "5672:5672"
    environment:
      RABBITMQ_DEFAULT_USER: ""
      RABBITMQ_DEFAULT_PASS: ""
    volumes:
      - ./rabbitmq_data:/var/lib/rabbitmq
    restart: always
    command:
      - "rabbitmq-server"
    networks:
      - fuckingNet

  nacos:
    container_name: nacos
    image: nacos/nacos-server:latest
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    environment:
      MODE: "standalone"
      PREFER_HOST_MODE: "ip"
      BASE_DIR: "/home/nacos"
      CLASSPATH: ".:/home/nacos/conf:"
      CLUSTER_CONF: "/home/nacos/conf/cluster.conf"
      FUNCTION_MODE: "all"
      JAVA_HOME: "/usr/lib/jvm/java-1.8.0-openjdk"
      NACOS_USER: "nacos"
      JAVA: "/usr/lib/jvm/java-1.8.0-openjdk/bin/java"
      JVM_XMS: "1g"
      JVM_XMX: "1g"
      JVM_XMN: "512m"
      JVM_MS: "128m"
      JVM_MMS: "320m"
      NACOS_DEBUG: "n"
      TOMCAT_ACCESSLOG_ENABLED: "false"
      TIME_ZONE: "Asia/Shanghai"
    restart: always
    entrypoint:
      - "bin/docker-startup.sh"
    working_dir: "/home/nacos"
    networks:
      - fuckingNet

  minio:
    container_name: minio
    image: minio/minio
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: ""
      MINIO_ROOT_PASSWORD: ""
    volumes:
      - ./minio_data:/data
    restart: always
    command:
      - "server"
      - "/data"
      - "--console-address"
      - ":9001"
    networks:
      - fuckingNet
networks:
  fuckingNet:
编写业务依赖的docker-compose-service.yml

这里注意ports:- "8880:8880"   映射前面对应外部访问端口,后面对应服务的端口

还有这里的docker-compose文件其实就是去执行刚刚创建的DockerFile文件,从而创建镜像和启动容器

如何编写docker-compose文件建议百度

version: '3'

services:
  mchat-gateway:
    container_name: mchat-gateway
    build:
      context: ./mchat-gateway
      dockerfile: DockerFile
    ports:
      - "8880:8880"
    networks:
      - fuckingNet

  chat-server:
    container_name: chat-server
    build:
      context: ./mchat-service/chat-server
      dockerfile: DockerFile
    ports:
      - "8899:8899"
    networks:
      - fuckingNet
    depends_on:
      - mchat-gateway

  music-client-server:
    container_name: music-client-server
    build:
      context: ./mchat-service/music-client-server
      dockerfile: DockerFile
    ports:
      - "8877:8877"
    networks:
      - fuckingNet
    depends_on:
      - chat-server
      - mchat-gateway

  music-manage-server:
    container_name: music-manage-server
    build:
      context: ./mchat-service/music-manage-server
      dockerfile: DockerFile
    ports:
      - "8888:8888"
    networks:
      - fuckingNet
    depends_on:
      - music-client-server
      - chat-server
      - mchat-gateway

networks:
  fuckingNet:
打包之前 

在打包之前,注意修改nacos中的配置,这里建议创建两套配置,即添加一个application-prod.yml配置,然后把其中的依赖的地址改成自己刚刚创建依赖容器时的容器名称,如下

创建的新的yml配置文件如下,这里name改成__服务名称+prod,然后在nacos创建一套新的如上的配置

记得修改feign模块的@FeignClient(value = "mchat-manage-prod", contextId = "ListSong")

将value修改为新的prod配置文件中的name

打包

使用maven工具,在根文件夹上先clean再package

打包会遇到的各种问题开头基本上说到了

运行docker-compose文件

先运行依赖即-env后缀的文件,再运行业务-prod后缀

如果运行docker-compose文件时报错---找不到指定的docker-compose.exe,那就直接去下载一个DockerDesktop

然后找到刚刚下载的DockerDesktop的docker-compose.exe文件的路径,把该路径设置到IDEA里面

这样基本上就可以了

然后成功运行之后大概是这样

点开容器可以看到执行状态

测试是否成功部署

前后端分离项目,直接把请求ip地址改成虚拟机地址即可

尝试访问

访问成功

后端本地部署结束

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值