跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

C#怎么实现Linux部署ASP.NET Core C#如何在Linux服务器上部署运行ASP.NET Core应用程序【部署】

ASP.NET Core 应用在 Linux 上无法运行,主因是未安装匹配的 dotnet-runtime;需用 apt/dnf 安装对应版本,通过 systemd 管理服务,配置 Environment 传敏感配置,Nginx 反代需调优超时与哈希桶大小,并严格校验文件权限。 ASP.NET Core 应用在 Linux 上跑不起来,十有八九是没装
dotnet-runtime
Linux 服务器默认没有 .NET 运行时,
dotnet publish
出来的文件不能直接双击运行——它不是“绿色版”。你得先确认系统里装的是匹配的
dotnet-runtime
,而不是 SDK(开发用的)或旧版本。 常见错误现象:
bash: dotnet: command not found
或
Failed to load /libhostfxr.so
;这说明
dotnet
命令根本不存在,或版本不兼容。 用
dotnet --list-runtimes
查已装运行时;若报错,就先去 .NET 官网下载对应版本的 runtime(非 SDK) 推荐装
dotnet-runtime-8.0
(或你项目实际用的版本),别装
aspnetcore-runtime-8.0
单独包——它依赖
dotnet-runtime
,漏装会启动失败 Ubuntu/Debian 用
apt install dotnet-runtime-8.0
;CentOS/RHEL 用
dnf install dotnet-runtime-8.0
;别用 snap 或第三方源,容易版本错乱 用
systemd
管服务,别用
nohup dotnet xxx.dll &
手动起进程看着简单,但一断 SSH、一重启机器、一出异常,应用就没了。Linux 生产环境必须交由
systemd
管理生命周期。 使用场景:需要开机自启、崩溃自动重启、日志统一收集、限制内存/CPU、按用户权限运行。 写一个
/etc/systemd/system/myapp.service
,关键项不能少:
WorkingDirectory
(必须设,否则读不到
appsettings.json
)、
User
(别用 root)、
Restart=always
ExecStart
要写全路径:
/usr/bin/dotnet /var/www/myapp/MyApp.dll
;别省略
/usr/bin/dotnet
,否则
systemd
找不到命令 改完记得
sudo systemctl daemon-reload
,再
sudo systemctl enable myapp
(开机自启)和
sudo systemctl start myapp
appsettings.Production.json
里的连接字符串、密钥,在 Linux 上别硬编码 Windows 开发时可能把数据库密码写死在
appsettings.Production.json
里,传到 Linux 服务器就等于把密码明文暴露在文件系统中——运维、审计、备份都可能看到。 C知道 CSDN推出的一款AI技术问答工具 下载 性能/兼容性影响:硬编码不光是安全问题,还会导致多环境无法复用同一份发布包。 用环境变量替代:在
systemd
service 文件里加
Environment=ConnectionStrings__DefaultConnection=...
,然后代码里靠
IConfiguration
自动绑定 或者用
dotnet run --environment Production --urls http://0.0.0.0:5000
启动时传参,但生产环境更推荐 systemd + Environment 千万别用
dotnet user-jwts
或
dotnet dev-certs
在服务器上生成证书——它们是开发工具,Linux 生产应配 Nginx 反向代理 + Let's Encrypt Nginx 反向代理 502 错误,大概率是
server_names_hash_bucket_size
或 upstream 超时 ASP.NET Core 默认监听
http://localhost:5000
,Nginx 做反代后出现 502,不是应用挂了,就是 Nginx 没连上或等不及。 常见错误现象:
connect() failed (111: Connection refused)
(端口没开/应用没启)、
upstream timed out (110: Connection timed out)
(超时太短)。 检查
upstream
地址是否拼错,比如写成
127.0.0.1:5001
但应用实际监听
:5000
在
http{}
块里加
server_names_hash_bucket_size 64;
,否则域名稍长(如带下划线或长子域)就会报
could not build the server_names_hash
加超时配置:
proxy_read_timeout 300;
、
proxy_send_timeout 300;
,避免大文件上传或长轮询被中断 最常被忽略的是权限:
systemd
服务指定的
User
必须对
WorkingDirectory
和
.dll
文件有读+执行权,对日志目录有写权。chown 错一个目录,
journalctl -u myapp
就只显示 “Started MyApp” 然后静音。

相关文章