前端項目
前端項目為開源項目renren-fast-vue,基於vue、element-ui構建開發,實現renren-fast后台管理前端功能。
修改 static/config/index-prod.js 配置信息
// api接口請求地址 window.SITE_CONFIG['baseUrl'] = 'http://192.168.63.151:6201/renren-fast';
前端項目部署
- 安裝最新版的npm和node,國內安裝cnpm
# 安裝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org # 升級npm為最新版 npm install npm@latest -g # 升級node為最新版 # nodejs版本管理模塊n npm install -g n n latest
-
進入前端項目根目錄,修改后端相關配置后,執行下面命令安裝依賴包並打包前端項目,打包完的項目在dist文件夾中
# 安裝依賴包 npm install # 打包 npm run build
-
Nginx作為前端項目運行環境。我們需要創建存儲映射文件夾
mkdir /home/fn1 mkdir /home/fn1/renren-vue # 拷貝dist文件夾內內容進/home/fn1/renren-vue # 配置nginx.conf ls /home/fn1 # nginx.conf renren-vue ls /home/fn1/renren-vue/ # 190623 config index.html
nginx.conf配置文件的相關內容如下:
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.63.144; location / { root /home/fn1/renren-vue; index index.html; } } }
- 啟動前端項目的Nginx容器:
docker run -it -d -v /home/fn1/nginx.conf:/etc/nginx/nginx.conf -v /home/fn1/renren-vue:/home/fn1/renren-vue --net=host --privileged --name fn1 nginx
- 啟動完畢之后就可以通過http://192.168.63.144:6501/#/login來訪問管理系統網站(admin admin)
前端負載均衡
- 仿照前面的步驟再創建運行兩個前端項目容器
fn2
(端口6502)和fn3
(端口6503)
注意:修改nginx.conf配置文件
mkdir /home/fn2 mkdir /home/fn2/renren-vue # 拷貝dist文件夾內內容進/home/fn2/renren-vue # 配置nginx.conf ls /home/fn2 # nginx.conf renren-vue ls /home/fn2/renren-vue/ # 190623 config index.html docker run -it -d -v /home/fn2/nginx.conf:/etc/nginx/nginx.conf -v /home/fn2/renren-vue:/home/fn2/renren-vue --net=host --privileged --name fn2 nginx mkdir /home/fn3 mkdir /home/fn3/renren-vue # 拷貝dist文件夾內內容進/home/fn3/renren-vue # 配置nginx.conf ls /home/fn3 # nginx.conf renren-vue ls /home/fn3/renren-vue/ # 190623 config index.html docker run -it -d -v /home/fn3/nginx.conf:/etc/nginx/nginx.conf -v /home/fn3/renren-vue:/home/fn3/renren-vue --net=host --privileged --name fn3 nginx
fn2的nginx.conf配置文件:
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 6502; server_name 192.168.63.144; location / { root /home/fn2/renren-vue; index index.html; } } }
fn3的nginx.conf配置文件:
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 6503; server_name 192.168.63.144; location / { root /home/fn3/renren-vue; index index.html; } } }
測試可訪問性
- 模仿之前的后端項目的負載均衡與雙機熱備可以完成前端項目的負載均衡和雙機熱備
創建ff1目錄
mkdir /home/ff1
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; upstream fn { server 192.168.63.144:6501; server 192.168.63.144:6502; server 192.168.63.144:6503; } server { listen 6601; server_name 192.168.63.144; location / { proxy_pass http://fn; index index.html index.htm; } } }
啟動Nginx容器:
# 需要加上--privileged參數,使keepalived能在宿主機網卡注冊虛擬IP docker run -it -d --name ff1 -v /home/ff1/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
按照上述操作再創建一個nginx節點6602端口
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; upstream fn { server 192.168.63.144:6501; server 192.168.63.144:6502; server 192.168.63.144:6503; } server { listen 6602; server_name 192.168.63.144; location / { proxy_pass http://fn; index index.html index.htm; } } }
mkdir /home/ff2 ls /home/ff2 # nginx.conf # 需要加上--privileged參數,使keepalived能在宿主機網卡注冊虛擬IP docker run -it -d --name ff2 -v /home/ff2/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
雙機熱備
參考之前Haproxy雙機熱備的方案,仍然采用Keepalived和虛擬IP技術。建立兩個Nginx容器並各自安裝Keepalived,映射到同一宿主機虛擬IP上
下面是keepalived配置文件示例:
docker exec -it ff1 bash apt-get update apt-get install keepalived apt-get install vim vim /etc/keepalived/keepalived.conf # 配置keepalived.conf文件 service keepalived start exit ping 192.168.63.152 docker exec -it ff2 bash apt-get update apt-get install keepalived apt-get install vim vim /etc/keepalived/keepalived.conf # 配置keepalived.conf文件 service keepalived start exit ping 192.168.63.152
ff1的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.63.152 } } virtual_server 192.168.63.152 6701 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.63.144 6601 { weight 1 } }
ff2的keepalived.conf文件:
vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 53 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.63.152 } } virtual_server 192.168.63.152 6701 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.63.144 6602 { weight 1 } }
前后端雙機熱備完成