服务器测评网
我们一直在努力

linux 部署 net

Linux 部署 .NET:从环境准备到生产实践

Linux 作为开源操作系统的代表,凭借其稳定性、安全性和灵活性,已成为企业级应用部署的首选平台之一,而 .NET 框架经过多年发展,已从 Windows 专属扩展为跨平台解决方案,支持在 Linux 上高效运行,本文将详细介绍在 Linux 系统中部署 .NET 应用的全流程,包括环境配置、项目发布、服务管理及性能优化等关键环节,帮助开发者顺利完成从开发到上线的过渡。

linux 部署 net

环境准备:安装 .NET 运行时与 SDK

在 Linux 上部署 .NET 应用,首先需要确保系统满足运行环境要求,主流 Linux 发行版(如 Ubuntu、CentOS、Debian 等)均支持 .NET,但具体安装步骤略有差异,以 Ubuntu 22.04 为例,可通过以下步骤完成 .NET 环境配置:

  1. 添加 Microsoft 包仓库
    .NET 官方提供了 Linux 专属的包源,需先添加微软的 GPG 密钥和仓库地址,打开终端,执行以下命令:

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb

    此步骤会自动配置 .NET 官方源,后续可通过包管理器直接安装 .NET 组件。

  2. 安装 .NET SDK 或运行时

    • SDK(软件开发工具包):包含编译、调试工具,适用于开发环境,安装命令:
      sudo apt update && sudo apt install dotnet-sdk-8.0
    • 运行时(Runtime):仅支持已编译应用的运行,适用于生产环境,例如安装 ASP.NET Core 运行时:
      sudo apt install aspnetcore-runtime-8.0

      安装完成后,通过 dotnet --version 验证版本信息,确认环境配置成功。

项目发布:生成跨平台部署包

. NET 应用在 Linux 部署前,需将源代码编译为独立的可执行文件或框架依赖的部署包,根据部署需求,可选择两种发布模式:

  1. 框架依赖部署(Framework-Dependent Deployment, FDD)
    此模式下,生成的可执行文件需依赖目标系统已安装的 .NET 运行时,文件体积较小,在项目目录下执行:

    dotnet publish -c Release -o ./publish

    参数说明:-c Release 表示发布Release版本,-o ./publish 指定输出目录,生成的 publish 文件夹包含应用启动文件(如 yourapp.dll)和依赖项,可直接上传至 Linux 服务器。

  2. 自包含部署(Self-Contained Deployment, SCD)
    自包含部署会将 .NET 运行时一同打包到应用中,无需目标系统预装运行时,但文件体积较大,需指定目标运行时:

    linux 部署 net

    dotnet publish -c Release -r linux-x64 -o ./publish-selfcontained

    -r linux-x64 表示针对 Linux 64位系统生成自包含包,此模式适用于无法控制服务器运行时的场景,如容器化部署。

服务器部署:配置运行环境

将发布包上传至 Linux 服务器后,需进行基础环境配置,确保应用能够正常运行,以下以 Nginx 反向代理和 Systemd 服务管理为例展开说明:

  1. 上传发布包与目录权限
    通过 scprsync 工具将本地 publish 文件夹上传至服务器,

    scp -r ./publish user@server:/var/www/yourapp

    登录服务器后,设置目录权限,确保 .NET 应用有读写权限:

    sudo chown -R www-data:www-data /var/www/yourapp
    sudo chmod -R 755 /var/www/yourapp
  2. 配置 Nginx 反向代理
    .NET 应用默认监听 HTTP 端口(如 5000、5001),生产环境中需通过 Nginx 反向代理实现负载均衡和 HTTPS 加密,编辑 Nginx 配置文件 /etc/nginx/sites-available/yourapp

    server {
        listen 80;
        server_name yourdomain.com;
        location / {
            proxy_pass         http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }

    启用配置并测试 Nginx 语法:

    sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx
  3. 使用 Systemd 管理服务
    为确保应用开机自启、崩溃重启,需创建 Systemd 服务单元文件,编辑 /etc/systemd/system/yourapp.service

    [Unit]
    Description=Your .NET Application
    After=network.target
    [Service]
    WorkingDirectory=/var/www/yourapp
    ExecStart=/usr/bin/dotnet /var/www/yourapp/yourapp.dll
    Restart=always
    RestartSec=10
    User=www-data
    Group=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    [Install]
    WantedBy=multi-user.target

    启动服务并设置开机自启:

    sudo systemctl daemon-reload
    sudo systemctl start yourapp
    sudo systemctl enable yourapp

    通过 systemctl status yourapp 查看服务运行状态,日志可通过 journalctl -u yourapp 查询。

    linux 部署 net

性能优化与监控

生产环境中,需对 .NET 应用进行性能调优和监控,确保稳定运行。

  1. 启用 HTTPS 与 HTTP/2
    在 Nginx 配置中配置 SSL 证书(如 Let’s Encrypt),并启用 HTTP/2 以提升传输效率:

    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
  2. 调整 .NET 配置
    appsettings.Production.json 中优化线程池、内存限制等参数:

    {
      "Kestrel": {
        "Endpoints": {
          "Https": {
            "Url": "https://localhost:5001",
            "SslProtocols": [ "Tls12", "Tls13" ]
          }
        }
      },
      "ThreadPool": {
        "MinThreads": 100,
        "MaxThreads": 1000
      }
    }
  3. 监控与日志

    • Prometheus + Grafana:通过 prometheus-net 导出应用指标,结合 Grafana 可视化监控 CPU、内存、请求量等数据。
    • 日志管理:使用 Serilog 将日志输出至文件或集中式日志系统(如 ELK Stack),并配置日志轮转避免磁盘占用过高。

容器化部署:Docker 与 Kubernetes

为提升部署效率和环境一致性,可采用 Docker 容器化部署 .NET 应用,创建 Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["yourapp.csproj", "."]
RUN dotnet restore "./yourapp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "yourapp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "yourapp.csproj" -c Release -o /app/publish -p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "yourapp.dll"]

构建镜像并运行:

docker build -t yourapp:latest .
docker run -d -p 8080:80 --name yourapp-container yourapp:latest

对于大规模部署,可通过 Kubernetes 编排容器,实现自动扩缩容、故障恢复等功能。

在 Linux 上部署 .NET 应用,需综合考虑环境配置、发布模式、服务管理及性能优化等多个环节,通过合理选择部署方式(如传统服务器或容器化)、配置反向代理与监控体系,可有效提升应用的稳定性和可维护性,随着 .NET 生态的不断完善,其在 Linux 平台上的表现已日趋成熟,为开发者提供了高效、可靠的跨平台解决方案,掌握这些技能,不仅能满足企业对多平台部署的需求,更能为应用的长期运维奠定坚实基础。

赞(0)
未经允许不得转载:好主机测评网 » linux 部署 net