Linux上项目部署,前端Nginx部署服务器,后端项目部署

部署架构

Linux上项目部署,前端Nginx部署服务器,后端项目部署_第1张图片

环境说明

由于我们的服务器数量有限,就使用这三台服务器,具体的软件规划如下:

服务器 软件 名称
192.168.220.128 Nginx(部署前端项目、配置反向代理),MySQL(主从复制的主库) 服务器A
192.168.220.130 JDK1.8、Git、Maven、jar(项目jar包基于内嵌Tomcat运行)、MySQL(主从复制的从库) 服务器B
172.17.2.94 Redis(缓存中间件) 服务器C

1.在服务器A中安装Nginx,并将静态资源包上传到Nginx的html目录下

2. 修改Nginx配置文件nginx.conf  

 server {
        listen       80;
        server_name  localhost;

        location / {
            root   html/dist; #dist就是刚刚上传的静态资源包的目录
            index  index.html;
        }
		#反向代理
		location ^~ /api/ {
			rewrite ^/api/(.*)$ /$1 break;
			proxy_pass http://192.168.220.130:8080; #从库的访问路径
		}
		
        location = /50x.html {
            root   html;
        }
    }

3). 通过nginx访问前端工程

http://192.168.220.128

在上述我们配置的nginx.conf中,除了配置了静态资源的加载目录以外,我们还配置了一段反向代理的配置,配置信息如下:

location ^~ /api/ {
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass http://192.168.220.130:8080;
}

这一段配置代表,如果请求当前nginx,并且请求的路径如果是 /api/ 开头,将会被该location处理。而在该location中,主要配置了两块儿信息: rewrite(url重写) 和 proxy_pass(反向代理)。 接下来我们就来解析一下这两项的配置。

1). 路径重写rewrite

rewrite ^/api/(.*)$ /$1 break;

这里写的是一个正则表达式,代表如果请求路径是以 /api/ 开头,后面的请求路径任意,此时将原始的url路径重写为 /$1,这里的$1指代的就是通配符 .* 这一块的内容。比如:

/api/employee/login ------> ^/api/(.*)$ --------> 此时 (.*) 匹配的就是 employee/login ------> 最终重写为/$1 : /employee/login

2). 反向代理

proxy_pass http://192.168.220.130:8080;

路径重写后的请求,将会转发到后端的 http://192.168.138.101:8080 服务器中。 而这台服务器中,就部署的是我们的后端服务。

服务端部署

1). 在服务器B(192.168.138.101)中安装jdk、git、maven、MySQL,使用git clone命令将git远程仓库的代码克隆下来

A. 确认JDK环境

java -version

B. 确认Git环境

git -version

C. 确认Maven环境

mvn -v

D. 将我们开发完成的代码推送至远程仓库,并在服务器B中克隆下来

#创建java代码存放目录
mkdir -p /usr/local/javaapp
​
#切换目录
cd /usr/local/javaapp
​
#克隆代码 , 需要使用自己的远程仓库
git clone https://gitee.com/rangrang01/demo_take_out.git 

 准备好一个shell脚本文件,上传到javaapp中,执行,要注意shell脚本中的配置信息要跟你本身的项目中pom文件一致

#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

echo 停止原来运行中的工程
APP_NAME=demo_take_out

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/local/javaapp/demo_take_out

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar demo_take_out-1.0-SNAPSHOT.jar &> demo_take_out.log &
echo 项目启动完成

 Linux上项目部署,前端Nginx部署服务器,后端项目部署_第2张图片

我这里的就不一样所以要改 ,一定要一致不然运行不起来

然后就让我们看一下Nginx的一些内容吧

1). 查看版本

./nginx -v

2). 检查配置文件

修改了nginx.conf核心配置文件之后,在启动Nginx服务之前,可以先检查一下conf/nginx.conf文件配置的是否有错误,命令如下:

./nginx -t

3). 启动

./nginx

启动之后,我们可以通过ps -ef指令来查看nginx的进程是否存在。

ps -ef | grep nginx

启动之后,我们可以直接访问Nginx的80端口, http://192.168.220.128

Linux上项目部署,前端Nginx部署服务器,后端项目部署_第3张图片

注意:

​	要想正常访问Nginx,需要关闭防火墙或开放指定端口号,执行的指令如下: 

