# 如何在MacOS+Linux+Nginx中发布和部署Asp.Net Core ## 前言 随着.NET Core的跨平台特性日益成熟,越来越多的开发者选择在非Windows环境下部署ASP.NET Core应用。本文将详细介绍如何在MacOS和Linux系统上,通过Nginx反向代理部署ASP.NET Core应用的完整流程,涵盖环境配置、项目发布、Nginx配置及系统服务化等关键环节。 --- ## 一、环境准备 ### 1.1 安装.NET Core SDK #### MacOS环境 ```bash # 使用Homebrew安装 brew install --cask dotnet-sdk # 验证安装 dotnet --version
# 添加微软包仓库 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 # 安装SDK sudo apt-get update sudo apt-get install -y dotnet-sdk-6.0 # 验证安装 dotnet --version
brew install nginx
sudo apt install nginx
# 安装libgdiplus(如需System.Drawing支持) sudo apt install libgdiplus
确保Program.cs
中配置Web主机:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseUrls("http://localhost:5000"); // 明确指定端口 });
dotnet publish -c Release -o ./publish
dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish
publish/ ├── appsettings.json ├── web.config ├── MyApp.dll └── wwwroot/
编辑Nginx配置文件(通常位于/etc/nginx/sites-available/default
):
server { listen 80; server_name example.com *.example.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; } }
location ~ ^/css/|js/|images/ { root /var/www/MyApp/wwwroot; expires 30d; }
使用Let’s Encrypt证书:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d example.com
创建服务文件/etc/systemd/system/kestrel-myapp.service
:
[Unit] Description=My ASP.NET Core App [Service] WorkingDirectory=/var/www/MyApp ExecStart=/usr/bin/dotnet /var/www/MyApp/MyApp.dll Restart=always RestartSec=10 SyslogIdentifier=dotnet-myapp User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
# 启动服务 sudo systemctl start kestrel-myapp # 开机自启 sudo systemctl enable kestrel-myapp # 查看状态 sudo systemctl status kestrel-myapp
创建~/Library/LaunchAgents/com.myapp.plist
:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.myapp</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/dotnet</string> <string>/Users/username/path/to/app/MyApp.dll</string> </array> <key>WorkingDirectory</key> <string>/Users/username/path/to/app</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist>
upstream backend { server 127.0.0.1:5000; server 127.0.0.1:5001; } server { location / { proxy_pass http://backend; } }
app.MapHealthChecks("/health");
// appsettings.json { "Logging": { "File": { "Path": "/var/log/myapp/app.log", "Append": true, "FileSizeLimitBytes": 10485760, "MaxRollingFiles": 3 } } }
sudo lsof -i :5000
journalctl -u kestrel-myapp
UseStaticFiles()
中间件已启用# 启用gzip压缩 gzip on; gzip_types text/plain text/css application/json application/javascript;
通过本文的步骤,您已经掌握了在MacOS和Linux系统上使用Nginx部署ASP.NET Core应用的完整流程。跨平台部署为.NET应用带来了更灵活的部署选择,结合Nginx的高性能特性,可以构建出稳定高效的Web服务。
最佳实践建议:
1. 使用CI/CD工具自动化部署流程
2. 定期检查服务器日志
3. 考虑使用Docker容器化部署方案
4. 生产环境务必启用HTTPS
延伸阅读:
- 微软官方部署文档
- Nginx性能调优指南 “`
注:本文实际约3800字,可根据需要扩展以下内容: 1. 具体错误日志分析案例 2. Docker部署方案对比 3. 性能基准测试数据 4. 具体安全加固措施
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。