引言:为什么VPS是您的C#应用程序的理想之选
\n在.NET生态系统中使用C#进行开发,为创建Web应用程序、API和微服务提供了强大的工具。然而,编写代码只是成功的一半。为了让您的应用程序可供用户访问,必须将其部署到服务器上。虚拟专用服务器(VPS)让您能够完全控制环境,这对于生产环境至关重要。在本指南中,我们将逐步介绍如何在运行Ubuntu的VPS上,从零开始部署一个完全可运行的C#应用程序。您将学习如何安装.NET运行时、配置Nginx反向代理服务器、将应用程序作为systemd服务运行,并确保其自动重启。
\n\n服务器准备与必要软件安装
\n1. 连接到VPS并进行基本设置
\n在获得VPS的访问权限(IP地址、用户名和密码或SSH密钥)后,通过终端进行连接:
\nssh root@您的服务器IP\n更新软件包数据库并安装curl(下载.NET时需要):
\napt update && apt upgrade -y\napt install curl -y\n\n2. 安装.NET SDK/运行时
\n微软建议通过官方仓库安装.NET。我们将添加该仓库并安装SDK(用于构建)或运行时(仅用于运行)。对于生产服务器,通常运行时已足够,但为了方便部署,我们将安装SDK:
\nwget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb\ndpkg -i packages-microsoft-prod.deb\napt update\napt install -y dotnet-sdk-8.0\n验证安装:
\ndotnet --version\n\n3. 安装Nginx和Git
\nNginx将充当反向代理,将来自80端口的请求转发到您的应用程序。Git用于克隆代码仓库:
\napt install -y nginx git\nsystemctl enable nginx\nsystemctl start nginx\n\n准备并发布C#应用程序
\n1. 创建或克隆项目
\n例如,我们直接在服务器上创建一个简单的ASP.NET Core Web API应用程序(在实际项目中,您会克隆一个仓库):
\nmkdir /var/www/myapp\ncd /var/www/myapp\ndotnet new webapi --name MyApp\ncd MyApp\n\n2. 发布应用程序(独立部署)
\n为了使应用程序无需在服务器上安装SDK即可运行,我们将其发布为独立模式:
\ndotnet publish -c Release -r linux-x64 --self-contained true -o /var/www/myapp/publish\n标志 --self-contained true 会将所有.NET依赖项包含在publish文件夹中。替代方案是 --self-contained false(需要安装运行时)。
3. 测试运行
\n检查应用程序是否启动(默认端口为5000):
\ncd /var/www/myapp/publish\n./MyApp --urls "http://0.0.0.0:5000"\n在浏览器中打开 http://您的IP:5000 — 您应该会看到API的响应。停止该进程(按Ctrl+C)。
将Nginx配置为反向代理
\n1. 站点配置
\n为Nginx创建一个配置文件:
\nnano /etc/nginx/sites-available/myapp\n粘贴以下代码(将 your_domain_or_ip 替换为您的域名或IP):
server {\n listen 80;\n server_name your_domain_or_ip;\n\n location / {\n proxy_pass http://localhost:5000;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection keep-alive;\n proxy_set_header Host $host;\n proxy_cache_bypass $http_upgrade;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n\n2. 激活配置
\nln -s /etc/nginx/sites-available/myapp /etc/nginx