安装.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