前后端分离的小Demo实现【多节点集群部署】

前言

1、这个Demo的后端主要是使用SpringBoot整合了微信授权和微信网站扫码支付,前端页面主要使用了Bootstrap和JQuery。网址:http://wechatpay.ysqorz.top/(不保证长期有效)

2、下面是【理论上】项目部署的架构图,事实上我比较穷,买不起这么多ECS,所以实际上部署时我只用了两台ECS。本博客会按照下面这张架构图介绍用Linux命令实现多节点集群部署。看起来蛮简单的,但我在实际操作部署时遇到奇奇怪怪的错误蛮多的。

 3、本博客的食用人群,对SpringBoot和Linux有了解,对云服务器有了解(比如说:安全组...),不需要很深入。另外MySQL、Nginx等安装我统一使用Docker,原因是镜像随拉随用,容器配置坏了随时删除重装。食用者需要对Dokcer有了解。看完这篇博客就差不多了。https://blog.csdn.net/qq_43290318/article/details/107743188

目录

环境安装

1、首先在ECS_1和ECS_4上安装Docker

2、在ECS_2和ECS_3上安装JDK

3、在ECS_1上通过Docker安装Nginx

4、在ECS_4上通过Docker安装MySQL

项目部署

1、将SpringBoot项目打成jar包,并推送到ECS_2和ECS_3并运行

2、将静态资源推送到ECS_1,配置Nginx

3、远程连接ECS_4上的MySQL,新建数据库并导入数据


环境安装

1、首先在ECS_1ECS_4上安装Docker

参考博客:https://blog.csdn.net/qq_43290318/article/details/107743188

2、在ECS_2ECS_3上安装JDK

# 检查当前系统是否已安装JDK
yum list installed | grep java

# 查看当前所使用的JDK版本
java -verision

# 如果想卸载当前系统的所有JDK
yum -y remove java-*-openjdk*
yum -y remove tzdata-java.noarch

# 安装JDK8
yum -y list java*
yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel

# 如果存在多个JDK,想切换jdk版本
alternatives --config java

3、在ECS_1上通过Docker安装Nginx

# 拉取最新的Nginx镜像
docker pull nginx

# 启动容器
# 我不建议启动容器时挂载,因为挂载会以宿主机为基准,如果容器内目录有文件,而宿主机目录是空的,那么挂在后容器内目录的文件就没了
docker run --name nginx -p 80:80 -d nginx

# 进入容器,并返回一个终端
docker exec -it nginx /bin/bash

# 容器内没有vim,在后面无法操作配置文件,所有需要安装vim
apt-get update
apt-get install vim

# 下面是Nginx容器内部几个主要的路径,后面配置Nginx时需要知道
静态资源文件夹:/usr/share/nginx/html
日志:/var/log/nginx 
主配置文件:/etc/nginx/nginx.conf 
虚拟主机的配置文件:/etc/nginx/conf.d/*.conf 

# 从宿主机复制文件或目录到容器内
# 这条命令也可以直接复制目录,不需要加其他命令参数
docker cp 宿主机路径 容器id或容器别名:容器内部路径 

4、在ECS_4上通过Docker安装MySQL

# 拉取最新版的MySQL镜像
docker pull mysql

# 启动容器
docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

# 进入容器内部,并返回终端
docker exec -it mysql8 /bin/bash

# 在容器内登进mysql
mysql -u root -p
# 输入密码...

# 查看所有账户
# 注意,有些MySQL,root账户默认并支持远程连接,所以我们要么打开权限,要么新增账户。
select user, host from mysql.user;

# 创建远程登录账户ysq,具有所有权限
create user 'ysq'@'%' identified by '密码';
grant all privileges on *.* to 'ysq'@'%' with grant option;
# 不要忘了刷新权限
flush privileges;

# 修改root密码
alter user 'root'@'localhost' identified by '新密码';
alter user 'root'@'%' identified by '新密码';

# 查看root的权限
show grants for 'root'@'%' \G;

项目部署

使用工具:xftpxshell

1、将SpringBoot项目打成jar包,并推送到ECS_2ECS_3并运行

# 在idea的终端,输入以下命令
# 跳过test模块,将项目达成jar包。默认会声称在target目录下
mvn package -Dmaven.test.skip=true

注意,在打jar包之前,我们可以不需要特意修改配置文件application.yml。我们可以另外复制一份,把相关配置改成上线使用的配置,连同jar包一起推到云服务器上。然后在云服务器上运行jar包时,可以指定新的配置文件。

# 指定另外的配置文件application.yml,运行jar包
# 以下命令基于application.yml和jar包处于同一目录下
java -jar ***.jar --Dspring.config.location=application.yml

上述命令是在前台运行jar包,会占用终端。按 ctrl + c 停止进程退出。
在测试时,可以这样做,可以看控制台输出。

# 在确保运行正常之后,以守护进程的方式后台启动并运行
nohup java -jar ***.jar  --Dspring.config.location=application.yml &
# 查看守护进程的日志输出(实时的)
tail -f nohup.out

# 查看对应端口号占用情况
lsof -i:端口号

# 如果没有lsof工具,直接通过以下命令安装
yum install lsof

# 通过pid强制杀死进程
kill -9 pid

2、将静态资源推送到ECS_1,配置Nginx

(1)将静态资源从宿主机拷贝到Nginx容器内

# /data/WechatPay/static 是静态资源在宿主机的路径
docker cp /data/WechatPay/static 容器id或容器别名:/usr/share/nginx/html 

(2)在Nginx主配置文件中配置多节点和请求分发策略

# 进入容器内部
# nginx为容器名称,也可以替换为容器id
docker exec -it nginx /bin/bash

# 修改主配置文件
vim /etc/nginx/nginx.conf

在http闭包中,添加以下配置:

# 配置多节点集群
# lbs是自定义的集群名称,后面会用到
# 端口是jar包(项目)运行后占用的端口
upstream lbs {
    server ECS_2的公网ip:端口;   
    server ECS_3的公网ip:端口;		
}

(3)修改虚拟主机的配置文件,配置请求分发策略

这里我直接使用Nginx默认的80端口,不另外配置虚拟主机。

# 建议做好备份,方便以后配置其他虚拟主机
vim /etc/nginx/conf.d/default.conf

# 配置请求分发策略
# 凡是请求的路径为/api/的,都会负载均衡地分配到集群lbs的任一节点
# 转发策略可以配置,下面采用默认策略
location /api/ {
    proxy_pass http://lbs;
    proxy_redirect default;
}

# 注意修改配置后需要重启Nginx容器,让配置生效
# 从容器内部退出
exit
docker restart 容器id或容器名称

(4)修改静态资源中有关接口请求的路径,指向Nginx

我上面的部署,由于Nginx在ECS_1上,且使用的是80端口,所以可以不需要带上端口

// 本地前后端联调时,使用localhost,微信那边会返回终端ip无效
//var host = "http://127.0.0.1:8080";

// 上线时改成下面
var host = "Nginx所在ECS的公网ip:端口号";

3、远程连接ECS_4上的MySQL,新建数据库并导入数据

这里主要使用 Navicat 操作就可以了。

猜你喜欢

转载自blog.csdn.net/qq_43290318/article/details/107974938