Javaweb前后端分離項目docker部署


Javaweb前后端分離項目docker中部署

一、環境

  • docker
  • nginx
  • react
  • spring

 

二、准備

(一)、Javaweb項目打包

1、利用maven打包成war/jar文件

  • 跳過測試文件

    打包前先修改maven打包配置,不打包測試文件

    // 在下圖中輸入
    -Dmaven.test.skip=true -Dpmd.skip=true
    

 

  • 打包成war/jar包,相關在pom.xml中配置

    在Maven中選中 項目名 下的package進行打包

 

  • 無異常后獲取結果

    打包好后的包在 項目/target

 

(二)、鏡像制作

Dockerfilestart.shxxxx.war等相關文件放在同一個目錄下

docker build -t image_name:tag .     # 創建鏡像

 

# Dockerfile參考

FROM oracle-jdk:8

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
    && mkdir -p /home/admin/

ENV APP_DIR=/home/admin/

WORKDIR $APP_DIR

COPY libdxlc_ctu.so startup.sh darklight-console.war ip2region.db $APP_DIR

ENTRYPOINT ["/home/admin/startup.sh"]

 

# start.sh參考

#!/bin/sh

if test -z "$JVM_OPTION_SETTING"; then
    JVM_OPTION_SETTING="-Xms512M -Xmx512M -Xss256k"
fi

JAVA_OPTS="-server $JVM_OPTION_SETTING -Dfile.encoding=UTF-8 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -Xnoclassgc $*"

java $JAVA_OPTS -jar darklight-console.war --spring.profiles.active=prod

 

(三)、前端文件打包

npm build

打包后的文件具體位置根據配置文件確定,這里打包好的文件即 build 目錄

 

(四)、nginx配置

1、修改配置方式

  • 直接修改/etc/ngxin/nginx.conf

  • 或者新建my.conf/etc/nginx/conf.d/目錄下

 

2、nginx默認配置

nginx在/etc/nginx/conf.d/目錄下有個default.conf默認配置,其中指定了前端文件默認存儲目錄

  • root => 指定靜態文件默認存儲的位置
  • index index.html index.htm; => 配置默認首頁,即root對應目錄下的index.html或者index.htm

 

3、修改配置

這里通過新建conf文件修改配置:

  • proxy_pass:后端的ip:port
  • root、index:指定靜態文件存放的根目錄、啟動的首頁頁面
server {

	listen 80;
	server_name 172.30.5.10;
	charset utf-8;

	client_max_body_size 800m;

	location / {
		# root /xxx/xxx   # 可指定前端文件的根目錄
		# index index.html   # 啟動首頁
		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_pass http://172.30.5.10:8099/;
    }
}

 

三、部署

1、前端部署——在nginx中

1)拉取nginx鏡像

docker pull nginx

 

2)啟動nginx容器

docker run -d --restart=always \
    --name nginx-1 \
    --network darklight \
    --ip 172.30.5.12 \
    -p 9001:80 \
    -v $PWD/nginx-info/conf.d/my.conf:/etc/nginx/conf.d/my.conf \      # 在自定義配置文件使用
    -v $PWD/nginx-info/html:/usr/share/nginx/html \
    -v $PWD/nginx-info/logs:/var/log/nginx \
    nginx:latest

 

3)配置nginx

修改前端打包文件中window.API_SERVER = 'http://172.30.5.10:8080',其他項目忽略此句

  • 使用nginx默認配置
    • 需要將打包后目錄下的所有文件替換到默認配置文件指定的目錄這下(root所指定 /usr/share/nginx/html/)
    • 需要確保index對應的首頁與目錄下對應

 

  • 自定義配置
    • 在配置文件中指定rootindex

      server {
      
      	listen 80;
      	server_name 172.30.5.10;
      	charset utf-8;
      
      	client_max_body_size 800m;
      
      	location / {
      		root /xxx/xxx   # 可指定靜態文件的根目錄
      		index index.html   # 啟動首頁,需要與目錄下首頁對應
      		proxy_pass http://172.30.5.10:8099/;
          }
      }
      
      

       

  • 此時通過ip:8080即可訪問靜態文件

 

2、數據庫部署

docker pull mysql:5.7
docker run -d --restart=always \
    --name mysql-1 \
    --network darklight \
    --ip 172.30.5.90 \
    -p 3308:3306 \
    -e MYSQL_ROOT_PASSWORD='xxxxxxxx' \
    -e MYSQL_DATABASE='mydatabase' \
    -v $PWD/mysql-datadir:/var/lib/mysql \
    mysql:5.7

 

3、后端部署

1)啟動已構建的后端鏡像

docker run -d --restart=always \
    --name ics-darklight \
    --network darklight \
    --ip 172.30.5.10 \
    -p 8080:8099 \
    -v $PWD/config:/home/admin/config \
    -v $PWD/darklight-console.war:/home/admin/darklight-console.war \
    -v $PWD/logs:/home/admin/logs \
    ics-darkligth:1.0

 

2)修改nginx配置

my.conf,通過掛載的方式將該文件掛載到容器/etc/nginx/conf.d/my.conf

server {

	listen 80;
	server_name 172.30.5.10;
	charset utf-8;

	client_max_body_size 800m;

	location / {
		root /xxx/xxx   # 可指定靜態文件的根目錄
		index index.html   # 啟動首頁,需要與目錄下首頁對應
		proxy_pass http://172.30.5.10:8099/;     # 指定nginx轉發的目標地址
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM