Ethereum 解决方案模板旨在利用最少的 Azure 和 Ethereum 知识,使多成员联盟 Ethereum 区块链网络的部署和配置变得更加轻松快捷。
凭借少量的用户输入以及 Azure Stack Hub 租户门户中的一键式部署,每个成员都能预配其内存占用情况。 每个成员的网络足迹由三部分组成:
- 一组负载均衡的事务节点,应用或用户可与这些节点进行交互以提交事务。
- 一组用于记录事务的挖掘节点。
- 一个网络虚拟设备 (NVA)。
稍后的连接步骤将连接 NVA 以创建完全配置的多成员区块链网络。
若要设置:
- 选择部署体系结构。
- 部署独立网络、联盟领导者网络或联盟成员网络。
必备条件
从市场下载最新项目:
- Ubuntu Server 16.04 LTS
- Windows Server 2016
- 适用于 Linux 的自定义脚本 2.0
- 适用于 Windows 的自定义脚本扩展
部署体系结构
此解决方案模板可以部署单成员或多成员 Ethereum 联盟网络。 使用网络虚拟设备和连接资源在链拓扑中连接虚拟网络。
此模板可以通过多种方式为领导者和成员部署 Ethereum 联盟。 下面是我们已测试过的内容:
- 在具有 Microsoft Entra ID 或 AD FS 的多节点 Azure Stack Hub 上,使用相同或不同的订阅部署领导者和成员。
- 在单节点 Azure Stack Hub(具有 Microsoft Entra ID)上,使用相同的订阅部署领导者和成员。
独立和联盟领导者部署
联盟领导者模板在网络中配置第一个成员的足迹。
- 在 Azure Stack Hub 租户门户中,选择“+创建资源>模板部署”,以从自定义模板进行部署。 
- 选择“在编辑器中生成自己的模板”以编辑新的自定义模板。 
- 在右侧的编辑窗格中,复制并粘贴前面下载的领导者模板 JSON。 
- 选择“保存”。 
- 在“基本信息”选项卡上,完成以下设置。 - 参数名称 - 说明 - 示例值 - 订阅 - 要将联盟网络部署到的订阅。 - 消耗订阅 - 资源组 - 部署联盟网络的资源组。 - EthereumResources - 区域 - 用于资源的 Azure 区域。 - local - 名称前缀 - 用作已部署资源的命名基础的字符串。 最多使用六个字母数字字符。 - eth - 身份验证类型 - 向 VM 进行身份验证的方法。 允许的值为“密码”或“SSH 公钥”。 - 密码 - 管理员用户名 - 部署的每个 VM 的管理员用户名。 使用 1 到 64 个字符。 - gethadmin - 管理员密码(身份验证类型 = 密码) - 部署的每个 VM 的管理员帐户密码。 密码必须包含下列要求中的 3 项: 1 个大写字符,1 个小写字符,1 个数字和 1 个特殊字符。 
 虽然所有 VM 最初都有相同的密码,但可以在预配后更改密码。 使用 12 到 72 个字符。- 管理员 SSH 密钥(身份验证类型 = sshPublicKey) - 用于远程登录的安全外壳 RSA 公钥字符串。 - 起源块 - 表示自定义起源块的 JSON 字符串。 此参数的值是可选的。 - Ethereum 帐户密码 - 用于保护 Ethereum 帐户的管理员密码。 - Ethereum 帐户通行短语 - 用于生成与 Ethereum 帐户相关联的私钥的通行短语。 请考虑使用具有足够随机性的密码,以确保使用强私钥。 - Ethereum 网络 ID - 联盟的网络 ID。 使用介于 5 和 999,999,999 之间的任何值。 - 72 - 联盟成员 ID - 与每个联盟网络成员关联的 ID。 此 ID 应在网络中唯一。 - 0 - 挖掘节点数 - 每个联盟成员的挖掘节点数。 使用一个介于 2 到 15 之间的值。 - 2 - 挖掘节点 VM 大小 - 挖掘节点的 VM 大小。 - Standard_A1 - 挖掘存储帐户类型 - 挖掘节点的存储性能。 - Standard_LRS - TX 节点数 - 负载均衡事务节点数。 使用一个介于 1 到 5 之间的值。 - 1 - TX 节点 VM 大小 - 事务节点的 VM 大小。 - Standard_A1 - TX 存储帐户类型 - 事务节点的存储性能。 - Standard_LRS - 基 URL - 要从中获取部署模板的基 URL。 除非想要自定义部署模板,否则请使用默认值。 
- 选择“查看 + 创建” 。 成功验证后,选择“创建”。 
部署可能需要 20 分钟或更长时间才能完成。
部署完成后,请在资源组的部署部分中查看 Microsoft.Template 的部署摘要。 摘要中包含用于加入联盟成员的输出值。
若要验证领导者的部署,请转到领导者的管理站点。 可在 Microsoft.Template 部署的输出部分找到管理站点地址。

