Skip to content

Linux 环境

独立部署

安装 .NET 环境

参考 在 Linux 上安装 .NET,当前示例使用 Ubuntu

.NET 在 Ubuntu 包管理器源以及 Microsoft 包存储库中可用。 但是,应仅使用其中一种来安装 .NET。 Microsoft 建议使用 Ubuntu 包管理器源。

  1. 添加存储库

    bash
    sudo add-apt-repository ppa:dotnet/backports

    添加存储库

  2. 安装 SDK 或 运行时

    如果安装 .NET SDK,则无需安装相应的运行时

    bash
    sudo apt-get update && sudo apt-get install -y dotnet-sdk-9.0

    安装dotnet sdk

  3. 验证安装

    通过 CLI 命令查看 dotnet 信息

    bash
    dotnet --info

    查看 dotnet 信息

发布 Linux 版本程序

也可将源码上传至部署环境再进行发布,前提是安装了 .NET SDK 而非运行时

  1. 发布程序

    发布Linux版本程序

  2. 上传至部署环境

    使用 FTP 工具将发布后的文件上传至部署环境

    使用FTP将文件上传至部署环境

运行程序

来到上传的文件目录,使用 dotnet CLI 命令启动程序

bash
dotnet Westcore.BCS.WebApi.dll --urls "http://*:5556"

运行程序

可以看见程序已正确启动,启动端口为指定参数; 默认运行环境为 Production,可使用 --environment Devlopment 指定为开发环境

  • --urls 为程序指定启动地址,* 为指定端口的 “任意” IP地址
  • Westcore.BCS.WebApi.dll 以实际启动程序名称为准

配置自启

参考 将 ASP.NET Core 应用程序配置为自动启动

  1. 创建 .service 扩展名服务文件,将服务文件放入 /etc/systemd/system/ 文件夹

    • WorkingDirectory 是发布应用程序的目录。
    • ExecStart 是启动应用程序的实际命令,/usr/bin/dotnet 为 dotnet 可执行文件所在路径。
    • Restart=always 是自我解释的。 如果由于某种原因(无论是手动还是由于崩溃)而停止,则始终会启动此过程。
    • RestartSec=10 也是自我解释的。 进程停止后,将在 10 秒后启动。
    • SyslogIdentifier 很重要。 这意味着“系统日志标识符”。 有关守护程序的信息在系统日志中记录在此名称下。 还可以使用此标识符查找进程的 PID。
    • User 是管理服务的用户。 它应存在于系统中,并具有应用程序文件的相应所有权。
    • 可以在服务文件中设置任意数量的环境变量。

    用户 www-data 是系统中的特殊用户。 可以使用此帐户。 或者创建一个新用户。 但是,如果不想创建另一个 Linux 用户,则可以使用 www-data 。

    ini
    [Unit]
    Description=Backend applications running on Ubuntu
    
    [Service]
    WorkingDirectory=/var/firstwebapp/
    ExecStart=/usr/bin/dotnet /var/firstwebapp/AspNetCoreDemo.dll --urls "http://*:5556"
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    KillSignal=SIGINT
    SyslogIdentifier=backend-api
    User=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Development
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    
    [Install]
    WantedBy=multi-user.target
  2. 运行服务命令

    bash
    systemctl start 自定义服务名称.service

    运行服务

    查看服务运行状态

    bash
    systemctl status 自定义服务名称.service

    服务已正确启用

  3. 启用服务 Enabled 表示在服务器启动后自动启动

    bash
    systemctl enable 自定义服务名称.service

    启用服务

    再次查看状态,服务标识为 enabled

    服务成功启用

  4. 测试自动重启

    PID 进程ID,运行命令 systemctl status myfirstwebapp.service 查看

    查看进程ID

    bash
    sudo kill -9 <PID>

    结束服务

    服务配置为10秒自启,预计它会在 10 秒内再次开始;查看信息,服务已按预期启动

    自启成功

Docker 容器独立部署

程序镜像

本地编译

  1. 将代码上传至部署环境

    也可使用源代码托管工具进行拉取

    上传代码至部署环境

  2. 使用 Dockerfile 编译

    账户名及仓库名请以实际为准,镜像标签自定义命名即可

    bash
    docker build -t 账户名/仓库名:backend.api .

    编译镜像

  3. 编译完成

    镜像编译完成

    查看镜像列表

    查看镜像列表

远程仓库

  1. 推送镜像

    需确保账户中存在此仓库

    仓库信息

    bash
    docker push 账户名/仓库名:镜像标签

    推送镜像

  2. 登录账户

    由于是私有库,所以需要登录

    bash
    docker login -u <username>

    登录Docker账户

  3. 拉取镜像

    bash
    docker pull nathanhao/repo:backend.v1

    拉取镜像

运行容器

Windows 下使用 CLI 运行容器 操作一致

  1. 执行命令

    bash
    docker run -it -d --name website-backend --restart always -p 5555:8080 -v /var/www:/app/wwwroot -e ASPNETCORE_ENVIRONMENT=Development -e TZ=Asia/Shanghai nathanhao/repo:backend.api

    运行容器

  2. 查看容器日志

    bash
    sudo docker logs 47i

    容器日志

    程序正常运行

杂项

Linux 时区设置

  1. bash
    timedatectl set-timezone Asia/Shanghai
  2. bash
    export TZ=Asia/Shanghai