• 使用Jexus 容器化您的 Blazor 应用程序


    在本文中,我们将介绍如何将 Blazor 应用程序放入Jexus 容器以进行开发和部署。我们将使用 .NET Core  CLI,因此无论平台如何,使用的命令都将是相同的。

    Blazor 托管模型

    Blazor 有两个托管模型,它们的要求不同,本文主要基于WebAssembly模型介绍容器化。

    • Blazor WebAssembly:一个 Web 框架,用于在浏览器中使用 WebAssembly 运行客户端。
    • Blazor 服务器:运行服务器端并使用 SignalR 与浏览器通信的 Web 框架。

    WebAssembly 托管模型的目标是在浏览器中托管整个应用程序。Blazor WebAssembly 应用程序中的项目包括 HTML、JavaScript、.NET 运行时版本和二进制文件。它们都在浏览器中运行,因此您可以将它托管为静态网站。不需要服务器运行时或解释器。

    Blazor WebAssembly 仍处于预览模式,是最后一个预览版,5.19 将正式发布,因此您必须手动安装模板才能创建 Blazor WebAssembly 应用程序。

    dotnet new -i Microsoft.AspNetCore.Components.WebAssembly.Templates::3.2.0-rc1.20223.4

    现在,您已经安装了模板,您可以使用以下 .NET CLI 命令创建新的 Web 组装应用程序:

    dotnet new blazorwasm -o wasmtest

    这将创建一个新的 Blazor WebAssembly 应用程序,名称为"wasmtest"。您可以将"wasmtest" 更改为项目名称。

    生成并测试应用后,即可发布应用。运行点网发布命令:

    dotnet publish -c Release

    你会看到如下输出:

    PS C:workshopidt2019wasmtest> dotnet publish -c Release -o publish
    用于 .NET Core 的 Microsoft (R) 生成引擎版本 16.5.0+d4cbfca49
    版权所有(C) Microsoft Corporation。保留所有权利。

      C:workshopidt2019wasmtestwasmtest.csproj 的还原在 93.3 ms 内完成。
       wasmtest -> C:workshopidt2019wasmtestinRelease etstandard2.1wasmtest.dll
       wasmtest (Blazor output) -> C:workshopidt2019wasmtestinRelease etstandard2.1wwwroot
       wasmtest -> C:workshopidt2019wasmtestpublish

    在这里,你可以看到我们的程序的文件都发布到了路径C:workshopidt2019wasmtestpublish, 我们的所有成果输出都是静态文件,都放在文件夹wwwroot 目录下:

    PS C:workshopidt2019wasmtestpublish> ls wwwroot


         目录: C:workshopidt2019wasmtestpublishwwwroot


    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-----         2020/5/4     12:38                css
    d-----         2020/5/4     12:38                sample-data
    d-----         2020/5/4     12:38                _framework
    -a----         2020/5/4     12:34          32038 favicon.ico
    -a----         2020/5/4     12:34            651 index.html

    可以从任何静态web 站点上运行这个文件,我们就使用一个Jexus 容器来运行blazor 应用。Jexus 是一款国产的 Linux 平台上的高性能WEB服务器 和负载均衡网关,以支持 ASP.NET、 ASP.NET CORE、 PHP 为特色, 同时具备反向代理、 入侵 检测等重要功能。 可以这样说, Jexus是 .NET、 .NET CORE 跨平台的最优秀的宿主服务器,如 果我们认为它是 Linux平台 的 IIS ,这并不为过,因为, Jexus 不但非常快,而且拥有 IIS 和 其它 Web 服务器所不具备的高度的安全性,这是政府机构和重要企业对web服务器最必要也是最重要的 品质需求。张志敏同学在维护这个Jexus镜像,得到了Jexus作者宇内流云的认可, Docker Hub 地址: https://hub.docker.com/r/beginor/jexus-x64

    我们来创建一个Jexus 托管静态网站的配置wasmtest:

    ######################
    # Web Site: wasmtest.csharpkit.com
    ########################################

    port=80
    root=/ /var/www/wasmtest/
    hosts= wasmtest.csharpkit.com
    NoFile=/index.html

    UseGZIP=true

    创建一个容器打包镜像的Dockerfile:

    FROM beginor/jexus-x64:6.2.1.12

    COPY ./jexus/wasmtest /usr/jexus/siteconf/wasmtest

    COPY ./publish/wwwroot /var/www/wasmtest

    CMD [ "jws", "start"]

    此文件将拉下jexus 镜像,然后将jexus网站的配置文件复制到容器文件系统中的(默认的jexus 配置文件夹)。它将在每次生成镜像时执行此操作,因此如果你需要对项目进行更改,则需要重新生成镜像。

    这就是我们需要启动和运行Blazor WebAssembly静态文件所需的以前,现在我们就来创建一个镜像:

    docker build –f ./Dockfile –t geffzhang/wasmtest:lastest .

    PS C:workshopidt2019wasmtest> docker build -f .Dockerfile -t geffzhang/wasmtest:lastest .
    Sending build context to Docker daemon  29.42MB
    Step 1/4 : FROM beginor/jexus-x64:6.2.1.12
    6.2.1.12: Pulling from beginor/jexus-x64
    68ced04f60ab: Already exists                                                     08da89b1ce63: Pull complete                                                      e1c7e1fba2a2: Pull complete                                                      7bb8aca5914e: Pull complete                                                      Digest: sha256:385f8a80d06dc25cc72e072e57983316c7c4faa5e793825fc3bea3fe09701e0c
    Status: Downloaded newer image for beginor/jexus-x64:6.2.1.12
      ---> d2b984e7898c
    Step 2/4 : COPY ./jexus/wasmtest /usr/jexus/siteconf/wasmtest
      ---> 1ffe6bdc10de
    Step 3/4 : COPY ./publish/wwwroot /var/www/wasmtest
      ---> a60b338191aa
    Step 4/4 : CMD [ "jws", "start"]
      ---> Running in da8c19f7849b
    Removing intermediate container da8c19f7849b
      ---> a04cf465b883
    Successfully built a04cf465b883
    Successfully tagged geffzhang/wasmtest:lastest
    SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

    我们可以运行它:

    docker run –name wasm1 –p 80:80 –d geffzhang/wasmtest:lastest

    PS C:workshopidt2019wasmtest> docker run --name wasm1 -p 80:80 -d geffzhang/wasmtest:lastest
    101ecc49b5913d69300a7554022ecef681760922640fc39faf6195d69e04bb56

    这将容器作为守护进程运行,因此他将能够持续运行,直到你停止它。现在我们有了一个静态的Jexus 服务器在端口80上运行应用程序。你可以通过浏览器上看到它:

    image

    在生产环境中,我们可以通过Jexus配置更多的操作,上面这些步骤是托管你的Blazor WebAssembly 应用程序在容器中进行开发。

    代码参见:https://github.com/BlazorHub/wasmtest

  • 相关阅读:
    Java加密与解密之非对称加密算法
    Java加密与解密之对称加密算法
    Java加密与解密之消息摘要算法
    基于Spring Cloud Zookeeper的服务注册与发现
    .NET 5.0正式发布,新功能特性(翻译)
    C# 9.0 中的新增功能
    C# 规范建议
    Flutter Weekly Issue 70
    Android 开发技术周报 Issue#298
    Flutter Weekly Issue 69
  • 原文地址:https://www.cnblogs.com/shanyou/p/12826190.html
走看看 - 开发者的网上家园