系统: 阿里云的默认 CentOS 7.5 镜像

项目环境:.Net Core 2.2

一、安装.Net Core的运行环境

第一步,如果是一台新的服务器,可以升级一下系统的基础软件。如果没有必要也可以跳过这一步。

执行命令

  1. sudo yum update

第二步,注册Microsoft签名密钥,每个机器只要注册一次就可以

注册命令

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

执行结果

第三步:安装.Net Core SDK ,这里根据项目环境,需要安装2.2版的。不同的开发环境选择对应的运行时版本即可

执行命令

  1. sudo yum install dotnet-sdk-2.2

完成后,通过命令,可以看出.net core的版本

  1. dotnet --version

第四步:上传一个.Net Core的程序,进入到程序包所在目录

执行命令

  1. dotnet HelloWrold.dll #项目的dll文件

到这里,就可以通过服务器IP加上程序设定的端口号(一般默认是5000)进行访问了。如果你的服务器是在云端,有安全防护,需要开启对应的端口访问权限

二、通过 nginx 进行转发

第一步、安装nginx

执行命令

  1. sudo yum install nginx

第二步,修改 nginx 的配置文件

执行命令

  1. vim /etc/nginx/nginx.conf

修改 location的值,修改的内容如下:

  1. # 传递真实IP到后端
  2. proxy_set_header Host $http_host;
  3. proxy_set_header X-Real-IP $remote_addr;
  4. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  5. proxy_pass http://localhost:5000;

这个配置的意思是监听80端口,如果有人访问80端口就把请求转到5000端口,这里的5000端口就是你 .Net Core 程序的端口,默认为5000可以更改,如果有更改换掉即可。

第三步、重启 nginx 的服务。启动 .Net Core 的程序

  1. #重启 nginx
  2. systemctl restart nginx
  3.  
  4. #进行dotnet 项目目录
  5. cd /home/www/hello/
  6.  
  7. #运行dotnet 项目
  8. dotnet Helloworld.dll

这个时候,我们就可以通过服务器的80端口,访问我们的 .Net Core 程序了。

第四步、配置多个.net core的转发

如果你的服务器的nginx需要转发多个正在运行的 .Net Core 项目,可以通过在nginx的 /etc/nginx/conf.d/ 目录下,为每个项目建立一个转发的规则文件

  1. # 打开配置文件目录
  2. cd /etc/nginx/conf.d/

这里的配置文件目录和文件格式 在 nginx.conf 中有指定。

进入目录后,新建一个文件

  1. vim hello.conf #名称没有要求,可以和自己的项目名称一样,方便查找
  1. server {
  2. listen 80;
  3. server_name hello.leodev.cn;
  4. index index.html;
  5.  
  6. location / {
  7. # 传递真实IP到后端
  8. proxy_set_header Host $http_host;
  9. proxy_set_header X-Real-IP $remote_addr;
  10. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  11. proxy_pass http://localhost:5000;
  12. }
  13. }

可以看到,配置中,和之前nginx.conf的文件基本是一样的。 我们只是为项目绑定了一个域名

然后重启 nginx 服务,这个时候,我们就可以通过 绑定的域名,访问到我们的 .Net Core 程序了。

三、使用 supervisor 为程序创建守护进程

第一步、安装 supervisor

执行命令:

  1. yum install supervisor

第二步、修改 supervisor 的配置文件

  1. vi /etc/supervisord.conf

这里的意思,在 supervisord.d 文件夹下的所有 ini 类型的文件都是配置文件

我们在这个文件夹下为我们的守护程序创建一个配置文件

  1. #创建配置文件
    vim /etc/supervisord.d/hello.ini
  1. [program:helloworldnetcore]
  2. command=dotnet helloworld.dll #运行命令
  3. directory=/home/www/hello #程序路径
  4. environment=ASPNETCORE__ENVIRONMENT=Production
  5. user=root
  6. stopsignal=INT
  7. autostart=true #自动启动
  8. autorestart=true #3秒自动重启
  9. startsecs=3
  10. stderr_logfile=/var/log/ossoffical.err.log
  11. stdout_logfile=/var/log/ossoffical.out.log

以上是我的项目的守护配置文件,可以根据自己的配置文件,修改前三行的内容

第三步、启动服务

  1. supervisord -c /etc/supervisord.conf #启动服务
  2. supervisorctl reload #重新加载配置
  3.  
  4. #其他相关操作
  5. supervisorctl shutdown #关闭
  6. systemctl enable supervisord #开机启动
  7. systemctl is-enabled supervisord #验证是否开机启动

有时候启动的时候会提示错误:

错误1:端口被占用

解决方案:

  1. #查询到 supervisord的进程
  2. ps -ef | grep supervisord
  3.  
  4. #将查询的进程的 id,杀掉
  5. kill -9 PId

错误二:配置文件有问题

提示你执行

  1. #执行命令,查看服务器启动失败的原因
  2. systemctl status supervisord.service