加入联盟成员部署
- 在 Azure Stack Hub 租户门户中,选择“+创建资源>模板部署”,以从自定义模板进行部署。 
- 选择“在编辑器中生成自己的模板”以编辑新的自定义模板。 
- 在右侧的编辑窗格中,复制并粘贴前面下载的联盟成员模板 JSON。 
- 选择“保存”。 
- 在“基本信息”选项卡上,完成以下设置。 - 参数名称 - 说明 - 示例值 - 订阅 - 要将联盟网络部署到的订阅。 - 消耗订阅 - 资源组 - 部署联盟网络的资源组。 - EthereumResources - 区域 - 用于资源的 Azure 区域。 - local - 名称前缀 - 用作已部署资源的命名基础的字符串。 最多使用六个字母数字字符。 - eth - 身份验证类型 - 向 VM 进行身份验证的方法。 允许的值为“密码”或“SSH 公钥”。 - 密码 - 管理员用户名 - 部署的每个 VM 的管理员用户名。 使用 1 到 64 个字符。 - gethadmin - 管理员密码(身份验证类型 = 密码) - 部署的每个 VM 的管理员帐户密码。 密码必须包含下列要求中的 3 项: 1 个大写字符,1 个小写字符,1 个数字和 1 个特殊字符。 
 虽然所有 VM 最初都有相同的密码,但可以在预配后更改密码。 使用 12 到 72 个字符。- 管理员 SSH 密钥(身份验证类型 = sshPublicKey) - 用于远程登录的安全外壳 RSA 公钥字符串。 - 起源块 - 表示自定义起源块的 JSON 字符串。 此参数的值是可选的。 - Ethereum 帐户密码 - 用于保护 Ethereum 帐户的管理员密码。 - Ethereum 帐户通行短语 - 用于生成与 Ethereum 帐户相关联的私钥的通行短语。 请考虑使用具有足够随机性的密码,以确保使用强私钥。 - 联盟成员 ID - 与每个联盟网络成员关联的 ID。 此 ID 应在网络中唯一。 - 0 - 挖掘节点数 - 每个联盟成员的挖掘节点数。 使用一个介于 2 到 15 之间的值。 - 2 - 挖掘节点 VM 大小 - 挖掘节点的 VM 大小。 - Standard_A1 - 挖掘存储帐户类型 - 挖掘节点的存储性能。 - Standard_LRS - TX 节点数 - 负载均衡事务节点数。 使用一个介于 1 到 5 之间的值。 - 1 - TX 节点 VM 大小 - 事务节点的 VM 大小。 - Standard_A1 - TX 存储帐户类型 - 事务节点的存储性能。 - Standard_LRS - 联盟数据 - 指向由其他成员的部署提供的相关联盟配置数据的 URL。 可在领导者的部署输出中找到此值。 - 远程成员 VNET 地址空间 - 领导者的 VNET 地址空间。 可在领导者的部署输出中找到此值。 - 远程成员 NVA 公共 IP - 领导者的 NVA IP 地址。 可在领导者的部署输出中找到此值。 - 连接共享密钥 - 联盟网络中正在建立网关连接的成员之间预先建立的机密。 - 基 URL - 要从中获取部署模板的基 URL。 除非想要自定义部署模板,否则请使用默认值。 
- 选择“查看 + 创建” 。 成功验证后,选择“创建”。 
部署可能需要 20 分钟或更长时间才能完成。
部署完成后,请在资源组的部署部分中查看 Microsoft.Template 的部署摘要。 摘要中包含用于连接联盟成员的输出值。
若要验证成员的部署,请浏览成员的管理站点。 可在 Microsoft.Template 部署的输出部分找到管理站点地址。

如图所示,成员的节点状态为“未运行”。 之所以出现此状态是因为成员与领导者之间未建立连接。 成员与领导者之间的连接是双向连接。 部署成员时,模板会自动创建从成员到领导者的连接。 若要创建从领导者到成员的连接,请转到下一步骤。
连接成员和领导者
此模板创建从领导者到远程成员的连接。
- 在 Azure Stack Hub 租户门户中,选择“+创建资源>模板部署”,以从自定义模板进行部署。 
- 选择“在编辑器中生成自己的模板”以编辑新的自定义模板。 
- 在右侧的编辑窗格中,复制并粘贴前面下载的联盟成员模板 JSON。 
- 选择“保存”。 
- 完成以下设置。 - 参数名称 - 说明 - 示例值 - 订阅 - 要将联盟网络部署到的订阅。 - 消耗订阅 - 资源组 - 部署联盟网络的资源组。 - EthereumResources - 区域 - 用于资源的 Azure 区域。 - local - 成员名称前缀 - 用作已部署资源的命名基础的字符串。 最多使用六个字母数字字符。 - eth - 成员路由表名称 - 领导者路由表的名称。 可在领导者的部署输出中找到此值。 - 远程成员 VNET 地址空间 - 成员的地址空间。 可在成员的部署输出中找到此值。 - 远程成员 NVA 公共 IP - 要连接到的 NVA IP 地址。 可在成员的部署输出中找到此值。 - 连接共享密钥 - 联盟网络中正在建立连接的成员之间预先建立的机密。 - 成员 NVA 专用 IP - 成员的 NVA IP 地址。 可在成员的部署输出中找到此值。 - 基 URL - 要从中获取部署模板的基 URL。 除非想要自定义部署模板,否则请使用默认值。 
- 选择“查看 + 创建” 。 成功验证后,选择“创建”。 
部署完成后,需要经过几分钟,领导者和成员才会开始通信。 若要验证部署,请刷新成员的管理站点。 成员节点的状态应为“正在运行”。

后续步骤
若要详细了解 Ethereum 和 Azure,请参阅区块链技术与应用程序。
