在docker中使用nginx部署前端項目


前言

部署了三個nginx用於前端項目, 並使用keepalived部署好熱備, 所以總共有5nginx

創建好nginx的文件和配置

根據上面的指令創建好目錄

mkdir /home/web/nginx01
mkdir /home/web/nginx02
mkdir /home/web/nginx03
  • nginx.conf配置文件

這里我配置了三個nginx節點

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	
	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;
	client_max_body_size    10m;
	client_body_buffer_size   128k;
	proxy_connect_timeout   5s;
	proxy_send_timeout      5s;
	proxy_read_timeout      5s;
	proxy_buffer_size        4k;
	proxy_buffers           4 32k;
	proxy_busy_buffers_size  64k;
	proxy_temp_file_write_size 64k;
	
	server {
		listen 6501;
		server_name  192.168.0.200;
		location / {
	        root   /home/web/nginx/renren-vue;
	        index  index.html index.htm;
    	}
	}
}

前面的差別不大, 就后面這一點不太一樣

server {
	listen 6501;
	server_name  192.168.0.200;
	location / {
        root   /home/web/nginx/renren-vue;
        index  index.html index.htm;
   	}
}
server {
	listen 6502;
	server_name  192.168.0.200;
	location / {
        root   /home/web/nginx/renren-vue;
        index  index.html index.htm;
   	}
}
server {
	listen 6503;
	server_name  192.168.0.200;
	location / {
        root   /home/web/nginx/renren-vue;
        index  index.html index.htm;
   	}
}

docker配置指令

docker run -it -d --name=web01 --net=host \
-v /home/web/nginx01/nginx.conf:/etc/nginx/nginx.conf \
-v /home/web/nginx01:/home/web/nginx/renren-vue \
--user=root --privileged=true nginx

docker run -it -d --name=web02 --net=host \
-v /home/web/nginx02/nginx.conf:/etc/nginx/nginx.conf \
-v /home/web/nginx02:/home/web/nginx/renren-vue \
--user=root --privileged=true nginx

docker run -it -d --name=web03 --net=host \
-v /home/web/nginx03/nginx.conf:/etc/nginx/nginx.conf \
-v /home/web/nginx03:/home/web/nginx/renren-vue \
--user=root --privileged=true nginx

利用keepalived配置熱備方案

配置主機keepalived

  • 進入容器
    docker exec -it bn01 bash
  • 更新
    apt update
  • 安裝vim
    apt install vim
  • 安裝keepalived
    apt install keepalived
  • 修改配置文件
    vi /etc/keepalived/keepalived.conf
  • 寫入配置文件
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.0.160
    }
}
virtual_server 192.168.0.160 6701 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.0.200 6601 {
        weight 1
    }
}
  • 啟動
    service keepalived start
  • 驗證
    docker top bn01
    看下keepalived進程是否運行, 如果運行再訪問
    http://192.168.0.160:6701/#/home
    看下是否能夠訪問

配置備機

  • 進入容器
    docker exec -it bn02 bash
  • 更新
    apt update
  • 安裝vim
    apt install vim
  • 安裝keepalived
    apt install keepalived
  • 修改配置文件
    vi /etc/keepalived/keepalived.conf
  • 寫入配置文件
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.0.160
    }
}
virtual_server 192.168.0.160 6701 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.0.200 6602 {
        weight 1
    }
}
  • 啟動
    service keepalived start
  • 驗證
    docker top bn02
    看下keepalived進程是否存在, 如果存在則
    http://192.168.0.160:6701/#/home
    看下是否能夠訪問

現在停止掉主機, 然后稍等一會兒再看看是否能夠運行
exit 退出docker容器
執行docker stop bn01停止掉主機

可能需要判斷下, docker logs bn01docker logs bn02 看下最近一次訪問是否, 我這里發現是備機在運行, 所以實際上我執行的是docker stop bn02

發現訪問http://192.168.0.160:6701/#/home網址還是沒問題

這里需要等待幾分鍾, 可改等待時間

成功部署熱備


免責聲明!

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



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