在 Linux 上使用 Nginx 托管 ASP.NET Core 6.0 应用,并通过 GitHub Actions 实现自动部署,可以显著提升部署和运维的效率。以下是一个详细的指南,分步骤讲解如何实现这一目标。
首先,需要在服务器上安装必要的软件,包括 .NET SDK、Nginx 和 Git。
在 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:
sudo apt-get install -y nginx
配置 Nginx 以反向代理到 ASP.NET Core 应用。
在 /etc/nginx/sites-available/ 目录下创建一个新的 Nginx 配置文件,例如 myapp:
/etc/nginx/sites-available/
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:
sites-enabled
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo systemctl restart nginx
在服务器上创建一个目录,用于存放 ASP.NET Core 应用:
mkdir -p /var/www/myapp
在你的 GitHub 仓库中,创建一个 GitHub Actions 工作流文件 .github/workflows/deploy.yml:
.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
在服务器上,为你的 ASP.NET Core 应用创建一个 systemd 服务文件:
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
在 GitHub 仓库中,导航到 Settings > Secrets 并添加以下秘密:
SERVER_HOST
SERVER_USER
SERVER_SSH_KEY
推送代码到 main 分支,GitHub Actions 将自动运行工作流,构建并部署你的 ASP.NET Core 应用。
main
通过上述步骤,你可以在 Linux 上使用 Nginx 托管 ASP.NET Core 6.0 应用,并通过 GitHub Actions 实现自动部署。这种方法不仅提高了部署效率,还减少了人为操作的错误风险。
原文链接:codingdict.net