Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Деплой Blazor-приложения в Timeweb Cloud Apps

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
18 октября 2024 г.
3
6 минут чтения
Средний рейтинг статьи: 5

Blazor — это UI-фреймворк, разработанный компанией Microsoft и позволяющий разработчикам создавать интерактивные веб приложения, используя C#, HTML и CSS.

Модели работы Blazor

Blazor имеет несколько режимов, или моделей, работы:

  • Сервер-сайд рендеринг (SSR, он же Blazor Server)

  • Клиент-сайд рендеринг (CSR, он же Blazor Client или Blazor wasm)

  • Интерактивный режим

  • Гибридный режим (Blazor hybrid)

Blazor Server

Приложение запускается на стороне сервера, а все взаимодействие между браузером и сервером происходит через SignalR — абстракцию, работающую поверх сокетов. То есть когда пользователь заходит на сайт, сервер возвращает статическую страницу, после чего устанавливается соединение между браузером клиента и сервером. При изменении состояния (стейта) сервер возвращает клиенту готовый HTML, и браузер рендерит его. К плюсам этого подхода можно отнести SEO и быструю инициализацию приложения, а к минусам большие объемы трафика и нагрузку на сервер.

Blazor Client

Приложение запускается на стороне клиента, используя технологию WebAssembly — низкоуровневый язык, аналог ассемблерного кода, но только для браузера. Для размещения такого приложения достаточного любого статического хостинга или даже S3-хранилища. К плюсам можно отнести небольшую нагрузку на сервер, а к минусам — довольно большой размер скачиваемого бандла, относительно долгую инициализацию приложения и плохую поддержку SEO.

Интерактивный режим

Приложение, которое берет лучшие стороны от Blazor server и Blazor client, инициализируется в режиме Blazor server, через SignalR устанавливается соединение, и в фоне начинает скачиваться wasm-бандл. После того как бандл был загружен, происходит переинициализация приложения с сохранением текущего состояния, и режим работы меняется на Blazor Client.

Blazor hybrid

Дает возможность запускать Blazor-приложение внутри нативного приложения, используя NET MAUI для Android, iOS, macOS и Windows. К достоинствам данного подхода можно отнести полную интеграцию с целевой платформой и возможность переиспользования UI между веб- и мобильным приложением.

Далее предлагаю вместе создать небольшое веб-приложение и запустить его в интерактивном режиме, используя Timeweb Cloud Apps.

Шаг 1: Настраиваем окружение

Для разработки нам понадобится IDE и DotNet SDK. Для этого установим Visual Studio 2022 Community. Скачиваем установщик с сайта «Майкрософт» по ссылке

Запускаем, выбираем рабочую нагрузку «ASP.NET and web development» и жмем «Install».

Image20

После того как Visual Studio установлена, можем приступить к следующему шагу.

Шаг 2: Создание тестового приложения

Открываем IDE и создаем новый проект.

Image11

В списке шаблонов находим и выбираем «Blazor Web App».

Image13

Даем ему название, в нашем случае это будет «BlazorApp».

Image16

И конфигурируем наше будущее приложение. Тут нам нужно указать в качестве «Interactive render mode» режим «Auto».

Image2

После создания приложения у нас в обозревателе решений будет следующая структура проекта:

Image19

BlazorApp — это основное веб-приложение, которое запускается на сервере и будет отдавать отрендеренную страницу при первом обращении, а также будет хостить сборку клиентского приложения.

BlazorApp.Client — это уже клиентская часть приложения, она собирается в wasm-бандл и будет скачиваться браузером после того, как Blazor server отрендерит начальную страницу.

Для демонстрации приложения предлагаю добавить компонент, для этого жмем правой кнопкой мыши на Add → New item.

Image5

Выбираем «Razor Component» и даем ему название «RenderMode».

Image18

Внутри добавляем следующий код:

@using System.Runtime.InteropServices

<label>Render mode: @renderMode</label>

@code {
    string renderMode = "";
    protected override void OnInitialized()
    {
        renderMode = RuntimeInformation.ProcessArchitecture.ToString();
    }
}

В блоке @code { } обычно пишется код C#. В данном примере мы объявляем переменную renderMode, где записываем архитектуру, на которой выполняется приложение. Для серверного режима это будет x86, для клиентского — wasm. Также стоит обратить внимание на перегруженный метод OnInitialized, он выполняется в момент инициализации компонента. Далее мы эту переменную выводим внутри HTML-тега label: <label>Render mode: @renderMode</label>.

В компоненте Counter.razor изменим режим рендеринга на @(new InteractiveWebAssemblyRenderMode(true)) и добавим компонент RazorMode. Должно получиться так:

Image4

Также добавим компонент и в Home.razor:

Image9

Настало время запустить проект. Для этого в панели инструментов жмем на «https».

Image3

Далее откроется браузер с запущенным приложением. 

Image1

Шаг 3: Деплой приложения

Для деплоя приложения переходим в панели Timeweb Cloud в раздел Apps и создаем новое приложение. Далее выбираем тип приложения «Backend» и находим «ASP.NET».

Image12

Затем указываем репозиторий, откуда будет склонирован наш проект при деплое. Для этого предварительно нужно закоммитить наш тестовый проект, например, на GitHub.

Image14

Выбираем GitHub, авторизуемся, выбираем наш проект и жмем «Install & Authorize».

Image7

Тут мы можем указать ветку из которой будет собираться приложение и настроить автодеплой по коммиту.

Image10

На следующем шаге выбираем минимальную конфигурацию — ее нам хватит, чтобы запустить и протестировать наше приложение.

И, наконец, на заключительном этапе настраиваем наше приложение. Здесь нам понадобится к стандартным командам добавить аргументы запуска приложения, чтобы оно запускалась на 5000 порту и было доступно в Интернет, а также путь к проекту:

dotnet run --project BlazorApp --urls http://0.0.0.0:5000

Image17

Жмем кнопку «Запустить деплой», и через пару минут наше приложение будет в облаке и доступно всему миру.

Шаг 4: Демонстрация

После деплоя приложение будет доступно на техническом домене, найти его можно на дашборде.

883d6743 90e1 4dab A5aa 8355bf63012e

Открываем этот URL в браузере и попадаем на главную страницу приложения, которая работает в режиме «Render mode: X64».

Image6

Переходим на страницу Counter и видим, что изначально режим этой страницы «Render mode: X64», но через пару секунд он меняется на «Render mode: Wasm». 

Image15

Как мы писали выше, это происходит потому, что страница инициализируется на сервере, а после того, как в фоне скачается WebAssembly-сборка клиентской версии приложения, оно переключается в режим client side. Если мы повторно откроем страницу Counter, то практически мгновенно режим рендеринга изменится на wasm, потому что сборка уже есть в кэше браузера и заново качать ее нет необходимости.

Заключение

Blazor является частью экосистемы дотнета и отлично подойдет как разработчикам знакомым с языком программирования C#, так и начинающим разработчикам. Как мы могли убедиться выше,  для создания и деплоя простого веб приложения достаточно нескольких несложных шагов, а Visual Studio и Timeweb Cloud Apps делают эти шаги еще проще и приятней.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
18 октября 2024 г.
3
6 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев