部署微商城

后端部署:

创建第一个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

运行:http://192.168.0.6:6501

 

这样就完成了 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

然后访问:http://192.168.0.6:6601

 

创建 【负载均衡】nginx 【ff2】容器命令:

docker run -it -d --name ff2 -v /home/ff2/nginx.conf:/etc/nginx/nginx.conf  --net=host --privileged nginx

然后访问:http://192.168.0.6:6602

 

双机热备:

 

在 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
       }
   }

 

#########################################

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值