栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一文搞定,使用yaml文件实现多环境配置与Maven打包,Nginx反向代理,Docker部署功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文搞定,使用yaml文件实现多环境配置与Maven打包,Nginx反向代理,Docker部署功能

文章目录
  • 前言
  • 一、Spring 配置
  • 二、Maven 配置
  • 三、Nginx 配置
  • 四、Docker部署
    • Dockerfile 定制镜像
    • Docker Compose 定义和运行多个 Docker 容器
  • 五、打包部署命令
    • 前端
    • 后端
  • 注意事项


前言

   在日常开发工作中通常会根据不同的项目运行环境,添加不同的配置文件,例如 开发环境,测试环境,生产环境等,每次手工的修改配置文件太过于繁琐,所以,可以在通过maven打包时确定需要使用的配置文件可以很好的解决这个问题。


一、Spring 配置

在application.yml中添加配置

# Spring配置
spring:
  profiles: 
    active:
      - "@activated.profile@"
二、Maven 配置

   Spring 配置文件也可以通过 Maven 配置文件激活,通过指定activated.profile 配置属性。
在每个 Maven 配置文件(父pom.xml)中,我们可以设置一个activated.profile属性,代码如下(示例)::

    
        
            druid
            
                
                true
            
            
                druid
            
            
                
                    
                        
                        false
                        src/main/resources
                        
                            application-docker.*
                        
                    
                    
                        
                        true
                        src/main/resources
                        
                            application.*
                            application-druid.*
                        
                    
                
            
        
        
            docker
            

                docker
                
                ruoyi-redis
                6379

                
                
                root
                root
            
            
                
                    
                        
                        false
                        src/main/resources
                        
                            application-druid.*
                        
                    
                    
                        
                        true
                        src/main/resources
                        
                            application.*
                            application-docker.*
                        
                    
                
            
        
    

docker它的值将用于替换 application.yml中的@activated.profile@ 占位符:
因此,项目就会加载application-docker.yml 的配置

同理,当需要配置数据库信息时,也可用此方法,标签名一致即可,替换application-docker.yml中的数据。

三、Nginx 配置

   使用Nginx进行反向代理,创建nginx.conf文件,代码如下(示例):

#允许生成的进程数,默认为1
worker_processes 1;

events {
    #每个进程的最大连接数,默认为512
    worker_connections 1024;
    }

http {
    #文件扩展名与文件类型映射表
    include    /etc/nginx/mime.types;
    #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile   on;

    # 代理缓冲区
    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;

    client_max_body_size   100m;

    # keepalive_timeout  65;

    server {
        listen       80;
#       server_name  localhost;
# 		charset utf-8;

		location / { # 请求的url过滤
		    # 对应docker-compose.yml文件中的配置(nginx:volumes)
            root   /home/www/ruoyi-frontend;
        }

		location /prod-api/ {
		    resolver 127.0.0.11 ipv6=off;
		    # 对应docker-compose.yml文件中的配置(ruoyi-system 容器名可代表IP),8080代表后端模块端口
			set $upstream ruoyi-system:8080;
            proxy_pass         http://$upstream;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

四、Docker部署 Dockerfile 定制镜像

  创建Dockerfile文件,代码如下(示例):

FROM openjdk:8-jre
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
WORKDIR /
ENTRYPOINT ["java","-jar","/app.jar"]
Docker Compose 定义和运行多个 Docker 容器

  创建docker-compose.yaml文件,代码如下(示例):

version: "3.7"
services:
  # 对于不是自定义镜像,可直接从线上(dockerhub)拉取
  redis:
    image: redis:latest # 镜像名:版本
    container_name: ruoyi-redis # 容器中的镜像名
    ports:  # 映射端口-->对外暴露端口:容器内部占用端口
      - 6379:6379
    networks:  # 网关
      - backend
    environment:
      - TZ=Asia/Shanghai
    # 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: unless-stopped

  ruoyi:
    build: ./ruoyi-admin  # 指定同级目录的eureka文件中构建的镜像(Dockerfile文件)
    image: ruoyi/system:latest
    container_name: ruoyi-system
    volumes:
      # D:logsruoyi  部署成功后,日志文件的位置
      # /logs  对应模块下application-docker.yml中配置的日志路径
      - D:logsruoyi:/logs
    networks:
      - backend
#    ports:
#      - 8080:8080
    depends_on:
      - redis # 当前容器依赖于这个项目启动之后才能启动
    environment:
      - TZ=Asia/Shanghai

  # nginx 配置
  nginx:
    image: nginx:latest
    container_name: ruoyi-nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./frontend:/home/www/ruoyi-frontend  # 静态资源路径(打包后的资源文件夹名) : nginx.cong中配置的路由跳转路径
    ports:
      - 31002:80  # 对外暴露端口:容器内部占用端口(即nginx监听端口)
    restart: unless-stopped
    networks:
      - backend

# 配置网关
networks:
  backend:
    name: ruoyi # 随便取

五、打包部署命令 前端

  在前端Vue项目的package.json,的 "scripts"中添加

"build:prod": "vue-cli-service build",

直接运行该指令,或npm run bulid:prod,生成静态资源文件,复制至后端项目中

后端
###帮助文件

### maven commands

mvn clean package -P release -DskipTests  
mvn clean package -P docker -DskipTests
mvn clean package -P docker -DskipTests -Ddatasource.url= -Ddatasource.username= -Ddatasource.password= -Djwt.secret=
### 移动打包好后的文件

修改、运行 gatherWarPackages.bat

### docker compose

##### 全部启动

docker compose up // -d --no-start --no-recreate --no-build

##### build

docker compose build [service1, service2...]

##### start

docker compose start [service1, service2...]

##### restart

docker compose restart [service1, service2...]

注意事项

  当定制镜像时,如果使用openjdk:8-jre-alpine 有可能会出现NullPointerException错误,如下所示:

java.lang.NullPointerException
	at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
	at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
	at sun.awt.FontConfiguration.init(FontConfiguration.java:107)

这是由于alpine缺少FontConfiguration导致的。
所以,建议此时,使用openjdk:8-jre,即可解决问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号