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


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

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

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

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

    一、netcore2.1版本部署

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

    现在需要在服务器上安装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

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

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

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

    下图是新建好的项目

    在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");
        }

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

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

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

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

    dotnet myapp.dll

    现在项目已经跑起来了

    直接访问

    二、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的值

    然后重启nginx

    systemctl restart nginx.service

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

    systemctl restart supervisord

    现在页面这样的

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

    重启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;
            }

    这里是修改完的配置

    最后重启一下nginx

    systemctl restart supervisord

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

  • 相关阅读:
    Qt禁止调整窗口的大小
    CentOS 6.2修改主机名
    怎么培养新人
    软件的质量控制
    如何留住骨干
    物化视图索引引发的问题
    Oracle查询脚本优化
    Oracle视图编译错误解决办法
    spring切面配置,代理用jdk和cglib的区别
    Tomcat起了一个测试桩,调用该测试桩无响应
  • 原文地址:https://www.cnblogs.com/dfsk64/p/9204975.html
Copyright © 2020-2023  润新知