而 Linux,作为服务器操作系统的佼佼者,以其稳定性、安全性和丰富的开源生态,为 .NET Core 应用提供了理想的运行环境
本文将深入探讨如何在 Linux 系统上高效部署 .NET Core 应用,从环境准备到应用发布,再到性能优化与监控,为您提供一份详尽且具说服力的指南
一、前期准备:环境配置 1. 选择合适的 Linux 发行版 不同的 Linux 发行版各有特色,对于 .NET Core 应用而言,常见的选择包括 Ubuntu、CentOS 和 Debian 等
Ubuntu 以其友好的用户界面和丰富的软件仓库成为许多开发者的首选;CentOS 则以其稳定性和企业级支持著称;Debian 则以其纯粹的开源理念和稳定的发行周期受到青睐
根据您的具体需求选择合适的发行版,是部署的第一步
2. 安装 .NET SDK 和运行时 部署 .NET Core 应用前,需确保目标服务器上已安装相应版本的 .NET SDK(用于编译和构建应用)和 .NET 运行时(用于运行已编译的应用)
微软官方提供了多种安装方法,包括直接下载二进制包、使用包管理器(如 apt、yum)或通过 dotnet-install 脚本
以 Ubuntu 为例,使用以下命令安装最新稳定版的 .NET SDK: wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh chmod +x dotnet-install.sh ./dotnet-install.sh --channel LTS --runtime aspnetcore 上述命令将安装包含 ASP.NET Core 运行时的最新长期支持(LTS)版本的 .NET
3. 配置防火墙与安全组 在开放网络环境中部署应用时,合理配置防火墙规则至关重要
确保仅允许必要的端口(如 HTTP/HTTPS 默认的 80/443 端口)对外开放,并限制来源 IP 地址,以提高系统安全性
二、应用构建与发布 1. 开发与测试 在本地开发环境中,使用 Visual Studio Code 或 JetBrains Rider 等 IDE 开发并测试您的 .NET Core 应用
确保所有功能按预期工作,并且通过了单元测试和集成测试
2. 发布应用 使用 .NET CLI 工具发布应用,生成可在生产环境中运行的自包含或框架依赖的二进制文件
自包含部署包含所有必要的运行时组件,适合目标机器未安装 .NET 运行时的场景;框架依赖部署则依赖于目标机器已安装相应版本的 .NET 运行时
发布命令示例(自包含): dotnet publish -c Release -r linux-x64 --self-contained -o ./publish 上述命令将在 `./publish`目录下生成适用于 Linux x64 架构的自包含应用
3. 传输文件至服务器 使用 SCP(Secure Copy Protocol)或 SFTP(SSH File Transfer Protocol)等工具,将发布后的文件传输到目标 Linux 服务器
例如,使用 SCP 命令: scp -r ./publish/ user@remote_server:/path/to/deploy/ 三、应用部署与配置 1. 设置反向代理(如 Nginx) 为了提高应用的性能和安全性,通常会使用 Nginx 作为反向代理服务器,处理静态文件服务、负载均衡和 SSL/TLS 加密等任务
安装 Nginx 后,配置相应的站点配置文件,指向您的 .NET Core 应用目录
Nginx 配置示例: server { listen 80; server_nameyour_domain.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; } # SSL configuration(if using HTTPS) # listen 443 ssl; # ... } 2. 配置服务管理(如 systemd) 为确保 .NET Core 应用在服务器重启后自动启动,可以使用 systemd 创建服务单元文件
编写服务文件(如 `/etc/systemd/system/myapp.service`),指定应用的启动命令、工作目录和日志输出等
systemd 服务文件示例: 【Unit】 Description=My .NET Core App 【Service】 WorkingDirectory=/path/to/deploy/ ExecStart=/path/to/deploy/myapp Restart=always User=nobody Group=nogroup Envi