​	A. 关闭防火墙

​		systemctl stop firewalld

​	B. 开放80端口

​		firewall-cmd --zone=public --add-port=80/tcp --permanent

​		firewall-cmd --reload

4). 停止

./nginx -s stop

停止之后,我们可以查看nginx的进程:

ps -ef|grep nginx

5). 重新加载

当修改了Nginx配置文件后,需要重新加载才能生效,可以使用下面命令重新加载配置文件:

./nginx -s reload

环境变量配置

在上述我们在使用nginx命令在进行服务的启动、停止、重新加载时,都需要用到一个指令nginx,而这个指令是在nginx/sbin目录下的,我们每一次使用这个指令都需要切换到sbin目录才可以,使用相对繁琐。那么我们能不能在任意目录下都可以执行该指令来操作nginx呢?答案是可以的,配置nginx的环境变量即可。

通过vim编辑器,打开/etc/profile文件, 在PATH环境变量中增加nginx的sbin目录

Linux上项目部署,前端Nginx部署服务器,后端项目部署_第4张图片

 配置完成以后执行

source /etc/profile 使文件生效

在任意目录下执行nginx的启动指令

配置文件结构

nginx的配置文件(conf/nginx.conf)整体上分为三部分: 全局块、events块、http块。这三块的分别配置什么样的信息呢,看下表:

区域 职责
全局块 配置和nginx运行相关的全局配置
events块 配置和网络连接相关的配置
http块 配置代理、缓存、日志记录、虚拟主机等配置

Linux上项目部署,前端Nginx部署服务器,后端项目部署_第5张图片

在全局块、events块以及http块中,我们经常配置的是http块。

在http块中可以包含多个server块,每个server块可以配置多个location块。

部署静态资源

server {
    listen 80;				#监听端口	
    server_name localhost;	#服务器名称
    location / {			#匹配客户端请求url
        root html;			#指定静态资源根目录
        index index.html;	#指定默认首页
    }
}

如果配置了指定静态资源根目录

一下要检查一下配置文件(因为刚刚配置过,所以任意路径都可以访问,且不需要./)

nignx -t

重新加载一下才可以生效

nginx -s reload

负载均衡

Linux上项目部署,前端Nginx部署服务器,后端项目部署_第6张图片

测试

1). 将资料中提供的两个jar包,上传到192.168.200.201服务器上

jar 运行端口 请求链接 响应数据
helloword-1.0-SNAPSHOT.jar 8080 /hello 8080
helloword-1.0-SNAPSHOT2.jar 8081 /hello 8081

2. 运行上传上来的两个jar包,运行端口分别是 8080 , 8081

3. 在nginx中配置负载均衡

打开nginx的配置文件nginx.conf并增加如下配置:


#upstream指令可以定义一组服务器
upstream targetserver{	
    server 192.168.200.201:8080;
    server 192.168.200.201:8081;
}

server {
    listen       8080;
    server_name  localhost;
    location / {
        proxy_pass http://targetserver;
    }
}
```

4). 重新加载nginx配置文件,访问

nginx -s reload

 测试时,我们直接访问nginx的8080端口(http://192.168.200.200:8080), 此时nginx会根据负载均衡策略,将请求转发到后面的两台服务器。

Linux上项目部署,前端Nginx部署服务器,后端项目部署_第7张图片

负载均衡策略

处理上述默认的轮询策略以外,在Nginx中还提供了其他的负载均衡策略,如下:

名称 说明 特点
轮询 默认方式
weight 权重方式 根据权重分发请求,权重大的分配到请求的概率大
ip_hash 依据ip分配方式 根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上
least_conn 依据最少连接方式 哪个服务器当前处理的连接少, 请求优先转发到这台服务器
url_hash 依据url分配方式 根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上
fair 依据响应时间方式 优先把请求分发给处理请求时间短的服务器

权重的配置:

#upstream指令可以定义一组服务器
upstream targetserver{  
    server 192.168.200.201:8080 weight=10;
    server 192.168.200.201:8081 weight=5;
}

上述配置的weight权重是相对的,在上述的配置中,效果就是,在大数据量的请求下,最终8080接收的请求数是8081的两倍。

你可能感兴趣的:(服务器,linux,前端,nginx)