当微软推出其 .Net Core 框架时,关键卖点是它是一个跨平台框架,这意味着现在我们不仅可以在 Windows 上托管我们的 .Net 应用程序,还可以在 Linux 上托管我们的 .Net 应用程序,所以让我们看看如何在 Linux 上部署 .Net 核心应用程序。
步骤 1-发布您的 .Net Core 应用程序
首先,在 VS 上创建一个 .Net 核心应用程序;您可以创建一个 MVC 项目或 Web API 项目,如果您已经有一个现有项目,则打开它。
- 右键单击您的项目
- 点击发布
- 现在创建一个新的发布配置文件,并浏览要发布项目 dll 的文件夹
- 单击发布,它将在文件夹中创建你的 dll
第 2 步 - 在 Linux 上安装所需的 .Net 模块
现在我们有了我们的 Web 应用程序 dll,现在我们需要将其托管在 Linux 环境中。首先,我们需要了解部署在 Linux 中的工作原理。.Net 应用程序在 Kestrel 服务器上运行,我们在 Linux 环境中运行 Apache 或 Nginx 服务器,它充当代理服务器并处理来自机器外部的流量并将其重定向到 Kestrel 服务器,因此我们将使用 Apache 或 Nginx 服务器作为中间层。
在本文中,我们将使用 Apache 作为代理服务器。
首先,我们需要在 Linux 环境中安装 .Net core 模块。为此,请运行以下命令:
- sudo apt-get 更新
- sudo apt-get 安装 apt-transport-https
- sudo apt-get 更新
- 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 安装 apache2
-
sudo a2enmod 代理 proxy_http proxy_html proxy_wstunnel
-
sudo a2enmod 重写
现在我们需要创建一个 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>
<虚拟主机 *:80>
此标签定义了将绑定 Apache 的 IP 和端口,因此我们将通过此 Ip:Port 从 Linux 环境外部访问我们的应用程序。
现在重新启动 Apache 服务器,
- sudo 服务 apache2 重启
- sudo apachectl configtest
第 4 步 - 配置并启动服务
使用以下命令将您的 dll 移动到定义的路径。
“ sudo cp -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在此行中将 Application.dll 替换为您要运行的 dll 名称。
现在启动服务。以下命令中的服务名称应改为上面创建的文件的名称,
- sudo systemctl enable {服务名称}
- sudo systemctl start {服务名称}
现在您的代理服务器和 kestrel 服务器正在运行,您可以通过任何带有端口 80 的 IP 访问您的应用程序。
要重新部署代码,您需要替换 dll 并通过以下命令停止并重新启动服务
- sudo systemctl stop {服务名称}
- sudo systemctl start {服务名称}