Linux部署.NET控制台应用程序

安装.NET SDK

在Linux上部署.NET应用程序之前,需要先安装.NET SDK。

对于Ubuntu/Debian

  1. 添加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
    
  2. 安装.NET SDK:

    sudo apt-get update
    sudo apt-get install -y dotnet-sdk-6.0
    

对于CentOS/RHEL

  1. 添加Microsoft包仓库:

    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    
  2. 安装.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服务器。可以使用 scprsync 工具。

使用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:

  1. 创建一个服务文件:

    sudo nano /etc/systemd/system/myconsoleapp.service
    
  2. 添加以下内容:

    [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` 表示服务将在多用户模式下启动(即系统启动时自动启动)。
    
    
    
  3. 重新加载systemd配置:

    sudo systemctl daemon-reload
    
  4. 启动服务:

    sudo systemctl start myconsoleapp
    
  5. 停止服务:

    sudo systemctl stop myconsoleapp 
    
  6. 设置开机自启动:

    sudo systemctl enable myconsoleapp
    
  7. 检查服务状态:

    sudo systemctl status myconsoleapp
    

原文阅读