后端部署:
创建第一个Java容器,运行后端项目:
1.首先要确保能在本地运行
2.在idea的右侧找到maven,点击root的 Lifecycle,
2.1: 先点击 clean ,成功 (继续)
2.2:点击 install ,成功 (继续)
3. install 成功后,所有的后端工程,会出现 target包,将全部的 exec.jar包拷贝出来
一共有五个:
4. 在docker 容器内,创建一个数据卷 j1(取别的名也可以)【删除数据卷:docker volume rm j1】
docker volume create j1
5. 将 全部的litemall jar包拷贝到 j1卷的目录中,
如果不知道在宿主机的真实地址:/var/lib/docker/volumes/j1/_data
docker inspect j1
6. 创建并运行Java容器:【 --name 的 j1 是Java容器名, -v 的 j1是数据卷的名】
docker run -it -d --name j1 -v j1:/home/soft --net=host java
7. 进入Java容器
docker exec -it j1 bash
7. 运行 jar 文件:
nohup java -jar /home/soft/litemall-admin-api-0.1.0-exec.jar
nohup java -jar /home/soft/litemall-wx-api-0.1.0-exec.jar &
【先用这个,如果有错,用下面的,看报错】
或者:
java -jar /home/soft/litemall-admin-api-0.1.0-exec.jar
出现这个就可以了。
然后访问:http://自己宿主机IP:6001/swagger-ui.html#/ 【6001:自己设置的tomcat端口】
如果显示无法连接,就等一两分钟
理论上,这样后端项目部署就完成了,但是还不行,因为没有冗余结点,所以只要这个Java容器挂掉,项目就不行了。
创建冗余的Java容器:
第二个Java容器:
首先在idea中将tomcat 端口改为 6002,然后 创建 名为: j2 的 数据卷和 Java容器,其余步骤同上
第三个Java容器:
首先在idea中将tomcat 端口改为 6003,然后 创建 名为: j3 的 数据卷和 Java容器,其余步骤同上
创建负载均衡:
三个Java创建并运行后,需要创建nginx,将接收的请求分发给不同的Java容器,这样每一个容器的负载
就比较低。
1. 安装nginx镜像:
docker pull nginx
nginx配置文件:放在 宿主机的 /home/n1/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;
#192.168.0.6 宿主机ip
upstream tomcat {
server 192.168.0.6:6001;
server 192.168.0.6:6002;
server 192.168.0.6:6003;
}
server {
# 6101 是 nginx对外开放的端口
listen 6101;
server_name 192.168.0.6;
location / {
proxy_pass http://tomcat;
index index.html index.htm;
}
}
}
############################################
创建nginx结点:
【注意:这里没有使用数据卷,因为数据卷是实现目录和目录的映射,这里是文件和文件的映射】
docker run -it -d --name n1 -v /home/n1/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
这样就可以了,访问:http://192.168.0.6:6101/swagger-ui.html
现在 有 一个 nginx来负载 三个 Java容器,只要三个Java容器不同时挂掉,就可以继续运行。
但是如果 nginx 挂掉,即使 Java容器没挂,也不能运行了,所以要创建一个冗余的 nginx,端口号为:6102。
nginx.conf 只改 对外开放的端口号:6102,其余同上。
这样实现双机热备了吗?
没有
要在每个 nginx容器内 安装 keepalived
1.进入 nginx容器:
docker exec -it n1 bash
2. 先更新 apt-get:
apt-get update
3.安装 keepalived:
apt-get install keepalived
4.安装 vim 编辑器:
apt-get install vim
5. 编辑 配置文件:
vim /etc/keepalived/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.0.151
}
}
virtual_server 192.168.0.151 6201 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.6 6101 {
weight 1
}
}
###########################################
192.168.0.6 :宿主机ip
192.168.0.151:虚拟IP
6201:虚拟端口
6101 :nginx 的 n1端口
6. 启动 keepalived:
service keepalived start
7. 退出nginx 容器:
exit
8.在宿主机上 ping ip:
ping 192.168.0.151
ping 成功:
然后 在 n2容器中 创建 keepalived:
只将配置文件中的 nginx端口 换成 6102
######################################
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.0.151
}
}
virtual_server 192.168.0.151 6201 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.6 6102 {
weight 1
}
}
##################################################
http://192.168.0.151:6201/swagger-ui.html
前端项目部署:
1.首先是 确保前端项目能在本地跑起来
2.找到 前端项目目录: E:\Idea\IntelliJ IDEA 2018.3.3\WorkPlace\litemall\litemall-admin,将 后端的连接地址进行修改
画红线的都要进行修改:
1. 后端IP和端口
.
2.前端的IP和端口号: 【因为前端项目部署到了 nginx,使用的是宿主机的IP】
注意:port:6501 可以更改,但是这是 项目的端口号
3.打开 cmd【以管理员身份运行】
4.在cmd上 转到 前端目录:使用淘宝的 npm镜像:
npm install -g cnpm --registry=https://registry.npm.taobao.org
5. 然后 使用 cpm run build 进行打包【如果不行,就去 前端项目,打开 package.json 文件,然后看一下其中的打包命令。】
所以正确的打包命令应该是 npm run build:prod
打包成功
5. 打包成功后:去idea,找到 该项目,然后找到 dist 包,将 其包中所有文件放到nginx下,去运行
【注意:上面部署后端时,使用了nginx做负载均衡, 但 这里不是,仅 是 前端的运行环境而已】
6. 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.6;
location / {
root /home/fn1/litemall ;
index index.html ;
}
}
}
############################################
root /home/fn1/litemall : 路径是自己定的,创建nginx时,将同名的路径映射到宿主机上
7.创建并运行 nginx 容器 :
docker run -it -d --name fn1 -v /home/fn1/nginx.conf:/etc/nginx/nginx.conf -v /home/fn1/litemall:/home/fn1/litemall --net=host --privileged nginx
docker start fn2
这样就完成了 fn1结点的部署,但是还要创建 另外 两个 结点,组成 nginx 集群。
【注意:还要 在 前端项目 和 nginx配置文件中 中修改 端口号 和 root /home/fn3【修改】/litemall ; 】
端口号:
fn1:6501
fn2:6502
fn3:6503
docker run -it -d --name fn2 -v /home/fn2/nginx.conf:/etc/nginx/nginx.conf -v /home/fn2/litemall:/home/fn2/litemall --net=host --privileged nginx
docker run -it -d --name fn3 -v /home/fn3/nginx.conf:/etc/nginx/nginx.conf -v /home/fn3/litemall:/home/fn3/litemall --net=host --privileged nginx
创建负载均衡:
当创建完三个 运行前端项目的nginx结点后,需要创建负载均衡【也是nginx】
负载均衡要用到 nginx,但是 和 前端运行环境的nginx的配置文件会有所差别
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;
upstream fn{
server 192.168.0.6:6501;
server 192.168.0.6:6502;
server 192.168.0.6:6503;
}
server {
listen 6601;
server_name 192.168.0.6;
location / {
proxy_pass http://fn;
index index.html index.htm;
}
}
}
#############################################################
创建 【负载均衡】nginx 【ff1】容器命令:
docker run -it -d --name ff1 -v /home/ff1/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
创建 【负载均衡】nginx 【ff2】容器命令:
docker run -it -d --name ff2 -v /home/ff2/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
双机热备:
在 ff1 和 ff2 各自的容器内创建 keepalived
1.先进入 ff1容器:
docker exec -it ff1 bash
2.更新apt-get程序:
apt-get update
3. 安装 keepalived:
apt-get install keepalived
4.安装vim编辑器:
apt-get install vim
5.编辑 keepalived 配置文件:
vim /etc/keepalived/keepalived.conf
是 ff1容器 内的 keepalived 配置文件
#########################################
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.0.152
}
}
virtual_server 192.168.0.152 6701 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.6 6601 {
weight 1
}
}
#########################################
6.启动 keepalived:
service keepalived start
7. ping一下网络:【在 nginx容器之外,用 exit 退出容器】
ping 192.168.0.152
8.然后访问:http://192.168.0.152:6701
是 ff2容器 内的 keepalived 配置文件
#########################################
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.0.152
}
}
virtual_server 192.168.0.152 6701 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.6 6602 {
weight 1
}
}
#########################################