文档章节

dotnet core+nginx+supervisor

o
 osc_o7on7g3b
发布于 2019/09/01 16:10
字数 1463
阅读 53
收藏 1

行业解决方案、产品招募中!想赚钱就来传!>>>

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,想要的自己改别的也行,到这里算是弄好了,记得在腾讯云安全组中开放端口

  本地访问效果如下:

     

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
高性能跨语言 RPC--Hprose

Hprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写 —— 微服务首选引擎。 它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件...

andot
2012/12/27
6.1W
28
.NET的ORM框架--SqlSmart

SqlSmart是一个DotNet类库,它可以充分利用 codeinsight ,面向对象技术来帮助程序员更快的,更准确到编写sql,这样的sql以容易重构的。 听起来陌生?这是想法我之前并没有在其他ORM技术,比如...

匿名
2010/03/04
8.2K
1
Ruby In Steel

Ruby In Steel是一个适用于Visual Studio2005的add-in。可以在VS2005里编写、运行Ruby程序。它的特点是非常类似c#等dotnet的编辑器,代码能折叠,能检查语法错误,支持Rails工程,中括号自动...

匿名
2008/10/07
1.7K
1
indeXus.Net Shared Cache

indeXus.Net SharedCache是高性能的、分布式的内存对象系统,用于在动态WEB或Win应用程序中减少数据库的负责,提高访问速度。SharedCache 全部的代码都是用c#写的,100% DotNet原生态。...

匿名
2008/11/10
3.3K
0
微信小程序版高性能跨语言平台--Hprose-wx

Hprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写。本项目是 Hprose 2.0 的微信小程序专用版。 它是一个先进的轻量级的跨语言跨平台面向对象的高性...

andot
2016/11/11
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Python安装第三方库太慢??

今天在升级下载Python第三方库的时候特别慢,最后去升级pip的时候竟然还time out了,哇心态炸了。 问题想清楚了该怎么解决呢? 咱们可以用国内的镜像源啊,于是我在网上搜了一下国内的镜像源...

不卖萌的邓肯
今天
0
0
C语言与C++常见面试题

本篇根据各个公司的面试问的常见问题进行总结。 公众号回复“面试”,获取pdf答案 1 变量的声明和定义有什么区别 2 简述 #ifdef、#else、#endif和 #ifndef的作用 3 写出 int 、bool、 float、...

公众号C语言与CPP编程
今天
0
0
自定义CheckBox快速实现开发

在开发CheckBox过程中,经常感觉功能很简单,就是写了半天代码,尤其是设置监听和判断上,万一有10个以上的CheckBox,还会在复制时由于不小心,出现bug 天啦,这么简单常用的控件出BUG,简直没...

osc_gzy9w31p
22分钟前
0
0
写给小白看的线程和进程,高手勿入

计算机的核心是CPU,它承担了计算机的所有计算任务,CPU就像一个工厂,时刻在运行着,而操作系统管理着计算机,负责任务的调度、资源的分配和管理。 进程和线程都是计算机操作系统中的基本概...

hzjjames
今天
0
0
分布式锁,redisson是如何解决死锁问题

点击上方“小罗技术笔记”,关注公众号 第一时间送达实用干货 作者:雨点的名字 来源:http://suo.im/6748UQ 使用redis做分布式锁时大家可能都知道使用setnx容易发生死锁情况,大多数都会推荐...

javaNode
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部