- 前言
- 一、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 的配置
三、Nginx 配置同理,当需要配置数据库信息时,也可用此方法,标签名一致即可,替换application-docker.yml中的数据。
使用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,即可解决问题。



