Skip to content

分布式部署

服务打包

在项目根目录创建以下脚本并执行。

  • windows环境
    shell
    @echo off
    
    rem 本地Maven安装路径
    set Path=%Path%;"D:\Program Files\apache-maven-4.0.0\bin"
    rem 本地JDK安装路径
    set JAVA_HOME=D:\Program Files\Java\jdk-17.0.8
    rem 本地仓库路径
    set LOCAL_MAVEN_REPO="D:\MavenRepo"
    
    cd gateway
    call mvn -Dmaven.repo.local=%LOCAL_MAVEN_REPO% clean package
    
    cd ../auth
    call mvn -Dmaven.repo.local=%LOCAL_MAVEN_REPO% clean package
    
    cd ../server
    call mvn -Dmaven.repo.local=%LOCAL_MAVEN_REPO% clean package
    
    cd ../lite
    call mvn -Dmaven.repo.local=%LOCAL_MAVEN_REPO% clean package
  • Linux环境
    shell
    #!/bin/bash
    
    # 本地Maven安装路径
    export PATH=$PATH;/root/apache-maven-4.0.0/bin
    # 本地JDK安装路径
    export JAVA_HOME=/root/Java/jdk-17.0.8
    # 本地仓库路径
    export LOCAL_MAVEN_REPO=/root/MavenRepo
    
    cd gateway
    call mvn -Dmaven.repo.local=$LOCAL_MAVEN_REPO clean package
    
    cd ../auth
    call mvn -Dmaven.repo.local=$LOCAL_MAVEN_REPO% clean package
    
    cd ../server
    call mvn -Dmaven.repo.local=$LOCAL_MAVEN_REPO% clean package
    
    cd ../lite
    call mvn -Dmaven.repo.local=$LOCAL_MAVEN_REPO% clean package

服务部署


网关服务

  1. 在jar包所在目录下创建Dockerfile,填入以下内容。
    dockerfile
    FROM openjdk:17
    
    ADD gateway.jar /opt/iking/gateway.jar
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
    
    ENV JAVA_OPS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED"
    
    EXPOSE 8000
    
    CMD cd /opt/iking && java -jar ${JAVA_OPS} gateway.jar
  2. 在jar包所在目录执行docker build命令进行镜像制作。
    shell
    docker build -f Dockerfile -t gateway .
  3. 执行docker run命令启动服务。
    shell
    docker run -d --name gateway -p 8000:8000\
      -e SRV_PORT=8000\
      -e SRV_ADDRESS=x.x.x.x\
      -e ENV=dev\
      --restart=always\
      gateway
  4. 您也可以创建Dockerfile后,在jar包所在目录下创建以下脚本来启动服务。
    shell
    #!/bin/bash
    
    docker stop gateway || true
    docker rm gateway || true
    docker rmi gateway || true
    docker build -f Dockerfile -t gateway: .
    docker run -d --name gateway -p 8000:8000\
      -e SRV_PORT=8000\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      gateway

系统服务

  1. 在jar包所在目录下创建Dockerfile,填入以下内容。
    dockerfile
    FROM openjdk:17
    
    ADD server.jar /opt/iking/server.jar
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
    
    ENV JAVA_OPS="-Ddruid.wall.multiStatementAllow=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED"
    
    EXPOSE 6010
    
    CMD cd /opt/iking && java -jar ${JAVA_OPS} server.jar
  2. 在jar包所在目录执行docker build命令进行镜像制作。
    shell
    docker build -f Dockerfile -t server .
  3. 执行docker run命令启动服务。
    shell
    docker run -d --name server -p 6010:6010\
      -e SRV_PORT=6010\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      server
  4. 您也可以创建Dockerfile后,在jar包所在目录下创建以下脚本来启动服务。
    shell
    #!/bin/bash
    
    docker stop server || true
    docker rm server || true
    docker rmi server || true
    docker build -f Dockerfile -t server: .
    docker run -d --name server -p 6010:6010\
      -e SRV_PORT=6010\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      server

认证服务

  1. 在jar包所在目录下创建Dockerfile,填入以下内容。
    dockerfile
    FROM openjdk:17
    
    ADD auth.jar /opt/iking/auth.jar
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
    
    ENV JAVA_OPS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED"
    
    EXPOSE 7010
    
    CMD cd /opt/iking && java -jar ${JAVA_OPS} auth.jar
  2. 在jar包所在目录执行docker build命令进行镜像制作。
    shell
    docker build -f Dockerfile -t auth .
  3. 执行docker run命令启动服务。
    shell
    docker run -d --name auth -p 7010:7010\
      -e SRV_PORT=7010\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      auth
  4. 您也可以创建Dockerfile后,在jar包所在目录下创建以下脚本来启动服务。
    shell
    #!/bin/bash
    
    docker stop lite || true
    docker rm lite || true
    docker rmi lite || true
    docker build -f Dockerfile -t lite .
    docker run -d --name auth -p 7010:7010\
      -e SRV_PORT=7010\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      auth

业务服务

  1. 在jar包所在目录下创建Dockerfile,填入以下内容。
    dockerfile
    FROM openjdk:17
    
    ADD biz-demo.jar /opt/iking/biz-demo.jar
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
    
    ENV JAVA_OPS="-Ddruid.wall.multiStatementAllow=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED"
    
    EXPOSE 9010
    
    CMD cd /opt/iking && java -jar ${JAVA_OPS} biz-demo.jar
  2. 在jar包所在目录执行docker build命令进行镜像制作。
    shell
    docker build -f Dockerfile -t biz-demo .
  3. 执行docker run命令启动服务。
    shell
    docker run -d --name biz-demo -p 9010:9010\
      -e SRV_PORT=9010\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      biz-demo
  4. 您也可以创建Dockerfile后,在jar包所在目录下创建以下脚本来启动服务。
    shell
    #!/bin/bash
    
    docker stop biz-demo || true
    docker rm biz-demo || true
    docker rmi biz-demo || true
    docker build -f Dockerfile -t biz-demo: .
    docker run -d --name biz-demo -p 9010:9010\
      -e SRV_PORT=9010\
      -e SRV_ADDRESS=x.x.x.x\
      -e DISCOVERY_SRV_ADDR=x.x.x.x:8848\
      -e SERVICE_GROUP=DEFAULT_GROUP\
      -e ENV=dev\
      --restart=always\
      biz-demo

💥 Oracle数据库注意

如果采用Oracle数据库,需要修改durid配置:

yaml
spring:
	datasource:
    druid:
          filter:
            config:
              enabled: true
            wall:
              enabled: true
              config:
                variantCheck: false
                noneBaseStatementAllow: true
                commentAllow: true
                multiStatementAllow: true

因为flyway需要获取数据库用户,因此会执行:SELECT USER FROM DUAL等相关操作,涉及到oracle中的关键字USER,因此倒置执行失败,需要开启druid的防火墙过滤,并关闭variantCheck