上一篇
NET部署Linux快速教程,或更精准的版本,,NET应用Linux部署指南
- Linux
- 2025-06-13
- 4388
.NET应用可通过.NET CLI发布为框架依赖或独立部署包,使用dotnet publish命令生成Linux可执行文件或依赖包,部署时需确保目标Linux系统安装.NET运行时(框架依赖部署)或直接运行自包含应用(独立部署),常用方式包括SCP传输文件、配置Nginx反向代理及守护进程管理。
.NET 应用程序部署到 Linux 的完整指南
将.NET应用程序部署到Linux环境是现代化开发的关键实践,微软官方对.NET Core及更高版本的跨平台支持,使这一过程高效可靠,以下是经行业验证的部署流程:
环境准备(必备基础)
-
Linux 服务器要求
- 支持的系统:Ubuntu 20.04+/CentOS 7+/Debian 10+
- 硬件:至少2核CPU、2GB内存(根据应用负载调整)
- 开放端口:80 (HTTP)、443 (HTTPS)、应用端口(如5000)
-
安装 .NET 运行时/SDK
# Ubuntu 示例(其他系统参考微软文档) wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt update sudo apt install -y aspnetcore-runtime-7.0 # 根据版本调整
发布应用程序
-
本地项目发布
dotnet publish -c Release -r linux-x64 --self-contained false # 推荐框架依赖部署
--self-contained false
:减少部署包体积,依赖服务器运行时- 输出路径:
bin/Release/net7.0/linux-x64/publish
-
传输文件到服务器
使用SCP或SFTP上传发布文件夹:scp -r publish/* user@yourserver:/var/www/yourapp
Linux 服务器配置
方案1:Nginx + Kestrel 反向代理(生产环境推荐)
-
创建服务文件
/etc/systemd/system/kestrel-yourapp.service
:[Unit] Description=Your .NET App running on Kestrel [Service] WorkingDirectory=/var/www/yourapp ExecStart=/usr/bin/dotnet /var/www/yourapp/YourApp.dll Restart=always RestartSec=10 SyslogIdentifier=dotnet-yourapp User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target
-
启动服务
sudo systemctl enable kestrel-yourapp sudo systemctl start kestrel-yourapp
-
配置 Nginx 反向代理
/etc/nginx/sites-available/yourapp
:server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:5000; # 匹配Kestrel端口 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; } }
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
方案2:独立部署(无需安装运行时)
发布时添加参数:
dotnet publish -c Release -r linux-x64 --self-contained true
- 注意:部署包体积较大,但环境兼容性更强
安全加固与优化
-
防火墙配置
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw reload
-
SSL 证书(Let’s Encrypt)
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com
-
进程监控
sudo systemctl status kestrel-yourapp # 查看服务状态 journalctl -u kestrel-yourapp --since "1 hour ago" # 日志排查
维护与更新
-
自动重启策略
通过systemd
的Restart=always
实现崩溃恢复 -
持续部署(CD)
推荐工具:- GitHub Actions / GitLab CI
- Jenkins + SSH插件
- 容器化部署(Docker + Kubernetes)
-
性能监控
dotnet-counters
实时指标- Prometheus + Grafana 可视化
常见问题排查
- 502 Bad Gateway:检查Kestrel是否运行 (
systemctl status
),端口是否匹配 - 依赖缺失:运行
ldd YourApp.dll
检查动态链接库 - 权限错误:确保
/var/www/yourapp
目录属主为服务用户(如www-data
)
为什么选择 .NET on Linux?
- 官方支持:微软提供长期支持(LTS)版本
- 性能优势:TechEmpower基准测试显示ASP.NET Core领先主流框架
- 成本效益:免费开源,降低服务器授权费用
引用说明基于微软官方部署文档、Linux基金会服务器管理指南及行业最佳实践,技术细节参考:
- 微软.NET Linux部署文档
- Nginx官方代理配置指南
- Linux systemd服务管理手册
通过遵循此指南,您将获得符合企业级标准的部署方案,兼顾安全性与可维护性,建议定期检查微软更新日志以获取最新优化建议。