フロントエンドとバックエンドを分離した小さなデモの実装[マルチノードクラスター展開]

序文

1.このデモのバックエンドは主にSpringBootを使用してWeChat認証とWeChatWebサイトスキャンコード支払いを統合し、フロントエンドページは主にBootstrapとJQueryを使用します。ウェブサイト:http//wechatpay.ysqorz.top/(長期的な有効性は保証されません)

2.以下は、[理論的に]プロジェクト展開のアーキテクチャ図です。実際、私は比較的貧しく、それほど多くのECSを購入する余裕がないため、実際には2つのECSのみを展開に使用しました。このブログでは、Linuxコマンドを使用して、次のアーキテクチャ図に従ってマルチノードクラスターの展開を実装します。非常に単純に見えますが、実際の展開中に多くの奇妙なエラーが発生しました。

 3.このブログの消費者は、SpringBootとLinuxの知識、およびクラウドサーバー(例:セキュリティグループ...)の知識を持っており、詳細である必要はありません。さらに、MySQLとNginxのインストールにDockerを使用しています。その理由は、イメージがいつでもプルされて使用され、コンテナー構成が壊れて削除され、いつでも再インストールされるためです。消費者はDokcerを理解する必要があります。ほぼこのブログを読んだ後です。https://blog.csdn.net/qq_43290318/article/details/107743188

目次

環境への設置

1.最初にDockerをECS_1とECS_4にインストールします

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.最初にDockerECS_1ECS_4にインストールします

参照ブログ:https//blog.csdn.net/qq_43290318/article/details/107743188

2.ECS_2およびECS_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.ドッカー経由でnginxのをインストールするECS_1

# 拉取最新的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.ドッカー経由でMySQLをインストールするECS_4

# 拉取最新版的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;

プロジェクトの展開

ツールを使用する:xFTPおよびxshell

1. SpringBootプロジェクトをjarパッケージに入力しECS_2およびECS_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