一、Ubuntu环境准备与.NET Core运行时安装
在Ubuntu系统上部署.NET Core应用的首要步骤是配置正确的运行时环境。微软官方为Ubuntu提供了APT源支持,通过执行wget
命令获取GPG密钥并添加软件仓库后,即可使用apt-get install dotnet-sdk-6.0
安装最新稳定版的SDK。值得注意的是,生产环境建议安装Runtime-only版本以减少磁盘占用,开发环境则需完整SDK包含编译工具链。安装完成后,通过dotnet --info
验证版本信息,同时检查/usr/share/dotnet
目录下的文件结构是否完整。
二、应用程序发布包构建与传输策略
使用dotnet publish -c Release -r ubuntu.20.04-x64
命令生成独立部署包时,需特别注意目标运行时标识符(RID)的准确性。对于依赖原生库的应用,应添加--self-contained true
参数确保所有依赖项打包。通过SCP或SFTP传输发布包至Ubuntu服务器时,建议将应用程序目录置于/var/www/
路径下并设置chmod 755
权限。如何优化超过1GB的大型应用部署?可采用分卷压缩传输或容器镜像预构建方案提升效率。
三、系统服务配置与进程管理优化
通过systemd实现.NET Core应用的守护进程管理是生产级部署的最佳实践。创建/etc/systemd/system/kestrel.service
配置文件时,需明确定义WorkingDirectory
、ExecStart
路径及Environment
变量。典型配置包含内存限制(MemoryHigh=2G
)、自动重启策略(Restart=always
)以及日志重定向到syslog。使用journalctl -u kestrel -f
监控实时日志时,可通过ASPNETCORE_ENVIRONMENT=Production
环境变量切换运行模式。
四、网络层配置与HTTPS安全加固
Kestrel服务器直接暴露在公网存在安全风险,建议前置Nginx反向代理处理SSL终端。在/etc/nginx/sites-available/default
配置中,需设置proxy_pass http://localhost:5000
转发规则,并配置HTTP/2支持与HSTS头部。Let's Encrypt证书通过certbot自动续期时,注意修改.well-known
路径的访问权限。对于高并发场景,应调整ulimit -n
提高文件描述符限制,并在Nginx中启用keepalive_timeout 65
保持长连接。
五、性能监控与故障排查实践
部署dotnet-counters
和dotnet-trace
工具集可实现实时性能诊断。通过dotnet-counters monitor --process-id 1 System.Runtime
命令监控GC频率与线程池状态,当发现内存泄漏时可使用dotnet-dump collect
捕获堆快照。在/var/log/syslog
中筛选Microsoft.AspNetCore
日志时,配合FailFast
错误代码能快速定位崩溃原因。针对CPU飙高问题,perf
工具生成的火焰图能直观显示热点调用栈。
六、持续交付与自动化部署方案
结合GitHub Actions或Azure DevOps构建CI/CD流水线时,需在Ubuntu runner中编写部署脚本处理服务重启与回滚。使用Ansible playbook可实现多服务器批量部署,关键步骤包括:校验运行时版本、停止现有服务、解压新版本包、执行数据库迁移脚本。对于蓝绿部署场景,通过iptables
规则切换流量前,务必用curl http://localhost:5000/health
完成健康检查。容器化部署时,建议基于mcr.microsoft.com/dotnet/aspnet:6.0
镜像构建,并配置HEALTHCHECK
指令。