当前位置:首页 > 技术 > 正文内容

Ubuntu平台部署Blazor Server应用实战指南

访客 技术 2026年6月23日 1

第一部分:配置.NET Core运行环境

1.1 在Ubuntu 24.04 x64上安装ASP.NET Core运行时

步骤 命令 说明
安装必要组件 sudo apt install -y software-properties-common 获取add-apt-repository指令以管理软件源
添加Backports仓库 sudo add-apt-repository ppa:dotnet/backports 引入.NET 9官方后移植软件源
刷新包索引 sudo apt update 同步新源中的包信息
部署运行时 sudo apt install -y aspnetcore-runtime-9.0 安装ASP.NET Core运行时(建议),若需开发环境可执行sudo apt install -y dotnet-sdk-9.0

验证部署成果:

dotnet --info

成功时界面类似下图:

安装成功截图

1.2 发布与传输Blazor Server应用

将Blazor Server项目发布为Linux-64目标,利用WinSCP上传至Ubuntu目录,并调整权限:

sudo chmod 777 /path/to/your/target_directory

传输完成后,将目录权限收紧为755:

1.3 本地启动应用

进入应用目录执行:

dotnet EnergyConsumCollection.Server.dll

此时可在本地访问,效果如下:

本地访问截图

第二部分:配置Nginx反向代理

2.1 安装Nginx

sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

2.2 基础防火墙设置

sudo ufw enable
sudo ufw allow 'Nginx Full'
sudo ufw allow ssh
sudo ufw status

2.3 配置反向代理

创建站点配置:

sudo nano /etc/nginx/sites-available/blazor-app

写入以下内容:

server {
    listen 80;
    server_name your-domain.com;  # 替换为您的域名或IP
    client_max_body_size 100M;

    # 静态资源缓存优化
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        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;
    }

    # Blazor应用主代理
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;

        # 长连接超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

        # 禁用缓冲
        proxy_buffering off;
        proxy_request_buffering off;
    }

    # 健康检查端点
    location /health {
        proxy_pass http://localhost:5000/health;
        access_log off;
    }
}

2.4 启用站点

sudo ln -s /etc/nginx/sites-available/blazor-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

2.5 创建systemd服务

编写服务文件:

sudo nano /etc/systemd/system/blazor-app.service

配置如下:

[Unit]
Description=Blazor Server Application
After=network.target

[Service]
Type=exec
WorkingDirectory=/var/www/blazor-app
ExecStart=/usr/bin/dotnet /var/www/blazor-app/EnergyConsumCollection.Server.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=90
SyslogIdentifier=blazor-app
User=www-data
Group=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://localhost:5000
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/www/blazor-app

[Install]
WantedBy=multi-user.target

2.6 启动服务

sudo systemctl daemon-reload
sudo systemctl start blazor-app.service
sudo systemctl enable blazor-app.service
sudo systemctl status blazor-app.service
sudo journalctl -u blazor-app.service -f

第三部分:常见问题处理

3.1 显示"Nginx欢迎页"而非应用

检查启用的站点配置:

sudo ls -la /etc/nginx/sites-enabled/
sudo ls -la /etc/nginx/sites-enabled/default

若存在默认站点(如下图),需禁用:

默认站点存在

sudo rm -f /etc/nginx/sites-enabled/default

或重命名:

sudo mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.disabled

最终仅保留自定义配置,即可正常远程访问:

配置生效

3.2 Blazor新版本部署后局域网访问异常

错误提示:连接中断、重连失败或服务器拒绝连接。

连接错误

解决方案:清除浏览器缓存与Cookies后即可正常访问。

第四部分:Linux环境下的应用升级

4.1 停止服务并备份

sudo systemctl stop blazor-app
sudo mv '/var/www/blazor-app' /var/www/blazor-app_backup_$(date +%Y%m%d)
sudo cp /etc/systemd/system/blazor-app.service /etc/systemd/system/blazor-app_backup_$(date +%Y%m%d).service

4.2 上传新版本并设置权限

使用WinSCP将发布后的程序传输至Ubuntu,调整目录权限:

sudo chmod 755 /var/www/blazor-app

4.3 重启服务

参照2.6节操作,重新加载配置并启动服务。

标签: Ubuntu

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。