原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請注明:轉(zhuǎn)載自IT人故事會(huì),謝謝!
原文鏈接地址:「實(shí)戰(zhàn)篇」開源項(xiàng)目docker化運(yùn)維部署-前端java部署(八)
本節(jié)主要說說前端的部署需要注意的點(diǎn),本身renren-fast這個(gè)項(xiàng)目就是通過nodejs來進(jìn)行開發(fā)的,nodejs編譯后生成html,css,img所以,咱們不用在容器直接用nginx就可以訪問靜態(tài)文件。源碼:https://github.com/limingios/netFuture/blob/master/前端/
https://github.com/daxiongYang/renren-fast-vue
修改連接地址
應(yīng)該修改成http://192.168.66.151:6201/renren-fast;
打包
- 修改鏡像,國內(nèi)打包比較快點(diǎn)
- 安裝
你可以使用我們定制的 cnpm (gzip 壓縮支持) 命令行工具代替默認(rèn)的
npm
:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
這個(gè)目錄上傳到nginx上。
renren-nginx<1>
這里的nginx并不是做負(fù)載均衡的,而是做靜態(tài)的html的靜態(tài)運(yùn)行環(huán)境的。
- 創(chuàng)建容器
用宿主機(jī)的網(wǎng)段
docker run -it -d --name fn1 \
-v /root/fn1/nginx.conf:/etc/nginx/nginxc.conf \
-v /root/fn1/renren-vue:/home/fn1/renren-vue \
--privileged --net=host nginx
- 編寫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.66.100;
location / {
root /home/fn1/renren-vue;
index index.html;
}
}
}
renren-nginx<2>
這里的nginx并不是做負(fù)載均衡的,而是做靜態(tài)的html的靜態(tài)運(yùn)行環(huán)境的。
- 創(chuàng)建容器
用宿主機(jī)的網(wǎng)段
docker run -it -d --name fn2 \
-v /root/fn2/nginx.conf:/etc/nginx/nginxc.conf \
-v /root/fn2/renren-vue:/home/fn1/renren-vue \
--privileged --net=host nginx
- 編寫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 6502;
server_name 192.168.66.100;
location / {
root /home/fn2/renren-vue;
index index.html;
}
}
}
renren-nginx<3>
這里的nginx并不是做負(fù)載均衡的,而是做靜態(tài)的html的靜態(tài)運(yùn)行環(huán)境的。
- 創(chuàng)建容器
用宿主機(jī)的網(wǎng)段
docker run -it -d --name fn3 \
-v /root/fn3/nginx.conf:/etc/nginx/nginxc.conf \
-v /root/fn3/renren-vue:/home/fn1/renren-vue \
--privileged --net=host nginx
- 編寫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 6503;
server_name 192.168.66.100;
location / {
root /home/fn3/renren-vue;
index index.html;
}
}
}
qia負(fù)載均衡
nginx-ff1
- ff1 容器的創(chuàng)建
docker run -it -d --name ff1 \
-v /root/ff1/nginx.conf:/etc/nginx/nginx.conf \
--net=host \
--privileged --net=host nginx
- 負(fù)載均衡ff1 - 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;
upstream fn {
server 192.168.66.100:6501;
server 192.168.66.100:6502;
server 192.168.66.100:6503;
}
server {
listen 6601;
server_name 192.168.66.100;
location / {
proxy_pass http://fn;
index index.html index.htm;
}
}
}
nginx-ff2
- ff2 容器的創(chuàng)建
docker run -it -d --name ff2 \
-v /root/ff2/nginx.conf:/etc/nginx/nginx.conf \
--net=host \
--privileged --net=host nginx
- 負(fù)載均衡ff2 - 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;
upstream fn {
server 192.168.66.100:6501;
server 192.168.66.100:6502;
server 192.168.66.100:6503;
}
server {
listen 6602;
server_name 192.168.66.100;
location / {
proxy_pass http://fn;
index index.html index.htm;
}
}
}
前端項(xiàng)目的雙機(jī)熱備負(fù)載均衡方案
之前已經(jīng)設(shè)置了ff1 和ff2,都可以正常的訪問后端,但是沒有設(shè)置keepalived,他們之前無法爭搶ip,無法做到雙機(jī)熱備。這次說說雙機(jī)熱備。
進(jìn)入容器ff1然后安裝keepalived
keepalived必須在ff1所在的容器之內(nèi),也可以在docker倉庫里面下載一個(gè)nginx-keepalived的鏡像。這里直接在容器內(nèi)安裝keepalived。
docker exec -it ff1 /bin/bash
#寫入dns,防止apt-get update找不到服務(wù)器
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null
apt-get clean
apt-get update
apt-get install vim
vi /etc/apt/sources.list
sources.list 添加下面的內(nèi)容
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
- 更新apt源
apt-get clean
apt-get update
apt-get install keepalived
apt-get install vim
- keepalived配置文件
容器內(nèi)的路徑:/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.66.152
}
}
virtual_server 192.168.66.152 6701{
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.66.100 6601{
weight 1
}
}
- VI_1 名稱可以自定義
- state MASTER | keepalived的身份(MASTER主服務(wù)器,BACKUP備份服務(wù)器,不會(huì)搶占虛擬機(jī)ip)。如果都是主MASTER的話,就會(huì)進(jìn)行互相爭搶IP,如果搶到了就是MASTER,另一個(gè)就是SLAVE。
- interface網(wǎng)卡,定義一個(gè)虛擬IP定義到那個(gè)網(wǎng)卡上邊。網(wǎng)卡設(shè)備的名稱。eth33是宿主機(jī)是網(wǎng)卡。
- virtual_router_id 51 | 虛擬路由標(biāo)識,MASTER和BACKUP的虛擬路由標(biāo)識必須一致。標(biāo)識可以是0-255。
- priority 100 | 權(quán)重。MASTER權(quán)重要高于BACKUP 數(shù)字越大優(yōu)選級越高。可以根據(jù)硬件的配置來完成,權(quán)重最大的獲取搶到的級別越高。
- advert_int 1 | 心跳檢測。MASTER與BACKUP節(jié)點(diǎn)間同步檢查的時(shí)間間隔,單位為秒。主備之間必須一致。
- authentication | 主從服務(wù)器驗(yàn)證方式。主備必須使用相同的密碼才能正常通信。進(jìn)行心跳檢測需要登錄到某個(gè)主機(jī)上邊所有有賬號密碼。
- virtual_ipaddress | 虛擬ip地址,可以設(shè)置多個(gè)虛擬ip地址,每行一個(gè)。根據(jù)上邊配置的eth33上配置的ip。192.168.66.151 是自己定義的虛擬ip
- 啟動(dòng)keeplived
容器內(nèi)啟動(dòng)
service keepalived start
進(jìn)入容器ff2然后安裝keepalived
keepalived必須在ff2所在的容器之內(nèi),也可以在docker倉庫里面下載一個(gè)nginx-keepalived的鏡像。這里直接在容器內(nèi)安裝keepalived。
docker exec -it ff2 /bin/bash
#寫入dns,防止apt-get update找不到服務(wù)器
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null
apt-get clean
apt-get update
apt-get install vim
vi /etc/apt/sources.list
sources.list 添加下面的內(nèi)容
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
- 更新apt源
apt-get clean
apt-get update
apt-get install keepalived
apt-get install vim
- keepalived配置文件
容器內(nèi)的路徑:/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.66.152
}
}
virtual_server 192.168.66.152 6701{
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.66.100 6602{
weight 1
}
}
- VI_1 名稱可以自定義
- state MASTER | keepalived的身份(MASTER主服務(wù)器,BACKUP備份服務(wù)器,不會(huì)搶占虛擬機(jī)ip)。如果都是主MASTER的話,就會(huì)進(jìn)行互相爭搶IP,如果搶到了就是MASTER,另一個(gè)就是SLAVE。
- interface網(wǎng)卡,定義一個(gè)虛擬IP定義到那個(gè)網(wǎng)卡上邊。網(wǎng)卡設(shè)備的名稱。eth33是宿主機(jī)是網(wǎng)卡。
- virtual_router_id 51 | 虛擬路由標(biāo)識,MASTER和BACKUP的虛擬路由標(biāo)識必須一致。標(biāo)識可以是0-255。
- priority 100 | 權(quán)重。MASTER權(quán)重要高于BACKUP 數(shù)字越大優(yōu)選級越高。可以根據(jù)硬件的配置來完成,權(quán)重最大的獲取搶到的級別越高。
- advert_int 1 | 心跳檢測。MASTER與BACKUP節(jié)點(diǎn)間同步檢查的時(shí)間間隔,單位為秒。主備之間必須一致。
- authentication | 主從服務(wù)器驗(yàn)證方式。主備必須使用相同的密碼才能正常通信。進(jìn)行心跳檢測需要登錄到某個(gè)主機(jī)上邊所有有賬號密碼。
- virtual_ipaddress | 虛擬ip地址,可以設(shè)置多個(gè)虛擬ip地址,每行一個(gè)。根據(jù)上邊配置的eth33上配置的ip。192.168.66.151 是自己定義的虛擬ip
- 啟動(dòng)keeplived
容器內(nèi)啟動(dòng)
service keepalived start
PS:前后端部署基本是一樣的都是按照思路,先啟動(dòng)多個(gè)容器,然后建立2個(gè)負(fù)載,負(fù)載內(nèi)安裝keepalived做熱備。重點(diǎn)是想好端口。但是說實(shí)話,這是平常練習(xí)和個(gè)人項(xiàng)目,如果是多臺機(jī)器,就不能這么搞了,下次一起通過docker swarm的網(wǎng)絡(luò)方式讓多臺機(jī)器。