centos7下部署nginx+supervisor+netcore2.1服务器环境

摘要:
相关内容主要包括以下几点:netcore 2.1的部署、supervisor守护进程的部署、nginx反向代理的部署以及简单的负载平衡示例。使用的其他相关软件是vs2017。使用xshell的远程链接接口如下所示。现在您需要在服务器上安装netcore运行时,这是发布的代码。在服务器上创建名为myapp的文件夹。使用xftp工具将代码传输到服务器并输入服务器上的项目目录。

由于工作需要,自己部署了一台centos7服务器,用于部署netcore2.1的服务器环境,涉及到的相关内容主要有以下几点

  1. netcore2.1版本的部署调试
  2. supervisor守护进程的部署
  3. nginx反向代理部署以及简单的负载均衡示例

其他用到的相关软件有vs2017,xshell,xftp 

内容比较基础,适合刚刚接触的新手,高手就忽略吧

一、netcore2.1版本部署

首先需要一台服务器,当然用虚拟机也可以,我这里是自己买了一台阿里云服务器,最低配置的,价格便宜,用xshell远程链接界面如下

centos7下部署nginx+supervisor+netcore2.1服务器环境第1张

现在需要在服务器上安装netcore运行时,执行以下命令

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install dotnet-sdk-2.1

参考内容 https://www.microsoft.com/net/learn/get-started/linux/centos

安装好以后可以查看版本信息

centos7下部署nginx+supervisor+netcore2.1服务器环境第2张

需要注意的一点是,本机的开发版本要和服务器的版本一致,我本地的版本原来的2.0的,服务器安装了2.1在进行项目部署的时候就会有问题,这个注意下就好

使用vs2017创建一个web应用程序,这里注意选择2.1,然后继续

centos7下部署nginx+supervisor+netcore2.1服务器环境第3张

下图是新建好的项目

centos7下部署nginx+supervisor+netcore2.1服务器环境第4张

在Program.cs文件里新增UseUrls,注意127.0.0.1换成你的服务器IP,端口我们先用8001

 public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseUrls("http://127.0.0.1:8001");
    }

现在发布代码到本地,这是发布好的代码

centos7下部署nginx+supervisor+netcore2.1服务器环境第5张

在服务器上新建一个名为myapp的文件夹

centos7下部署nginx+supervisor+netcore2.1服务器环境第6张

使用xftp工具将代码传到服务器上

centos7下部署nginx+supervisor+netcore2.1服务器环境第7张

在服务器上进入项目目录,执行命令

dotnet myapp.dll

现在项目已经跑起来了

centos7下部署nginx+supervisor+netcore2.1服务器环境第8张

直接访问

centos7下部署nginx+supervisor+netcore2.1服务器环境第9张

二、supervisor守护进程的部署

目前存在一个问题,我使用的xshell远程链接服务器,当我关闭xshell工具的时候,dotnet myapp.dll 命令也就自动取消了,现在需要解决这个问题,就要用到守护进程,linux下守护进程的软件比较多,我选择用supervisor的原因主要是微软推荐的

首先安装supervisor

yum install supervisor

安装成功之后会有一个默认的配置文件在 /etc/supservisord.conf,在这个文件的最后一行有一句代码,这句代码的意思就是supervisor会读取supervisord.d文件夹里所有的ini后缀的配置文件

