安装.NET SDK
在Linux上部署.NET应用程序之前,需要先安装.NET SDK。
对于Ubuntu/Debian
添加Microsoft包仓库:
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 rm packages-microsoft-prod.deb
安装.NET SDK:
sudo apt-get update sudo apt-get install -y dotnet-sdk-6.0
对于CentOS/RHEL
添加Microsoft包仓库:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安装.NET SDK:
sudo yum install -y dotnet-sdk-6.0
验证安装:
dotnet --version
如果安装成功,会显示.NET SDK的版本号。
发布.NET控制台应用程序
在开发机器上,将.NET控制台应用程序发布为 独立部署(Self-Contained)或 框架依赖部署(Framework-Dependent)。
框架依赖部署(推荐):
dotnet publish -c Release -r linux-x64 --self-contained false
独立部署(包含运行时):
dotnet publish -c Release -r linux-x64 --self-contained true
-c Release
:指定发布配置为Release。-r linux-x64
:指定目标运行时为Linux 64位。--self-contained true
:发布为独立部署(包含.NET运行时)。--self-contained false
:发布为框架依赖部署(需要目标机器安装.NET运行时)。
发布完成后,输出文件会保存在bin/Release/net6.0/linux-x64/publish目录下。
将发布文件复制到Linux服务器
将publish目录下的所有文件复制到Linux服务器。可以使用 scp
或 rsync
工具。
使用scp:
scp -r bin/Release/net6.0/linux-x64/publish/* user@your-linux-server:/path/to/deploy
使用rsync:
rsync -avz bin/Release/net6.0/linux-x64/publish/ user@your-linux-server:/path/to/deploy
在Linux上运行.NET应用程序
登录到Linux服务器,导航到部署目录并运行应用程序。
导航到部署目录:
cd /path/to/deploy
运行应用程序:
./YourAppName
如果发布为框架依赖部署,请确保Linux服务器上已安装.NET运行时:
dotnet YourAppName.dll
配置后台运行(可选)
如果希望应用程序在后台运行,可以使用nohup或systemd。
使用nohup:
nohup ./YourAppName > output.log 2>&1 &
使用systemd:
创建一个服务文件:
sudo nano /etc/systemd/system/myconsoleapp.service
添加以下内容:
[Unit] # 单元部分的配置,用于描述服务和定义依赖关系。 Description=Your .NET App # 服务的描述信息,用于标识服务的用途。 [Service] # 服务部分的配置,用于定义服务的运行行为。 WorkingDirectory=/path/to/deploy # 设置服务的工作目录。应用程序运行时,所有相对路径都基于此目录。 # 例如,如果应用程序需要读取配置文件,路径应相对于此目录。 ExecStart=/path/to/deploy/YourAppName # 指定启动服务的命令。 # 对于 .NET 应用程序,通常使用 `/usr/bin/dotnet /path/to/deploy/YourApp.dll`。 # 如果发布为独立部署(Self-Contained),可以直接运行可执行文件。 Restart=always # 定义服务的重启策略。 # - `always`:无论服务如何退出,都会自动重启。 # - `on-failure`:仅在服务非正常退出时重启。 # - `no`:不自动重启。 RestartSec=10 # 定义服务重启前的等待时间(单位为秒)。 # 例如,设置为 10 表示服务退出后等待 10 秒再重启。 SyslogIdentifier=yourapp # 设置服务在系统日志中的标识符。 # 日志中会显示此标识符,便于区分不同服务的日志。 User=www-data # 指定运行服务的用户。 # 通常使用非 root 用户(如 `www-data`)以提高安全性。 Environment=ASPNETCORE_ENVIRONMENT=Production # 设置环境变量。 # 对于 .NET 应用程序,`ASPNETCORE_ENVIRONMENT` 用于指定运行环境 #(如 `Production`、`Development`)。 [Install] # 安装部分的配置,用于定义服务的启动行为。 WantedBy=multi-user.target # 指定服务的启动目标。 # `multi-user.target` 表示服务将在多用户模式下启动(即系统启动时自动启动)。
重新加载systemd配置:
sudo systemctl daemon-reload
启动服务:
sudo systemctl start myconsoleapp
停止服务:
sudo systemctl stop myconsoleapp
设置开机自启动:
sudo systemctl enable myconsoleapp
检查服务状态:
sudo systemctl status myconsoleapp