如何在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

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

  1. <VirtualHost *:80>
  2. ServerName www.DOMAIN.COM
  3. ProxyPreserveHost On
  4. ProxyPass / http://127.0.0.1:5000/
  5. ProxyPassReverse / http://127.0.0.1:5000/
  6. RewriteEngine on
  7. RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
  8. RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
  9. RewriteRule /(.*) ws://127.0.0.1:5000/$1 [P]
  10. ErrorLog /var/log/apache2/netcore-error.log
  11. CustomLog /var/log/apache2/netcore-access.log common
  12. </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"

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

  1. [Unit]
  2. Description=ASP .NET Web Application
  3. [Service]
  4. WorkingDirectory=/var/netcore
  5. ExecStart=/usr/bin/dotnet /var/netcore/Application.dll
  6. Restart=always
  7. RestartSec=10
  8. SyslogIdentifier=netcore-demo
  9. User=www-data
  10. Environment=ASPNETCORE_ENVIRONMENT=Production
  11. [Install]
  12. 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打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    .NET

    如何在 Debian 11 上安装 .NET Framework

    2022-7-28 17:32:13

    .NET

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

    2022-7-29 18:21:59

    0 条回复 A文章作者 M管理员
    作者编辑不易,请留下你的声音!
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    今日签到
    私信列表
    搜索