使用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:\workshop\idt2019\wasmtest> dotnet publish -c Release -o publish
用于 .NET Core 的 Microsoft (R) 生成引擎版本 16.5.0+d4cbfca49
版权所有(C) Microsoft Corporation。保留所有权利。
C:\workshop\idt2019\wasmtest\wasmtest.csproj 的还原在 93.3 ms 内完成。
wasmtest -> C:\workshop\idt2019\wasmtest\bin\Release\netstandard2.1\wasmtest.dll
wasmtest (Blazor output) -> C:\workshop\idt2019\wasmtest\bin\Release\netstandard2.1\wwwroot
wasmtest -> C:\workshop\idt2019\wasmtest\publish\
在这里,你可以看到我们的程序的文件都发布到了路径C:\workshop\idt2019\wasmtest\publish\, 我们的所有成果输出都是静态文件,都放在文件夹wwwroot 目录下:
PS C:\workshop\idt2019\wasmtest\publish> ls wwwroot
目录: C:\workshop\idt2019\wasmtest\publish\wwwroot
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:\workshop\idt2019\wasmtest> 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:\workshop\idt2019\wasmtest> docker run --name wasm1 -p 80:80 -d geffzhang/wasmtest:lastest
101ecc49b5913d69300a7554022ecef681760922640fc39faf6195d69e04bb56
这将容器作为守护进程运行,因此他将能够持续运行,直到你停止它。现在我们有了一个静态的Jexus 服务器在端口80上运行应用程序。你可以通过浏览器上看到它:
在生产环境中,我们可以通过Jexus配置更多的操作,上面这些步骤是托管你的Blazor WebAssembly 应用程序在容器中进行开发。
代码参见:https://github.com/BlazorHub/wasmtest
使用Jexus 容器化您的 Blazor 应用程序相关推荐
- cassandra可视化_容器化Spring Data Cassandra应用程序
cassandra可视化 我正在继续学习Docker的旅程. 在这一点上,我仍然保持简单. 这次,我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题. 更确切 ...
- 容器化Spring Data Cassandra应用程序
我正在继续学习Docker的旅程. 在这一点上,我仍然保持简单. 这次,我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题. 更准确地说,使用Spring D ...
- netcore更新dll要停止_使 .NET Core 应用程序容器化
在本教程中,你将了解如何使用 Docker 容器化 .NET Core 应用. 容器具有很多特性和优点,如具有不可变的基础结构.提供可移植的体系结构和实现可伸缩性. 此影像可用于为本地开发环境.私有云 ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)
上个月15日,上海MVP做了一次线下的技术分享活动,我分享的主题是<快速构建容器化的ASP.NET Core应用程序>,有关这次活动的简报,可以参考这里.另外,我的主题分享的PPT也可以点 ...
- 使用Docker和Azure Kubernetes服务将ASP.NET核心应用程序容器化
目录 介绍 应用概述 容器化ASP.NET核心应用程序 部署在本地Kubernetes集群上 Docker镜像和Azure容器注册表(ACR) 部署Azure Kubernetes服务(AKS)群集 ...
- 虚拟化和容器化,大家都用错了
(1)虚拟化 如果你是在1964年睁开眼睛的,你会发现:1964年IBM开天辟地的System360大型主机已经实现了虚拟化,可以一个主机通过CPU分时机理实现多用户多环境工作.毕竟当时计算机贵啊,如 ...
- 容器化技术在运维管理中的应用:自动化、可视化运维
作者:禅与计算机程序设计艺术 容器化技术在运维管理中的应用:自动化.可视化运维 引言 随着云计算和互联网的发展,容器化技术作为一种轻量级.高效的编程方式,得到了越来越广泛的应用.在容器化技术的应用场景 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- Docker容器化部署config-server无法直接访问
Docker容器化部署config-server无法直接访问 1. 本机ip启动方式: 2. Docker容器启动 1)问题 2)解决办法 - 本机启动 - 服务器启动俩种方式 3. dockerfi ...
最新文章
- [ZJOI2011]细胞——斐波那契数列+矩阵加速+dp
- 在Qt4中使用QPersistentModelIndex传递QModelIndex
- 2018.11月Android优质开源项目
- 谈谈redis的热key问题如何解决
- linux shell 查找某字符串 在文件的行数
- 不再为DataGrid生成的表格的单无格中的内容过长、自动折行、表格撑开等问题而烦恼----一个很久以前的做品...
- 网络交换机的分类介绍
- React学习笔记(持续更新)
- 前端工程师面试题汇总--技术
- 页面输出缓存[转载]
- thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
- scrolling=no 无法根据坐标获取元素_三坐标测量仪类型
- 跨进程的 键盘钩子_Delphi下深入Windows编程之钩子原理一
- mysql为什么总是错的_这个mysql如何总是错的
- Linux 内核调优
- 了解单反相机的自动对焦点
- 2020西工大计算机考研经验贴
- Apriori算法及例题
- 生活中的数学问题(数学家的难题)
- 全景分割调研(2) 常用数据集
热门文章
- Winform开发中另一种样式的OutLookBar工具条
- 博客编辑工具ckeditor
- Windbg在Managed App中设置函数断点的几种方法
- 转:java的各个拓展类库的推荐方案
- apache服务器搭建过程中需要注意到的一些问题
- CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)...
- 解决ubuntu下eclipse 经常崩溃的问题
- UILabel自适应高度和自动换行
- Ubuntu 12.10 安装官方JDK
- POP3口令扫描案例