如何将asp.net core程序部署到Linux服务器

  • Post category:C#

将ASP.NET Core程序部署到Linux服务器需要以下步骤:

  1. 在Linux服务器上安装.NET Core运行时环境和ASP.NET Core运行时环境。

  2. 在Linux服务器上安装Web服务器,如Nginx或Apache。

  3. 将ASP.NET Core程序发布为自包的可执行文件或Docker容器。

  4. 配置Web服务器以反向代理到ASP.NET Core程序。

下面是将ASP.NET Core程序部署到Linux服务器的完整攻略:

步骤1:安装.NET Core运行时环境和ASP.NET Core运行时环境

在Linux服务器上安装.NET Core运行时环境和ASP.NET Core运行时环境,需要执行以下步骤:

  1. 添加Microsoft包存储库
sudo apt-get update
sudo apt-get install -y curl libunwind8 gettext apt-transport-https
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-bionic-prod bionic main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get update
  1. 安装.NET Core运行时环境和ASP.NET Core运行时环境
sudo apt-get install -y dotnet-sdk-3.1 aspnetcore-runtime-3.1

步骤2:安装Web服务器

在Linux服务器上安装Web服务器,需要执行以下步骤:

  1. 安装Nginx
sudo apt-get install -y nginx
  1. 安装Apache
sudo apt-get install -y apache2

步骤3:发布ASP.NET Core程序

将ASP.NET Core程序发布为自包含的可执行文件或Docker容器,需要执行以下步骤:

  1. 发布为包含的可执行文件
dotnet publish -c Release -r linux-x64 --self-contained true
  1. 发布为Docker容器
docker build -t myapp .

步骤4:配置Web服务器

配置Web服务器以反向代理到ASP Core程序,需要执行以下步骤:

  1. 配置Nginx
sudo nano /etc/nginx/sites-available/default

在上面的文件中添加以下内容:

server {
    listen        80;
    server_name   example.com;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}
  1. 配置Apache
sudo nano /etc/apache2/sites-available/000-default.conf

在上面的文件中添加以下内容:

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

示例1:将ASP.NET Core程序部署到Nginx

假设我们有一个名为myapp的ASP.NET Core程序,我们将其发布为自包含的可执行文件,并将其部署到Nginx上。

  1. 将myapp程序发布为自包含的可执行文件
dotnet publish -c Release -r linux-x64 --self-contained true
  1. 将myapp程序复制到Linux服务器上
scp bin/Release/netcoreapp3.1/linux-x64/publish/* user@:/var/www/myapp
  1. 配置Nginx
sudo nano /etc/nginx/sites-available/default

在上面的文件中添加以下内容:

server {
    listen        80;
    server_name   example.com;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}
  1. 重启Nginx
sudo systemctl restart nginx

现在,我们可以通过访问http://example.com来访问myapp程序。

示例2:将ASP.NET Core程序部署到Apache

假设我们有一个名为myapp的ASP.NET Core程序,我们将其发布为Docker容器,并将其部署到Apache上。

  1. 将myapp程序发布为Docker容器
docker build -t myapp .
  1. 将myapp程序上传到Docker Hub
docker tag myapp username/myapp
docker push username/myapp
  1. 在Linux服务器上安装Docker
sudo apt-get install -y docker.io
  1. 在Linux服务器上运行myapp容器
docker run -d -p 5000:80 username/myapp
  1. 配置Apache
sudo nano /etc/apache2/sites-available/000-default.conf

在上面的文件中添加以下内容:

<VirtualHost *80>
    ProxyPreserveHost On
    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. 重启Apache
sudo systemctl restart apache2

现在,我们可以访问http://example.com来访问myapp程序。