可以看到提示的错误,不是一个有效的 boolean 值。 或者其他的错误提示。

这个情况,我会把创建的hello.ini 中的注释,都删除掉。这样就没有问题了。

还有人说是配置文件的编码格式问题,这个我没有去研究,发现只要把注释删除就可以正常启动。

到这里基本就完成了对 .Net Core 程序的进程守护,当 .Net Core 进程意外结束时,会自动启动。

第四步、配置守护进程的界面管理功能

打开 supervisor 的配置文件

  1. vim /etc/supervisord.conf

去掉这里的注释,然后把值根据自己的习惯,修改一下。 记得开启阿里云中端口 9001 的访问权限。

这样,在浏览器,通过IP:port 的形式,就可以通过图形界面管理守护的进程了。非常方便。

CentOS 下运行.net Core程序的更多相关文章

  1. 因Console.Read()导致Centos 后台运行.net core程序报错

    .net 控制台程序通常用 Console.Read(),或者Console.ReadKey()让进程阻塞保持,不退出. 但在.net core 需要将程序放在后台执行时 用Console.Read( ...

  2. [转帖]以Windows服务方式运行.NET Core程序

    以Windows服务方式运行.NET Core程序 原作者blog:https://www.cnblogs.com/guogangj/p/10093102.html 里面使用了NSSM 工具 但是自己 ...

  3. 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式

    连表查询都用Left Join吧   最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...

  4. Windows下启动.Net Core程序脚本

    @echo offstart cmd /k "cd /D %~dp0&&dotnet xxx.dll" cmd /k 是执行完dir命令后不关闭命令窗口 cd /d ...

  5. 以Windows服务方式运行.NET Core程序

    在之前一篇博客<以Windows服务方式运行ASP.NET Core程序>中我讲述了如何把ASP.NET Core程序作为Windows服务运行的方法,而今,我们又遇到了新的问题,那就是: ...

  6. Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

  7. 在VC6.0下运行C语言程序,以及编程入门必备的常识类小知识!

    今天给大家分享在VC6.0环境下编写C语言程序的基本步骤,为初学者打开学习C语言的第一道门.具体步骤如下(如果需要软件资源,可以留言): 1)新建工作区 依次点击 文件--新建--工作区 或是Ctrl ...

  8. Centos下安装 .net Core运行程序

    首先要进行更新下镜像文件 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e ...

  9. CentOS下搭建.NET Core项目运行环境

    系统版本:CentOS 7.3 运行环境:.NET Core 数据库:MySQL 进程守护:Supervisor .NET Core环境 安装CentOS中.NET Core依赖库 yum insta ...

随机推荐

  1. 直接从ADB接出串口调试

    1,从硬件接出串口线 2,用串口工具连接上串口工具,串口工具地址:https://files.cnblogs.com/files/senior-engineer/%E4%B8%B2%E5%8F%A3% ...

  2. 浅析String.intern()方法

    1.String类型“==”比较样例代码如下:package com.luna.test;public class StringTest { public static void main(Strin ...

  3. .Net Core 3.0 Api json web token 中间件签权验证和 Cors 中间件处理跨域请求

    第一步:在Nuget上安装"Microsoft.AspNet.WebApi.Cors"包,并对api controller使用[EnableCors]特性以及Microsoft.A ...

  4. 2019 GDD TensorFlow

    https://www.tensorflow.org/ https://tensorflow.google.cn/     (中文站点) 现场PPT照片:    https://pan.baidu.c ...

  5. python初级(302) 6 对象(四)

    一.复习 1.什么是多态 2.复习上一节课内容 class Triangle: """ 三角形类 """ def __init__(self ...

  6. ufw防火墙规则不生效

    正式站系统是Ubuntu 16.04.6 一.今天一个项目有百度爬出,在nginx中封掉还在一直爬取,都403还不停爬取 二.在uwf封掉爬出ip,想封掉80端口没有用,然后封掉整个网段还是没有用,尴 ...

  7. Zabbix 3.0 配置企业微信报警(注册---测试)

    一.申请企业微信 1.登录企业微信官网,点击企业注册 二.配置企业微信 1.邀请管理员使用企业微信,如果有多个人直接添加新成员 2.管理员收到邀请,下载手机版企业微信,使用微信号登陆即可 3.创建应用 ...

  8. Juju solutions for OpenStack

    Juju solutions for OpenStack Juju makes it easy to deploy OpenStack at scale. Quickly and reliably b ...

  9. initramfs文件系统制作

    源码下载:https://busybox.net/downloads/ 源码版本:busybox-1.30.0.tar.bz2 [ 源码编译步骤 ] make menuconfig ARCH= COM ...

  10. JS系列:编程语言

    1.编程语言 html+css标记语言 js:轻量级的交互语言->全栈编程语言 - 面向对象: + C++ + JAVA + PHP + C# (.net doc) + JS - 面向过程 + ...