在VPS上部署C#应用程序:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言

开发一个C#应用程序只是成功了一半。要让您的项目能够被互联网用户访问,必须将其部署到服务器上。虚拟专用服务器(VPS)是托管.NET应用程序的理想解决方案,因为它让您能够完全控制运行环境,并可以根据特定需求进行配置。

在本文中,我们将逐步讲解如何将C#应用程序(ASP.NET Core)完整部署到运行Linux(Ubuntu 22.04)的VPS上。您将学习如何准备服务器、安装必要软件、发布应用程序以及配置Web服务器以支持其运行。所有步骤均附有代码示例和命令。



1. 准备VPS并安装.NET SDK

第一步是准备服务器。我们将使用Ubuntu 22.04 LTS,因为它是最流行且最稳定的服务器操作系统之一。通过SSH连接到VPS:

ssh user@your-server-ip

登录后,更新软件包列表并安装必要的依赖项:

sudo apt updatesudo apt upgrade -ysudo apt install wget apt-transport-https software-properties-common -y

现在添加Microsoft存储库并安装.NET SDK。对于.NET 8,请运行:

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debsudo apt updatesudo apt install dotnet-sdk-8.0 -y

验证安装:

dotnet --version

如果看到版本号(例如8.0.100),则表明安装正确。

重要提示: 如果您的应用程序使用数据库(例如PostgreSQL或SQLite),请安装相应的软件包。对于PostgreSQL:

sudo apt install postgresql postgresql-contrib -y


2. 发布并将应用程序上传到服务器

现在让我们准备要部署的应用程序本身。在您的本地计算机(进行开发的地方)上,在项目根目录打开终端,并以Release模式发布:

dotnet publish -c Release -o ./publish

此命令将创建一个publish文件夹,其中包含运行应用程序所需的所有文件。现在您需要将此文件夹上传到VPS。使用SCP或SFTP。SCP示例:

scp -r ./publish user@your-server-ip:/home/user/myapp

其中myapp是您的应用程序在服务器上存储的文件夹名称。

上传后,连接到服务器并将文件移动到更合适的位置,例如/var/www/myapp:

sudo mkdir -p /var/www/myappsudo cp -r /home/user/myapp/* /var/www/myapp/

不要忘记设置文件夹的正确权限:

sudo chown -R www-data:www-data /var/www/myappsudo chmod -R 755 /var/www/myapp


3. 配置systemd以实现自动启动

为确保您的应用程序在系统启动时自动运行,并在出现故障时重新启动,我们将创建一个systemd服务。创建一个配置文件:

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

插入以下内容(将路径和用户名替换为您自己的):

[Unit]Description=My ASP.NET Core ApplicationAfter=network.target

[Service]WorkingDirectory=/var/www/myappExecStart=/usr/bin/dotnet /var/www/myapp/YourApp.dllRestart=alwaysRestartSec=10KillSignal=SIGINTSyslogIdentifier=myappUser=www-dataEnvironment=ASPNETCORE_ENVIRONMENT=ProductionEnvironment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]WantedBy=multi-user.target

保存文件(Ctrl+O,然后回车)并退出(Ctrl+X)。现在重新加载systemd并启动服务:

sudo systemctl daemon-reloadsudo systemctl start myappsudo systemctl enable myapp

检查状态:

博客

书籍推荐