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
下
(二)、鏡像制作
將Dockerfile
、start.sh
、xxxx.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
對應的首頁與目錄下對應
- 需要將打包后目錄下的所有文件替換到默認配置文件指定的目錄這下(
-
自定義配置
-
在配置文件中指定
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_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轉發的目標地址
}
}