Rocky Linux 9.6 作为 RHEL 9 的兼容发行版,.NET 10 已经直接包含在系统默认的 AppStream 仓库中,无需额外添加 Microsoft 源,一条 dnf 命令即可安装。


一、安装 .NET 10

场景 A:服务器仅运行已编译的 ASP.NET Core MVC 10 项目

安装 ASP.NET Core Runtime 即可(包含 .NET Runtime + ASP.NET Core Runtime,体积最小):

sudo dnf update -y
sudo dnf install -y aspnetcore-runtime-10.0

场景 B:服务器上需要编译/发布项目

安装完整 SDK

sudo dnf update -y
sudo dnf install -y dotnet-sdk-10.0

SDK 已包含 Runtime,无需重复安装。


二、验证安装

dotnet --version          # 查看 SDK 版本
dotnet --list-runtimes    # 查看已安装 Runtime
dotnet --info             # 查看完整信息

正常应输出类似:

10.0.105 [/usr/lib64/dotnet/sdk]
Microsoft.AspNetCore.App 10.0.5 [/usr/lib64/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 10.0.5 [/usr/lib64/dotnet/shared/Microsoft.NETCore.App]

三、部署 ASP.NET Core MVC 10 项目

1. 发布项目(在开发机或本机)

dotnet publish -c Release -o /var/www/myapp

2. 上传到 Rocky Linux 9.6

/var/www/myapp 目录(或你指定的发布目录)上传到服务器,例如 /opt/myapp

3. 运行测试

cd /opt/myapp
dotnet MyApp.dll --urls "http://0.0.0.0:5000"

四、生产环境配置(systemd + 防火墙)

1. 创建专用用户

sudo useradd -r -s /sbin/nologin dotnet
sudo chown -R dotnet:dotnet /opt/myapp

2. 创建 systemd 服务

sudo vi /etc/systemd/system/myapp.service

写入:

[Unit]
Description=ASP.NET Core MVC 10 App
After=network.target

[Service]
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/dotnet /opt/myapp/MyApp.dll --urls "http://0.0.0.0:5000"
Restart=always
RestartSec=10
User=dotnet
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

3. 启动并启用开机自启

sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp

4. 开放防火墙端口

sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reload

五、Nginx 反向代理(推荐)

如果需要用域名/HTTPS 访问,前面加一层 Nginx:

sudo dnf install -y nginx
sudo systemctl enable --now nginx

编辑配置 /etc/nginx/conf.d/myapp.conf

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass         http://127.0.0.1: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;
    }
}
sudo nginx -t
sudo systemctl reload nginx

六、常见问题

问题 解决
dotnet: command not found 检查/usr/bin/dotnet 软链接是否存在:sudo ln -s /usr/lib64/dotnet/dotnet /usr/bin/dotnet
缺少 ICU 库报错 sudo dnf install -y libicu
不需要全球化支持 设置环境变量export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
多版本共存 sudo dnf install dotnet-sdk-9.0 可并行安装,用 global.json 锁定版本

如果你已经在 Windows 上编译好了项目,只需要在 Rocky Linux 9.6 上执行 步骤一(装 Runtime)+ 步骤三(上传发布文件)+ 步骤四(配 systemd) 即可跑起来。