[include] 
files = supervisord.d/*.ini

我们接下来给myapp站点写一个supervisor的配置文件后缀就是ini,并且放到supervisord.d文件夹里

[program:myapp]  //项目名称
command=dotnet myapp.dll  //执行的命令
directory=/myapp //执行的目录
autostart=true //自动启动
autorestart=true //自动重启 
user=root  //用户 
numprocs=1 //进程数 
stdout_logfile=/var/log/supervisor-myapp.log //日志路径

为了使用方便,我把supervisor配置开机启动并且启动

systemctl enable supervisord
systemctl start supervisord

现在web站点已经被加入到守护进程,并且守护进程也是自动启动,即使服务器因为意外原因重启,也不用担心站点无法访问

三、nginx反向代理部署以及简单的负载均衡示例

使用nginx作为反向代理服务器有它自身的优点,在此不多说了,直接开始部署,首先下载安装包,两种方式,一是直接在服务器通过wget命令下载,二可以直接在本机下载然后通过xftp工具上传到服务器,我们这了直接用wget下载,首先在服务器安装一下wget

yum install wget

然后使用wget命令下载

wget http://nginx.org/download/nginx-1.15.0.tar.gz

下载完成之后解压

tar zxvf nginx-1.15.0.tar.gz

然后进入解压好的目录执行

./configure

我这里出现了错误,缺少相关依赖库,安装以下依赖库

yum install gcc-c++
yum install pcre
yum install pcre-devel
yum install zlib 
yum install zlib-devel
yum install openssl
yum install openssl-devel

安装完成之后进入刚才nginx解压的目录继续安装nginx,默认安装位置为/usr/local/nginx

make && make install

进入安装目录的conf文件夹,修改配置文件

vim nginx.conf

在server节点下,修改location内容,注意ip地址换成你的服务器IP,也就是Program.cs文件里配置的那个IP

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
              proxy_pass http://127.0.0.1:8001;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }

同supervisor一样,把nginx设置为开机启动,不过nginx是用源码编译安装的,所以要手动创建nginx.service服务文件

vim /lib/systemd/system/nginx.service

写入配置,如果你修改了安装目录,配置文件的目录也要修改

[Unit]
Description=nginx
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

创建开机启动并且启动,这里有一点,如果服务器的80端口被占用,nginx启动可能会有问题,建议其他程序不要使用80端口

systemctl enable nginx.service
systemctl start nginx.service

现在我们可以直接通过IP访问网站,不需要再通过端口,这是因为nginx做了代理,如果想通过域名访问,可以在nginx里配置server节点下的server_name的值

centos7下部署nginx+supervisor+netcore2.1服务器环境第10张

然后重启nginx

systemctl restart nginx.service

最后再简单介绍一下nginx做负载均衡的配置,我们把刚才的站点首页改成webA,并且重新发布,记得更新完之后要重启一下supervisor,不然修改不会生效

systemctl restart supervisord

现在页面这样的

centos7下部署nginx+supervisor+netcore2.1服务器环境第11张

然后在建一个一模一样的站点,首页改成webB,Program.cs文件端口改成8002,在服务器上新建一个myappb的文件夹,把b站点发布的代码放到这里,然后复制一份myapp.ini这个文件myappb.ini,也放到supervisord.d文件夹里,注意配置文件里的路径要改成myappb站点的路径,其实就是按照myapp站点的方式重来一遍

centos7下部署nginx+supervisor+netcore2.1服务器环境第12张

重启supervisor

systemctl restart supervisord

现在你可以访问8001和8002两个站点了,首页一个是webA一个是webB,然后在配置nginx,在http模块中添加如下配置,注意IP换成你的服务器IP,那个weight就是权重,不具体说了

upstream webservers {
    server 127.0.0.1:8001 weight=10;
    server 127.0.0.1:8002 weight=10;
}

proxy_pass 修改

  location / {
            proxy_pass   http://webservers;
        }

这里是修改完的配置

centos7下部署nginx+supervisor+netcore2.1服务器环境第13张

最后重启一下nginx

systemctl restart supervisord

好了,现在访问你nginx配置的IP或者域名,不断的刷新,就会发现webA和webB会随机访问,这样一个简单的负载均衡就实现了

免责声明:文章转载自《centos7下部署nginx+supervisor+netcore2.1服务器环境》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java虚拟机14:Java对象大小、对象内存布局及锁状态变化基于WebGL的三维交通监控可视化技术应用(实践版) ThingJS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python爬取中文页面的时候出现的乱码问题

一、读取返回的页面数据 在浏览器打开的时候查看源代码,如果在头部信息中指定了UTF-8 那么再python代码中读取页面信息的时候,就需要指定读取的编码方式: response.read().decode('utf-8') 二、把中文数据写入到文件的时候 python默认的是按照ACSII的编码往外写,所以中文数据往外写肯定会出现乱码 那么再往外写入文件的...

使用pandas处理大型CSV文件(转)

# -*- coding:utf-8 -*- ''' CSV 常用API 1)reader(csvfile[, dialect='excel'][, fmtparam]),主要用于CSV 文件的读取,返回一个 reader 对象用于在CSV 文件内容上进行行迭代。 参数: csvfile,需要是支持迭代(Iterat...

LNMP安装了哪些软件?安装目录在哪?

LNMP一键安装包除去安装所必须的依赖包,还会默认安装以下软件: Nginx、MySQL/MariaDB、PHP、phpMyAdmin、Zend Optimizer/Zend GuardLoader。用户可以根据自己的需要安装其他组件,如FTP服务器、缓存组件,也可以使用升级脚本对Nginx、MySQL、PHP进行升级。安装这些组件或升级都需要在lnmp下...

Nginx MIME类型配置

本文记录Nginx静态web服务器中MIME类型的配置项。 1. MIME type与文件扩展映射 语法:type{...}; 配置块:http、server、location 定义MIME type到文件扩展名映射时,多个扩展名可以映射到同一个MIME type。 types { text/html html; text/html con...

Nginx的高级使用

1、概述 之前介绍过Nginx的简单使用,今天来聊聊Nginx的一些高级使用。 2、使用Nginx解决跨域问题 当公司存在多个域名时,两个不同的域名相互访问就会存在跨域问题。 或者在进行前端开发时,通常前端代码在本地启动,而后端代码会部署在一台专用的后端开发服务器上,此时前端去调用后端接口时,就会出现跨域问题。 解决跨域的方法有很多,今天来说一下如何使用N...

Linux驱动中的异步函数(aio_read和aio_write)

Linux驱动中的异步函数(aio_read和aio_write) 我们可以在signal_handler使用了read和write函数处理设备文件的读写操作。然而这两个函数可以分别用aio_read和aio_write代替。在本节将重新改造signal驱动,使用aio_read和aio_write函数来处理设备文件的读写操作,新的Linux驱动源代码文件...