• dotnet core+nginx+supervisor


    1.前提准备

      安装虚拟机,安装CentOS,有云服务器的直接用云服务器就行

      本地安装 xshell、xftp

    2.nginx配置静态页面

      我们先学习一下使用nginx配置一个静态页面,一步一步来深入

      使用xshell连接linux

      使用 yum 来安装 Nginx

    yum install nginx -y

      使用 nginx 命令启动 Nginx

    nginx

      附:关闭、重启命令

    nginx -s stop
    nginx -s reload

      在本地访问http://<ip>,出现nginx页面为成功

      然后在本地新建一个index.html静态文件,xftp连接linux,上传到linux:/home/wwwrooot/test(这个自己定义)

      找到:

    /etc/nginx/nginx.conf

      在这个配置文件添加一个server,如下:

        server {
            listen       1101 default_server;
            listen       [::]:1101 default_server;
            server_name  _;
            root         /home/wwwrooot/test;
            include /etc/nginx/default.d/*.conf;
    
            location / {
            }
        }

      这里可以自己vi去编辑,也可以用xftp把这个配置传输到本地,本地编辑好再传输回服务器,这里我比较喜欢后者,方便

      添加完配置后,我们重启一下nginx

      本地访问链接http://<ip>:1101  出现自己配置的页面为成功

      不成功的话,欢迎留言讨论(反正我是成功了)

     3.配置dotnet core 项目

      1)linux安装dotnet core sdk 2.2

      添加yum源

    rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

      升级所有包同时也升级软件和系统内核

    yum update

      安装.net core

    yum install dotnet-sdk-2.2

      查看是否安装成功

    dotnet --version

      官方文档:https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-2.2.401  没事多看看官网,虽然我也没这习惯,不过我想慢慢让自己喜欢上

      

      2)新建一个core web项目,这里叫 CoreDemo,并发布,将发布出来的文件上传到  /home/wwwrooot/dotnetCore/CoreDemo

      然后加配置,这里我们采用别的方法加,不和上面一样直接修改 nginx.conf

      打开nignx.conf 的时候,你是否注意到一行

    include /usr/share/nginx/modules/*.conf;

      很明显,这是导入这个路径下的所有 conf 后缀的配置文件

      那就很容易了,我们新建一个配置文件,就叫 CoreDemo.conf  好了,内容如下

    server {
        listen     1102 default_server;
        server_name localhost;
        location / {
            proxy_pass http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }

      重启nginx,然后cd 到上面上传的发布文件的目录,执行启动命令

    dotnet CoreDemo.dll

      完毕!在本地访问http://<ip>:1102试试看!!!

      PS:附加一个bug   访问  http://localhost:5000 的时候  dotnet core 会重定向成安全链接  https://localhost:5001  如果服务器没有ssl认证,还不支持https  就会有访问不到的情况发生

      解决方法:

      1)ssl认证,无话可说

      2)修改代码,让程序不重定向

        这里,我们把5000换成 2202(最好每次都换吧,免得端口冲突)

        launchSettings.json  删掉 https配置

        "CoreDemo": {
          "commandName": "Project",
          "launchBrowser": true,
          "applicationUrl": "http://localhost:2202",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }

        Program

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

      重新发布上传,并修改 CoreDemo.conf    5000->2202

      跑一下试试!!!

    4.守护项目进程

      在之前的操作中,dotnet CoreDemo.dll 启动项目为前台启动,这样方便调试,但是对于生成环境确实极不友好的,所有,要创建守护进程,把这个变为后台执行

      这里,我们使用  Supervisor

      首先,安装

    yum install supervisor

      打开 /etc/supervisord.conf  打开后拉到最末,有这么一行(这里就看一下,可无需操作)

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

      因为supervisord.conf 支持 .ini 和 .conf 的配置文件,所以,我们可以在这里修改指定路径和指定读取文件类型(这里不修改)

      新建CoreDemo.ini 到 /etc/supervisord.d/ 文件夹下面,内容如下

    [program:CoreDemo]
    command=dotnet CoreDemo.dll    #运行命令
    directory=/home/wwwrooot/dotnetCore/CoreDemo #程序路径
    environment=ASPNETCORE__ENVIRONMENT=Production
    user=root
    stopsignal=INT
    autostart=true #自动启动
    autorestart=true #3秒自动重启
    startsecs=3
    stderr_logfile=/log/CoreDemo/CoreDemo.err.log #标准错误日志
    stdout_logfile=/log/CoreDemo/CoreDemo.out.log #标准输出日志

      启动

    supervisord -c /etc/supervisord.conf  #启动服务
    
    
    其他相关操作:
    supervisorctl reload #重新加载配置
    supervisorctl shutdown #关闭
    systemctl enable supervisord #开机启动
    systemctl is-enabled supervisord #验证是否开机启动
    systemctl status supervisord #查看状态

      启动服务的时候,我们可能会发现一些错误

      (1)配置文件错误

       配置文件中的注释导致的错误,把注释删掉(这里有点莫名其妙,有的时候带注释也没发生错误)

      (2)日志文件不存在

      配置的日志文件的文件夹要手动新建

       (3)端口占用(这个一般发生在关闭服务后重启的时候)

       把进程干掉

    # ps -ef | grep supervisord
    root     18680     1  0 14:23 ?        00:00:00 /usr/bin/python /usr/bin/supervisord
    root     19076 30273  0 14:25 pts/0    00:00:00 grep --color=auto supervisord

    # kill -9 18680

    5.守护nginx进程

      用上面的命令设置supervisord开机启动后,重启一下服务器,发现,塔喵的nginx不会开机自启,好,继续下一步

      这里最简单的方法就是和项目一样,也给nginx配置进程守护,创建nginx.ini如下

    [program:nginx]
    command=nginx -g 'daemon off;'
    directory=/usr/sbin
    environment=ASPNETCORE__ENVIRONMENT=Production
    user=root
    stopsignal=INT
    autostart=true
    autorestart=true
    startsecs=3
    stderr_logfile=/log/nginx/nginx.err.log
    stdout_logfile=/log/nginx/nginx.out.log

      这里注意一下,nginx默认为后台启动,所以command执行命令得设置为前台,或者将 daemon off; 放到nginx.conf中,这样直接执行nginx就可以了

       好了,就是这么简单,重启服务器试试!!!

    6.显示supervisor 的控制台

      把控制台显示出来,方便我们管理

      vi  supervisord.conf

      修改下面这段配置

    [inet_http_server]         ; inet (TCP) server disabled by default
    port=*:9001        ; (ip_address:port specifier, *:port for all iface)
    username=user              ; (default is no username (open server))
    password=123               ; (default is no password (open server))

      我这里只是取消了注释,然后修改了 port,想要的自己改别的也行,到这里算是弄好了,记得在腾讯云安全组中开放端口

      本地访问效果如下:

         

  • 相关阅读:
    5.抽象工厂模式-abstractfactory
    java-code优化(持续更新)
    4.工厂方法模式-factoryMethod
    3.单例模式-singleton
    2.适配器模式-adapter
    1.外观模式-facade
    Hibernate(七)多对一单向关联映射
    Hibernate(六)一对一双向关联映射
    Hibernate(五)一对一单向关联映射
    Hibernate(四)基本映射
  • 原文地址:https://www.cnblogs.com/wskxy/p/11442626.html
Copyright © 2020-2023  润新知