使用Nginx在 Linux 上托管 ASP.NET Core 6.0应用:GitHub Actio


在 Linux 上使用 Nginx 托管 ASP.NET Core 6.0 应用,并通过 GitHub Actions 实现自动部署,可以显著提升部署和运维的效率。以下是一个详细的指南,分步骤讲解如何实现这一目标。

步骤 1: 准备服务器环境

首先,需要在服务器上安装必要的软件,包括 .NET SDK、Nginx 和 Git。

安装 .NET SDK

在 Linux 服务器上安装 .NET SDK:

# 导入 Microsoft 的 GPG 公钥
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

# 安装 .NET SDK
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-6.0

安装 Nginx

接下来,安装 Nginx:

sudo apt-get install -y nginx

步骤 2: 配置 Nginx

配置 Nginx 以反向代理到 ASP.NET Core 应用。

/etc/nginx/sites-available/ 目录下创建一个新的 Nginx 配置文件,例如 myapp

sudo nano /etc/nginx/sites-available/myapp

添加以下配置:

server {
    listen 80;
    server_name your_domain_or_ip;

    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;
    }
}

将配置文件链接到 sites-enabled 目录并重启 Nginx:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo systemctl restart nginx

步骤 3: 部署 ASP.NET Core 应用

在服务器上创建一个目录,用于存放 ASP.NET Core 应用:

mkdir -p /var/www/myapp

创建 GitHub Actions 工作流

在你的 GitHub 仓库中,创建一个 GitHub Actions 工作流文件 .github/workflows/deploy.yml

name: Deploy ASP.NET Core Application

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Setup .NET
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '6.0.x'

      - name: Install dependencies
        run: dotnet restore

      - name: Build
        run: dotnet publish -c Release -o out

      - name: Deploy to server
        uses: appleboy/scp-action@v0.1.0
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          source: "./out"
          target: "/var/www/myapp"

      - name: Restart application
        uses: appleboy/ssh-action@v0.1.0
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            sudo systemctl restart myapp

创建 systemd 服务文件

在服务器上,为你的 ASP.NET Core 应用创建一个 systemd 服务文件:

sudo nano /etc/systemd/system/myapp.service

添加以下内容:

[Unit]
Description=My ASP.NET Core Application

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

启动并启用服务:

sudo systemctl enable myapp
sudo systemctl start myapp

步骤 4: 设置 GitHub Secrets

在 GitHub 仓库中,导航到 Settings > Secrets 并添加以下秘密:

  • SERVER_HOST: 你的服务器 IP 或域名
  • SERVER_USER: 用于连接服务器的用户名
  • SERVER_SSH_KEY: 服务器 SSH 私钥内容

步骤 5: 测试自动部署

推送代码到 main 分支,GitHub Actions 将自动运行工作流,构建并部署你的 ASP.NET Core 应用。

总结

通过上述步骤,你可以在 Linux 上使用 Nginx 托管 ASP.NET Core 6.0 应用,并通过 GitHub Actions 实现自动部署。这种方法不仅提高了部署效率,还减少了人为操作的错误风险。


原文链接:codingdict.net