如何在Linux上部署.Net核心应用程序

内容纲要

当微软推出他们的.Net核心框架时,关键的卖点是它是一个跨平台的框架,这意味着现在我们不仅可以在Windows上托管我们的.Net应用程序,也可以在Linux上托管,所以让我们看看我们如何在Linux上部署.Net核心应用程序。

第1步 - 发布你的.Net核心应用程序

首先,在VS上创建一个.Net核心应用程序;你可以做一个MVC项目或Web API项目,如果你已经有一个现有的项目,那么打开它:

  1. 在你的项目上点击右键
  2. 点击发布
  3. 现在创建一个新的发布配置文件,并浏览你想发布项目文件的文件夹。
  4. 点击发布,它将在该文件夹中创建你的dll文件。

第2步 - 在Linux上安装所需的.Net模块

现在我们有了我们的网络应用程序dll,现在我们需要在Linux环境中托管它。首先,我们需要了解在Linux中的部署是如何进行的。.Net应用程序在Kestrel服务器上运行,我们在Linux环境中运行Apache或Nginx服务器,它作为一个代理服务器,处理来自机器外部的流量,并将其重定向到Kestrel服务器,所以我们将Apache或Nginx服务器作为中间层。

在本文中,我们将使用Apache作为代理服务器。

首先,我们需要在Linux环境中安装.Net核心模块。为此,运行以下命令:

  • sudo apt-get update
  • sudo apt-get install apt-transport-https
  • sudo apt-get update
  • sudo apt-get 安装 dotnet-sdk-3.1
  • sudo apt-get 安装 dotnet-runtime-3.1
  • sudo apt-get 安装 aspnetcore-runtime-3.1

第3步 - 安装和配置Apache服务器

现在我们有了所有需要的.Net软件包。我已经安装了一个额外的包,所以如果你正在运行一个不同的项目,它将会有所帮助。

现在安装Apache服务器:

  • sudo apt-get install apache2
  • sudo a2enmod proxy proxy_http proxy_html proxy_wstunnel
  • sudo a2enmod rewrite

现在我们需要制作一个conf文件来设置我们在Apache上的代理,创建以下文件:

  • sudo nano /etc/apache2/conf-enabled/netcore.conf

现在在该文件中复制以下配置:

<VirtualHost *:80>
   ServerName www.DOMAIN.COM
   ProxyPreserveHost On
   ProxyPass / http://127.0.0.1:5000/
   ProxyPassReverse / http://127.0.0.1:5000/
   RewriteEngine on
   RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
   RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
   RewriteRule /(.*) ws://127.0.0.1:5000/$1 [P]
   ErrorLog /var/log/apache2/netcore-error.log
   CustomLog /var/log/apache2/netcore-access.log common
</VirtualHost>

这个标签定义了它将绑定Apache的IP和端口,所以我们将通过这个Ip:Port从我们的Linux环境之外访问我们的应用程序。

现在重新启动Apache服务器:

  • sudo service apache2 restart
  • sudo apachectl configtest

第4步 - 配置和启动服务

用下面的命令把你的dll移到定义的路径中。

"sudocp -a ~/release/ /var/netcore/"

为我们的.Net应用程序创建一个服务文件

"sudo nano /etc/systemd/system/ServiceFile.service"

在该文件中复制以下配置,它将运行我们的应用程序:

[Unit]
Description=ASP .NET Web Application
[Service]
WorkingDirectory=/var/netcore
ExecStart=/usr/bin/dotnet /var/netcore/Application.dll
Restart=always
RestartSec=10
SyslogIdentifier=netcore-demo
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target

ExecStart=/usr/bin/dotnet /var/netcore/Application.dll在这一行中,用你想运行的dll名称替换Application.dll。

现在启动该服务。在下面的命令中用上面的文件名代替服务名称:

  • sudo systemctl enable {Service Name}.
  • sudo systemctl start {Service Name}.

现在你的代理服务器和kestrel服务器正在运行,你可以通过任何80端口的ip访问你的应用程序。

要重新部署代码,你需要替换dll,并通过以下命令再次停止和启动你的服务:

  • sudo systemctl stop {Service Name}.
  • sudo systemctl start {Service Name}.

给TA打赏
共{{data.count}}人
人已打赏
.NET

如何在 Debian 11 上安装 .NET Framework

2022-7-28 17:32:13

.NET

记一次 .NET 某智慧物流 WCS系统 CPU 爆高分析

2022-7-29 18:21:59

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索