将 Blazor 服务器端部署到 Ubuntu Linux 发行版。





5.00/5 (3投票s)
将 Blazor 服务器端应用程序部署到现有 Linux 发行版 Ubuntu 安装的分步过程。
引言
本文是关于如何在 Ubuntu Linux 上运行 Blazor 服务器端 Web 应用程序的分步指南。
该系列中的另一篇文章,您可以根据自己的需求使用:
安装说明(初学者详细说明)
对于不希望获得详细说明的用户,文章末尾有一个摘要,其中仅列出了文章中使用的所有命令,而没有输出。
文章的编写方式旨在消除任何关于使用哪些命令的疑问,并以详细的分步方式进行。输出列表适用于那些遇到错误并希望查看正常工作输出(如我的)应该是什么样子的人。
首先,请确保安装了最新版本的 Ubuntu。从您喜欢的终端命令行,按列出的顺序键入以下命令。
第一步是检查您使用的 Ubuntu 版本
akshays@CodeProjectUbuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
我使用的是 20.04 版本。因此,请访问 *packages.microsoft.com/config/ubuntu*。检查是否有包含您版本的目录。然后检查目录中名为 *packages-microsoft-prod.deb* 的文件。因此,在我撰写本文时,请运行以下命令:
akshays@CodeProjectUbuntu:~$ wget
-q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
-O packages-microsoft-prod.deb
使用以下命令检查文件是否已下载
akshays@CodeProjectUbuntu:~$ ls
Desktop Documents Downloads Music packages-microsoft-prod.deb
Pictures Public snap Templates Videos
现在使用以下命令安装软件包
akshays@CodeProjectUbuntu:~$ sudo dpkg -i packages-microsoft-prod.deb
Selecting previously unselected package packages-microsoft-prod.
(Reading database ... 184434 files and directories currently installed.)
Preparing to unpack packages-microsoft-prod.deb ...
Unpacking packages-microsoft-prod (1.0-ubuntu20.04.1) ...
Setting up packages-microsoft-prod (1.0-ubuntu20.04.1) ...
下一步是更新软件包
akshays@CodeProjectUbuntu:~$ sudo apt-get update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
Hit:2 http://in.archive.ubuntu.com/ubuntu focal InRelease
Hit:3 http://in.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:4 http://in.archive.ubuntu.com/ubuntu focal-backports InRelease
Get:5 https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease [10.5 kB]
Get:6 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages [6,506 B]
Fetched 124 kB in 2s (72.0 kB/s)
Reading package lists... Done
如果您正在使用 SSL(安全套接字层)HTTPS,请执行以下操作:
akshays@CodeProjectUbuntu:~$ sudo apt-get install apt-transport-https
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
apt-transport-https
0 upgraded, 1 newly installed, 0 to remove and 40 not upgraded.
Need to get 1,708 B of archives.
After this operation, 160 kB of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu focal-updates/universe amd64
apt-transport-https all 2.0.2ubuntu0.1 [1,708 B]
Fetched 1,708 B in 0s (45.9 kB/s)
Selecting previously unselected package apt-transport-https.
(Reading database ... 184442 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_2.0.2ubuntu0.1_all.deb ...
Unpacking apt-transport-https (2.0.2ubuntu0.1) ...
Setting up apt-transport-https (2.0.2ubuntu0.1) ...
接下来,安装 .NET Core SDK
akshays@CodeProjectUbuntu:~$ sudo apt-get install dotnet-sdk-3.1
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
aspnetcore-runtime-3.1 aspnetcore-targeting-pack-3.1 dotnet-apphost-pack-3.1
dotnet-host dotnet-hostfxr-3.1 dotnet-runtime-3.1 dotnet-runtime-deps-3.1
dotnet-targeting-pack-3.1 netstandard-targeting-pack-2.1
The following NEW packages will be installed:
aspnetcore-runtime-3.1 aspnetcore-targeting-pack-3.1 dotnet-apphost-pack-3.1
dotnet-host dotnet-hostfxr-3.1 dotnet-runtime-3.1 dotnet-runtime-deps-3.1
dotnet-sdk-3.1 dotnet-targeting-pack-3.1 netstandard-targeting-pack-2.1
0 upgraded, 10 newly installed, 0 to remove and 40 not upgraded.
Need to get 78.7 MB of archives.
After this operation, 337 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-host amd64 3.1.4-1 [32.9 kB]
Get:2 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-hostfxr-3.1 amd64 3.1.4-1 [121 kB]
Get:3 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-runtime-deps-3.1 amd64 3.1.4-1 [2,668 B]
Get:4 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-runtime-3.1 amd64 3.1.4-1 [21.8 MB]
Get:5 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 aspnetcore-runtime-3.1 amd64 3.1.4-1 [5,762 kB]
Get:6 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-targeting-pack-3.1 amd64 3.1.0-1 [1,988 kB]
Get:7 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 aspnetcore-targeting-pack-3.1 amd64 3.1.3-1 [949 kB]
Get:8 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-apphost-pack-3.1 amd64 3.1.4-1 [42.5 kB]
Get:9 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 netstandard-targeting-pack-2.1 amd64 2.1.0-1 [1,474 kB]
Get:10 https://packages.microsoft.com/ubuntu/20.04/prod focal/main
amd64 dotnet-sdk-3.1 amd64 3.1.300-1 [46.5 MB]
Fetched 78.7 MB in 16s (5,012 kB/s)
Selecting previously unselected package dotnet-host.
(Reading database ... 184446 files and directories currently installed.)
Preparing to unpack .../0-dotnet-host_3.1.4-1_amd64.deb ...
Unpacking dotnet-host (3.1.4-1) ...
Selecting previously unselected package dotnet-hostfxr-3.1.
Preparing to unpack .../1-dotnet-hostfxr-3.1_3.1.4-1_amd64.deb ...
Unpacking dotnet-hostfxr-3.1 (3.1.4-1) ...
Selecting previously unselected package dotnet-runtime-deps-3.1.
Preparing to unpack .../2-dotnet-runtime-deps-3.1_3.1.4-1_amd64.deb ...
Unpacking dotnet-runtime-deps-3.1 (3.1.4-1) ...
Selecting previously unselected package dotnet-runtime-3.1.
Preparing to unpack .../3-dotnet-runtime-3.1_3.1.4-1_amd64.deb ...
Unpacking dotnet-runtime-3.1 (3.1.4-1) ...
Selecting previously unselected package aspnetcore-runtime-3.1.
Preparing to unpack .../4-aspnetcore-runtime-3.1_3.1.4-1_amd64.deb ...
Unpacking aspnetcore-runtime-3.1 (3.1.4-1) ...
Selecting previously unselected package dotnet-targeting-pack-3.1.
Preparing to unpack .../5-dotnet-targeting-pack-3.1_3.1.0-1_amd64.deb ...
Unpacking dotnet-targeting-pack-3.1 (3.1.0-1) ...
Selecting previously unselected package aspnetcore-targeting-pack-3.1.
Preparing to unpack .../6-aspnetcore-targeting-pack-3.1_3.1.3-1_amd64.deb ...
Unpacking aspnetcore-targeting-pack-3.1 (3.1.3-1) ...
Selecting previously unselected package dotnet-apphost-pack-3.1.
Preparing to unpack .../7-dotnet-apphost-pack-3.1_3.1.4-1_amd64.deb ...
Unpacking dotnet-apphost-pack-3.1 (3.1.4-1) ...
Selecting previously unselected package netstandard-targeting-pack-2.1.
Preparing to unpack .../8-netstandard-targeting-pack-2.1_2.1.0-1_amd64.deb ...
Unpacking netstandard-targeting-pack-2.1 (2.1.0-1) ...
Selecting previously unselected package dotnet-sdk-3.1.
Preparing to unpack .../9-dotnet-sdk-3.1_3.1.300-1_amd64.deb ...
Unpacking dotnet-sdk-3.1 (3.1.300-1) ...
Setting up dotnet-host (3.1.4-1) ...
Setting up dotnet-apphost-pack-3.1 (3.1.4-1) ...
Setting up netstandard-targeting-pack-2.1 (2.1.0-1) ...
Setting up dotnet-targeting-pack-3.1 (3.1.0-1) ...
Setting up aspnetcore-targeting-pack-3.1 (3.1.3-1) ...
Setting up dotnet-runtime-deps-3.1 (3.1.4-1) ...
Setting up dotnet-hostfxr-3.1 (3.1.4-1) ...
Setting up dotnet-runtime-3.1 (3.1.4-1) ...
Setting up aspnetcore-runtime-3.1 (3.1.4-1) ...
Setting up dotnet-sdk-3.1 (3.1.300-1) ...
This software may collect information about you and your use of the software,
and send that to Microsoft.
Please visit http://aka.ms/dotnet-cli-eula for more information.
Welcome to .NET Core!
---------------------
Learn more about .NET Core: https://aka.ms/dotnet-docs
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli-docs
Telemetry
---------
The .NET Core tools collect usage data in order to help us improve your experience.
The data is anonymous and doesn't include command-line arguments.
The data is collected by Microsoft and shared with the community.
You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT
environment variable to '1' or 'true' using your favorite shell.
Read more about .NET Core CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry
Configuring...
--------------
A command is running to populate your local package cache to improve
restore speed and enable offline access. This command takes up to one minute
to complete and only runs once.
Processing triggers for man-db (2.9.1-1) ...
然后,以防万一,再次更新软件包
akshays@CodeProjectUbuntu:~$ sudo apt-get update
Hit:1 http://in.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://in.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 http://in.archive.ubuntu.com/ubuntu focal-backports InRelease
Get:4 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
Hit:5 https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease
Fetched 107 kB in 2s (63.1 kB/s)
Reading package lists... Done
如果您不想要 .NET Core SDK,但只想要运行时,请检查最新版本的 .NET Core 运行时,以我的情况为例,它是 3.1,然后运行以下命令:
akshays@CodeProjectUbuntu:~$ sudo apt-get install aspnetcore-runtime-3.1
使用以下命令检查您的 .NET Core 版本
akshays@CodeProjectUbuntu:~$ dotnet --version
3.1.300
访问以下 URL,并检查您是否获得了最新的 .NET Core 版本,包括安全更新:
现在安装 Nginx(Web 服务器),用于托管您的 Blazor 服务器端 Web 应用程序
akshays@CodeProjectUbuntu:~$ sudo apt-get install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
libnginx-mod-mail libnginx-mod-stream nginx-common nginx-core
Suggested packages:
fcgiwrap nginx-doc
The following NEW packages will be installed:
libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
libnginx-mod-mail libnginx-mod-stream nginx nginx-common nginx-core
0 upgraded, 7 newly installed, 0 to remove and 40 not upgraded.
Need to get 602 kB of archives.
After this operation, 2,134 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://in.archive.ubuntu.com/ubuntu focal/main amd64
nginx-common all 1.17.10-0ubuntu1 [37.3 kB]
Get:2 http://in.archive.ubuntu.com/ubuntu focal/main amd64
libnginx-mod-http-image-filter amd64 1.17.10-0ubuntu1 [14.3 kB]
Get:3 http://in.archive.ubuntu.com/ubuntu focal/main amd64
libnginx-mod-http-xslt-filter amd64 1.17.10-0ubuntu1 [12.5 kB]
Get:4 http://in.archive.ubuntu.com/ubuntu focal/main amd64
libnginx-mod-mail amd64 1.17.10-0ubuntu1 [42.3 kB]
Get:5 http://in.archive.ubuntu.com/ubuntu focal/main amd64
libnginx-mod-stream amd64 1.17.10-0ubuntu1 [66.9 kB]
Get:6 http://in.archive.ubuntu.com/ubuntu focal/main amd64
nginx-core amd64 1.17.10-0ubuntu1 [425 kB]
Get:7 http://in.archive.ubuntu.com/ubuntu focal/main amd64
nginx all 1.17.10-0ubuntu1 [3,616 B]
Fetched 602 kB in 0s (1,662 kB/s)
Preconfiguring packages ...
Selecting previously unselected package nginx-common.
(Reading database ... 187228 files and directories currently installed.)
Preparing to unpack .../0-nginx-common_1.17.10-0ubuntu1_all.deb ...
Unpacking nginx-common (1.17.10-0ubuntu1) ...
Selecting previously unselected package libnginx-mod-http-image-filter.
Preparing to unpack .../1-libnginx-mod-http-image-filter_1.17.10-0ubuntu1_amd64.deb ...
Unpacking libnginx-mod-http-image-filter (1.17.10-0ubuntu1) ...
Selecting previously unselected package libnginx-mod-http-xslt-filter.
Preparing to unpack .../2-libnginx-mod-http-xslt-filter_1.17.10-0ubuntu1_amd64.deb ...
Unpacking libnginx-mod-http-xslt-filter (1.17.10-0ubuntu1) ...
Selecting previously unselected package libnginx-mod-mail.
Preparing to unpack .../3-libnginx-mod-mail_1.17.10-0ubuntu1_amd64.deb ...
Unpacking libnginx-mod-mail (1.17.10-0ubuntu1) ...
Selecting previously unselected package libnginx-mod-stream.
Preparing to unpack .../4-libnginx-mod-stream_1.17.10-0ubuntu1_amd64.deb ...
Unpacking libnginx-mod-stream (1.17.10-0ubuntu1) ...
Selecting previously unselected package nginx-core.
Preparing to unpack .../5-nginx-core_1.17.10-0ubuntu1_amd64.deb ...
Unpacking nginx-core (1.17.10-0ubuntu1) ...
Selecting previously unselected package nginx.
Preparing to unpack .../6-nginx_1.17.10-0ubuntu1_all.deb ...
Unpacking nginx (1.17.10-0ubuntu1) ...
Setting up nginx-common (1.17.10-0ubuntu1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service →
/lib/systemd/system/nginx.service.
Setting up libnginx-mod-http-xslt-filter (1.17.10-0ubuntu1) ...
Setting up libnginx-mod-mail (1.17.10-0ubuntu1) ...
Setting up libnginx-mod-http-image-filter (1.17.10-0ubuntu1) ...
Setting up libnginx-mod-stream (1.17.10-0ubuntu1) ...
Setting up nginx-core (1.17.10-0ubuntu1) ...
Setting up nginx (1.17.10-0ubuntu1) ...
Processing triggers for systemd (245.4-4ubuntu3.1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for ufw (0.36-6) ...
现在启动 Nginx Web 服务器服务
akshays@CodeProjectUbuntu:~$ sudo service nginx start
现在,通过在您选择的 Web 浏览器中访问以下 URL,测试 Nginx Web 服务器是否正常工作,方法是显示其默认安装的网页:
http://codeprojectubuntu/index.nginx-debian.html
或者
localhost/index.nginx-debian.html
您应该会在 Web 浏览器中看到 Nginx 欢迎网页。现在我们已经正确安装并确认 Nginx 工作正常,让我们配置 Nginx 代理。第一步是转到配置文件目录,该目录位于 *etc*。然后列出目录中的文件,您将找到一个默认配置文件。
akshays@CodeProjectUbuntu:~$ cd /etc/nginx/sites-available/
akshays@CodeProjectUbuntu:/etc/nginx/sites-available$ ls
default
现在编辑默认配置文件,以便在 location 块中为您的 .NET Core Blazor 服务器端 Web 应用程序进行代理设置,如下所示:
location / {
proxy_pass https://: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;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
我使用的是 90 年代左右的 joe 终端文本编辑器,它基于 libcurses,因此比 vi 等更容易使用。我过去曾用它制作了一些小型视频游戏来娱乐。它在 Ubuntu 上并非默认安装,因此您需要运行以下命令来安装它:
akshays@CodeProjectUbuntu:/etc/nginx/sites-available$ sudo apt install joe
现在返回您的 *home* 目录或您想要安装 Blazor 服务器端 Web 应用程序的任何位置,并将所有文件复制到那里。
出于演示目的,我将使用我的 Github 公共存储库和 Blazor 服务器端应用程序,这是本系列“如何尽可能详细地学习 Blazor 服务器端”的一部分。请记住,Blazor 是一项不断变化的新技术。现在我将执行以下命令:
akshays@CodeProjectUbuntu:/etc/nginx/sites-available$ cd ~
akshays@CodeProjectUbuntu:~$ mkdir BlazorCanvasApp
akshays@CodeProjectUbuntu:~$ cd BlazorCanvasApp/
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$
wget https://github.com/akshays2112/BlazorCanvasApp/zipball/master/ -O BlazorCanvasApp.zip
--2020-06-03 16:55:39-- https://github.com/akshays2112/BlazorCanvasApp/zipball/master/
Resolving github.com (github.com)... 13.234.176.102
Connecting to github.com (github.com)|13.234.176.102|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/akshays2112/BlazorCanvasApp/legacy.zip/master [following]
--2020-06-03 16:55:39--
https://codeload.github.com/akshays2112/BlazorCanvasApp/legacy.zip/master
Resolving codeload.github.com (codeload.github.com)... 13.127.152.42
Connecting to codeload.github.com (codeload.github.com)|13.127.152.42|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘BlazorCanvasApp.zip’
BlazorCanvasApp.zip
[ <=>
] 229.32K --.-KB/s in 0.05s
2020-06-03 16:55:40 (4.61 MB/s) - ‘BlazorCanvasApp.zip’ saved [234826]
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ unzip BlazorCanvasApp.zip
Archive: BlazorCanvasApp.zip
fafb1f5a683a19d34ffbe01ec8b075fe7c7fe5d1
creating: akshays2112-BlazorCanvasApp-fafb1f5/
inflating: akshays2112-BlazorCanvasApp-fafb1f5/.gitattributes
inflating: akshays2112-BlazorCanvasApp-fafb1f5/.gitignore
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp.sln
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/App.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/BlazorCanvasApp.csproj
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Data/
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Data/WeatherForecast.cs
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Data/WeatherForecastService.cs
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/CanvasDrawing.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/Counter.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/Error.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/FetchData.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/Index.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Pages/_Host.cshtml
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Program.cs
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Properties/
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Properties/launchSettings.json
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Shared/
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Shared/MainLayout.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Shared/NavMenu.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Shared/SurveyPrompt.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/Startup.cs
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/_Imports.razor
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/appsettings.Development.json
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/appsettings.json
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/css/
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/css/bootstrap/
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/bootstrap/bootstrap.min.css
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/bootstrap/bootstrap.min.css.map
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/FONT-LICENSE
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/ICON-LICENSE
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/README.md
creating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/
creating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/css/
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css
creating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/fonts/
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/fonts/open-iconic.eot
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/fonts/open-iconic.otf
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/fonts/open-iconic.svg
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf
inflating: akshays2112-BlazorCanvasApp-
fafb1f5/BlazorCanvasApp/wwwroot/css/open-iconic/font/fonts/open-iconic.woff
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/css/site.css
inflating: akshays2112-BlazorCanvasApp-fafb1f5/BlazorCanvasApp/wwwroot/favicon.ico
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ mv akshays2112-BlazorCanvasApp-fafb1f5/* ./
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ rm -rf akshays2112-BlazorCanvasApp-fafb1f5/
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ rm BlazorCanvasApp.zip
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ ls
BlazorCanvasApp BlazorCanvasApp.sln
下一步是使用以下命令编译 *BlazorCanvasApp.sln*:
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ dotnet build BlazorCanvasApp.sln -o ./release
Microsoft (R) Build Engine version 16.6.0+5ff7b0c9e for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
CSC : warning CS8034: Unable to load Analyzer assembly
/home/akshays/.nuget/packages/microsoft.aspnetcore.components.analyzers/
3.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll :
Assembly with same name is already loaded
[/home/akshays/BlazorCanvasApp/BlazorCanvasApp/BlazorCanvasApp.csproj]
CSC : warning CS8034: Unable to load Analyzer assembly
/home/akshays/.nuget/packages/microsoft.aspnetcore.components.analyzers/
3.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll :
Assembly with same name is already loaded [/home/akshays/BlazorCanvasApp/
BlazorCanvasApp/BlazorCanvasApp.csproj]
BlazorCanvasApp -> /home/akshays/BlazorCanvasApp/release/BlazorCanvasApp.dll
BlazorCanvasApp -> /home/akshays/BlazorCanvasApp/release/BlazorCanvasApp.Views.dll
Build succeeded.
CSC : warning CS8034: Unable to load Analyzer assembly
/home/akshays/.nuget/packages/microsoft.aspnetcore.components.analyzers/
3.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll :
Assembly with same name is already loaded [/home/akshays/BlazorCanvasApp/
BlazorCanvasApp/BlazorCanvasApp.csproj]
CSC : warning CS8034: Unable to load Analyzer assembly
/home/akshays/.nuget/packages/microsoft.aspnetcore.components.analyzers/
3.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll :
Assembly with same name is already loaded [/home/akshays/BlazorCanvasApp/
BlazorCanvasApp/BlazorCanvasApp.csproj]
2 Warning(s)
0 Error(s)
Time Elapsed 00:00:06.32
我收到了一些警告,但它们是无害的。在我的情况下,它只是说 DLL 已加载,所以我可以忽略它。
现在进入 *release* 目录,您应该会看到所有 Blazor 服务器端应用程序文件,这些文件是编译器的输出。现在我们将通过运行 dotnet 命令来测试 Blazor 服务器端应用程序是否正常工作:
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ cd release/
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$ ls
appsettings.Development.json BlazorCanvasApp.deps.json
BlazorCanvasApp.runtimeconfig.dev.json BlazorCanvasApp.Views.dll
Blazor.Extensions.Canvas.JS.dll
appsettings.json BlazorCanvasApp.dll
BlazorCanvasApp.runtimeconfig.json BlazorCanvasApp.Views.pdb
Newtonsoft.Json.dll
BlazorCanvasApp BlazorCanvasApp.pdb
BlazorCanvasApp.StaticWebAssets.xml Blazor.Extensions.Canvas.dll Properties
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$ dotnet BlazorCanvasApp.dll
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {3b7a72a3-b5a0-4154-a804-573c1f365e97}
may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://:5000
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/akshays/BlazorCanvasApp/release
现在 Blazor 服务器端 Web 应用程序正在运行,请打开您喜欢的 Web 浏览器并访问以下 URL:
您会发现格式丢失了,因为 *www* 文件夹缺失了。但是,Blazor 服务器端应用程序正在渲染并运行。您可以将 *www* 文件夹从开发计算机复制过来,它将包含所有 JavaScript 和 CSS 文件,然后它将像往常一样正确格式化。
您会发现 https://:5000/CanvasDrawing 会抛出错误。这是因为缺少支持 C# 中 Canvas
元素绘制的 NuGet 包的 JavaScript 文件。但就本文而言,只是演示在 Ubuntu 上运行 Blazor 服务器端的步骤,这对于使我的示例完全正常工作不是必需的。
现在进入最后一步,让 Nginx(Web 服务器)管理 Kestrel Blazor 服务器端 Web 应用程序。首先要做的是更改目录到 *etc* 路径,如下所述,并为 systemd
创建一个新的服务配置文件。在此之前,为了确保找到 dotnet 可执行文件的路径:
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$ pwd
/home/akshays/BlazorCanvasApp/release
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$ which dotnet
/usr/bin/dotnet
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$ cd /etc/systemd/system/
akshays@CodeProjectUbuntu:/etc/systemd/system$ sudo joe kestrel-BlazorCanvasApp.service
将以下内容粘贴到 *kestrel-BlazorCanvasApp.service* 文件中:
[Unit]
Description=Blazor Server-side Canvas Drawing Demo
[Service]
WorkingDirectory=/home/akshays/BlazorCanvasApp/release
ExecStart=/usr/bin/dotnet /home/akshays/BlazorCanvasApp/release/BlazorCanvasApp.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=BlazorCanvasApp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
现在通过键入以下命令向 systemd
注册新服务:
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$
sudo systemctl enable kestrel-BlazorCanvasApp.service
[sudo] password for akshays:
Created symlink /etc/systemd/system/multi-user.target.wants/
kestrel-BlazorCanvasApp.service → /etc/systemd/system/kestrel-BlazorCanvasApp.service.
现在启动 kestrel-BlazorCanvasApp
服务并检查其状态,以确保它正在运行:
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$
sudo systemctl start kestrel-BlazorCanvasApp.service
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$
sudo systemctl status kestrel-BlazorCanvasApp.service
● kestrel-BlazorCanvasApp.service - Blazor Server-side Canvas Drawing Demo
Loaded: loaded (/etc/systemd/system/kestrel-BlazorCanvasApp.service;
enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-06-03 18:19:45 IST; 43s ago
Main PID: 12990 (dotnet)
Tasks: 19 (limit: 9488)
Memory: 26.5M
CGroup: /system.slice/kestrel-BlazorCanvasApp.service
└─12990 /usr/bin/dotnet /home/akshays/BlazorCanvasApp/release/BlazorCanvasApp.dll
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]:
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]:
No XML encryptor configured.
Key {4875ffce-1bb9-40a6-a090-41dd899afa42} may be persisted to storage>
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]: info: Microsoft.Hosting.Lifetime[0]
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]:
Now listening on: https://:5000
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]: info: Microsoft.Hosting.Lifetime[0]
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]:
Application started. Press Ctrl+C to shut down.
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]: info: Microsoft.Hosting.Lifetime[0]
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]:
Hosting environment: Production
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]: info: Microsoft.Hosting.Lifetime[0]
Jun 03 18:19:45 CodeProjectUbuntu BlazorCanvasApp[12990]:
Content root path: /home/akshays/BlazorCanvasApp/release
现在打开多个 Web 浏览器并访问以下 URL。您可以检查 */counter* 页面,它是真正多用户的,当您点击 **Click Me** 按钮时,不同浏览器副本上的不同网页中的计数器会以不同的方式递增:
这就是整个分步过程。您现在可以在 Ubuntu 上部署任意数量的 Blazor 服务器端应用程序了。
所有命令摘要
以下是需要按顺序运行的所有命令,不带任何输出。这适用于那些已经知道所有 Ubuntu/Linux 命令并且只是想快速使用它们的人。
akshays@CodeProjectUbuntu:~$ wget
-q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
-O packages-microsoft-prod.deb
akshays@CodeProjectUbuntu:~$ sudo dpkg -i packages-microsoft-prod.deb
akshays@CodeProjectUbuntu:~$ sudo apt-get update
akshays@CodeProjectUbuntu:~$ sudo apt-get install apt-transport-https
------------------ Choice Here -----------------------------------
akshays@CodeProjectUbuntu:~$ sudo apt-get install dotnet-sdk-3.1
--OR--------------------------------------------------------------
akshays@CodeProjectUbuntu:~$ sudo apt-get install aspnetcore-runtime-3.1\
------------------- End Choice -----------------------------------
akshays@CodeProjectUbuntu:~$ sudo apt-get update
akshays@CodeProjectUbuntu:~$ sudo apt-get install nginx
akshays@CodeProjectUbuntu:~$ sudo service nginx start
-------------------- Edit /etc/nginx/sites-available/default with this text -------
location / {
proxy_pass https://: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;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
------------------------------- End Text -------------------------------------------
akshays@CodeProjectUbuntu:/etc/nginx/sites-available$ cd ~
akshays@CodeProjectUbuntu:~$ mkdir BlazorCanvasApp
akshays@CodeProjectUbuntu:~$ cd BlazorCanvasApp/
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$
wget https://github.com/akshays2112/BlazorCanvasApp/zipball/master/ -O BlazorCanvasApp.zip
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ unzip BlazorCanvasApp.zip
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ mv akshays2112-BlazorCanvasApp-fafb1f5/* ./
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ rm -rf akshays2112-BlazorCanvasApp-fafb1f5/
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ rm BlazorCanvasApp.zip
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ dotnet build BlazorCanvasApp.sln -o ./release
akshays@CodeProjectUbuntu:~/BlazorCanvasApp$ cd release/
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$ dotnet BlazorCanvasApp.dll
--------------------- New file /etc/systemd/system/kestrel-BlazorCanvasApp.service
with following text -----
[Unit]
Description=Blazor Server-side Canvas Drawing Demo
[Service]
WorkingDirectory=/home/akshays/BlazorCanvasApp/release
ExecStart=/usr/bin/dotnet /home/akshays/BlazorCanvasApp/release/BlazorCanvasApp.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=BlazorCanvasApp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
---------------------- End Text ---------------------------------------------------------------
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$
sudo systemctl enable kestrel-BlazorCanvasApp.service
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$
sudo systemctl start kestrel-BlazorCanvasApp.service
akshays@CodeProjectUbuntu:~/BlazorCanvasApp/release$
sudo systemctl status kestrel-BlazorCanvasApp.service
历史
- 2020 年 6 月 3 日:初始版本