本文于Ngnix 1.21版本及以下成功运行,高版本需自行测试可用性

1.在Ngnix下安装.NET Core SDK与Runtime

引用自微软官方文档https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos

CentOS 7

前置

运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
Bash

安装SDK

sudo yum install dotnet-sdk-6.0
Bash

安装运行时

sudo yum install aspnetcore-runtime-6.0
Bash

作为 ASP.NET Core 运行时的一种替代方法,可以安装不包含 ASP.NET Core 支持的 .NET 运行时:将上一命令中的 aspnetcore-runtime-6.0 替换为 dotnet-runtime-6.0

sudo yum install dotnet-runtime-6.0
Bash

CentOS 8

*CentOS 8 将于 2021 年 12 月 31 日提前结束生命周期 (EOL)。 有关详细信息,请参阅官方 CentOS Linux EOL 页。 因此,CentOS Linux 8 不支持 .NET 6。

安装SDK

sudo dnf install dotnet-sdk-5.0
Bash

安装运行时

sudo dnf install aspnetcore-runtime-5.0
Bash

安装其他版本SDK

更改上述安装SDK代码中的版本号即可

各版本号参考https://dotnet.microsoft.com/en-us/download/dotnet


在其他系统上安装

其他系统如Ubuntu、Debian、Fedora、macOS请参阅https://docs.microsoft.com/zh-cn/dotnet/core/install/


其他安装方法

转载自https://blog.csdn.net/zhaobw831/article/details/78632675

执行以下命令:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
Bash

sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.0.3
Bash

这里的SDK版本可参阅上述的SDK版本进行更改以安装自己想要的版本

执行完以上命令后,可使用 dotnet --version 查看当前.NET Core版本

查看版本号

查看版本号


2.设置反向代理

宝塔面板

以宝塔面板7.9为例,可向下兼容自行设置,需面板已安装Ngnix且至少有反向代理功能的版本

网站 - PHP项目 - 选择想要运行.Net程序的网站 - 设置 - 反向代理 - 添加反向代理 - 按照如下设置填写

开启代理开启缓存代理名称目标URL发送域名
自行填写http://localhost:5000localhost

宝塔反向代理设置示例

宝塔反向代理设置示例


其他面板或系统

自行配置Nginx反向代理:只需要配置如下内容,其他不需要修改,把80端口转发到5000即可

Nginx反向代理配置

Nginx反向代理配置


3.生成并上传项目至网页目录


4.运行项目

在SSH终端进入项目网页目录并执行以下命令

项目名.dll需要替换为自己的项目dll名称,例如上图Estart.dll

dotnet 项目名.dll
Bash

5.使用Screen保持程序运行

由于Linux的[挂断信号SIGHUP]概念(在此不过多赘述),在关闭终端后运行的.Net Core程序会随着结束。

简而言之 :就是SSH打开以后,Bash等都是他的子程序,一旦SSH关闭,系统将所有相关进程杀掉! 导致一旦SSH关闭,执行中的任务就取消了。

针对这样的情况,我们引入Screen来解决这个问题

安装Screen

流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。

yum install screen
rpm -qa|grep screen
Bash

创建一个新的窗口

安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字(仍然会为它分配一个数字ID),实践上推荐为每个screen会话取一个名字,方便分辨

screen -S netcore
Bash

运行想要的命令

在新建的窗口中进入网站目录并运行第四步的代码

dotnet 项目名.dll
Bash

回到root主界面

按下Ctrl-A + D返回主界面,Screen中的命令会保持运行状态,关闭SSH即可大功告成

关于Screen一些简单用法

screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session
Bash

快捷键:

C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window 
C-a p -> Previous,切换到前一个 window 
C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换 
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> time,显示当前时间,和系统的 load 
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
    C-b Backward,PageUp 
    C-f Forward,PageDown 
    H(大写) High,将光标移至左上角 
    L Low,将光标移至左下角 
    0 移到行首 
    $ 行末 
    w forward one word,以字为单位往前移 
    b backward one word,以字为单位往后移 
    Space 第一次按为标记区起点,第二次按为终点 
    Esc 结束 copy mode 
C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上

参考文档[https://man.linuxde.net/screen
](https://man.linuxde.net/screen)


后续

一些后续使用方法、心得、教程会陆续更新,此文章最后更新于2022年8月9日18:24

最后修改:2022 年 08 月 23 日
End

本文标题:Ngnix下部署.NET Core程序

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源,本人保留此文章的所有权利

如果觉得我的文章对你有用,请随意赞赏