将全栈dApp部署到Amazon EC2

本系列的前几篇教程中,我们了解了如何开发基于以太体层的完整区块链dApp。

在本教程中,我们将学习如何将dApp部署到Amazon Web服务(AWS)弹性云计算(EC2)实例。我们还使用kaleido创建私有以太坊区块链节点,并配置dApp以使用此区块链节点。

先决条件

要完成本教程,您需要很好地理解以下概念:

  • 通过SSH连接到远程服务器。
  • 基本的Linux命令行界面(CLI)知识。
  • 建议您很好地理解区块链的工作原理,但不是完成本教程所必需的。

启动并连接到EC2实例

要启动EC2实例,请按照本教程中的说明进行操作

  • 确保控制台中的实例状态正在运行,状态检查下有绿色勾号。
  • 确保您能够通过SSH连接到EC2实例,如上文所述。

接下来安装apache服务器httpdnode.jsgit在EC2实例上运行以下命令。

sudo yum update -y
sudo yum install -y httpd git nodejs
sudo service httpd start
sudo chkconfig httpd on

使用Kaleido创建私有以太坊区块链节点

要在kaleido中创建私有以太坊区块链节点,请执行以下操作:

  1. 创建一个新的Kaleido帐户,登录/登录,然后完成注册过程。
  2. 登录后,通过单击Create Consortium按钮创建一个Consortium,然后执行以下操作:
    1. 输入财团的名称和使命。
    2. 如果您选择美国作为您的国家,请设置您的家乡地区,例如俄亥俄州
    3. 单击“ 下一步”,然后在下一个选项卡中单击“ 完成 ”。
  3. 单击“ 设置环境”按钮并执行以下操作来设置新环境:
    1. 输入环境的名称,或将其留空并单击“ 下一步”
    2. 在“ 协议”选项卡中,选择“ PROVIDER”下的“ Geth ” 。这很重要,因为您需要创建以太坊区块链节点,其他2个选项为本教程未涵盖的其他提供程序创建区块链节点。
    3. 默认情况下,在CONSENSUS ALGORITHM下选择PoA
    4. 单击“ 完成”以完成设置。
  4. 接下来,通过单击ADD NODE并执行以下操作添加以太坊节点:
    1. 为节点选择正确的OWNING MEMBER,输入节点的名称,然后单击“ 下一步”
    2. 单击CLOUD CONFIGURATION选项卡中的NEXT并将设置保留为默认值。请注意,在免费计划下,您将无法更改任何设置。
    3. SIZE选项卡中,选择所需的节点大小。请注意,在免费计划下,只有小节点大小可用。
    4. 单击“ 完成”以完成设置。

为新创建的节点提供大约3分钟的时间来完成初始化和启动。

要连接到新创建的节点,您需要通过执行以下操作在Kaleido中添加新的应用凭据:

  1. 单击+ ADD下拉列表,然后选择New App Credentials选项。
  2. 确保在MEMBERSHIP选项下选择正确的成员资格,并为凭证输入新名称。
  3. 请注意显示的USERNAMEPASSWORD
    1. 复制显示的密码并将其保存在安全的地方。这是密码显示的唯一时间,因此如果丢失密码,则必须创建新的应用凭据才能连接到节点。
  4. 单击“ 完成”以保存应用程序凭据。

创建Kaleido IPFS节点

由于dApp需要连接到IPFS节点,因此您需要通过执行以下操作来创建新节点:

  1. 导航到现有环境,然后单击屏幕右上角的+ ADD下拉列表。
  2. 选择“ 添加服务”选项。这将打开一个新面板,展示可用的Kaleido服务。
  3. 单击“ IPFS文件存储”选项下的“ 添加”按钮。
  4. 为节点命名,然后单击“ 添加”。单击“ 完成”完成部署。
  5. 新创建的IPFS节点将显示在“ 成员服务 ”下的环境面板底部。

保存在安全位置创建的IPFS URL,因为您在本教程后面需要执行以下操作:

  • 在kaleido仪表板环境部分中,单击在MEMBER SERVICES下创建的ipfs节点。
  • 将出现一个新的“ 应用程序凭据”页面,选择上面在CREDENTIAL NAME下创建的应用程序凭据,并在SECRET KEY下 输入从上面保存的passoword,然后单击“ 提交”
  • 复制MY COMPANY ORGANIZATION – IPFS GATEWAY ENDPOINT下的URL ,并将显示的APPLICATION CREDENTIALS附加到此URL。即,如果网址是https://u0b2fvaghe-u0kzkqcb5x-ipfs.us0-aws.kaleido.io/ipfs,并且凭据是u0hnyi99nm:8abPcEHO1ioxo7pckJKcxw3VzKl8D19TsFp5o7pE-cj4新网址u0hnyi99nm:8abPcEHO1ioxo7pckJKcxw3VzKl8D19TsFp5o7pE-cj4@u0b2fvaghe-u0kzkqcb5x-ipfs.us0-aws.kaleido.io
  • 将此网址保存在安全的地方。

将dApp部署到AWS

在本教程中,我们使用前面步骤中的react项目。使用repo来进行下面描述的更改,并将dApp部署到AWS EC2实例。

生成一个新的以太坊钱包和助记符

如果您已经拥有现有的以太坊钱包并且可以轻松使用上述dApp中的助记符,则此步骤是可选的。

要生成新钱包,请转到https://iancoleman.io/bip39并在BIP39助记符代码表单中,执行以下操作:

  1. Coin下拉菜单中选择ETH – Ethereum
  2. 选择至少12个单词。
  3. 单击“ 生成”按钮以生成助记符。
  4. 复制并保存位于字段BIP39 Mnemonic中的助记符,记住将其保密,因为它是可以生成并导出您的ETH帐户私钥的种子。

您还可以在“地址” 列下第一行的“ 派生地址”下的表中获取钱包的地址。即0x06c6b9bfF7281e97DE8455df05f0EC62528f4DEC

设置Truffle

在上面分叉的repo中secrets.json,在truffle-react-box-frontend文件夹的根路径中创建一个文件。

然后通过执行以下操作获取kaleido连接Url:

  • 单击上面新创建的以太坊节点。
  • 单击+ Connect Node按钮。
  • 在“ 选择连接类型”下,单击“ NATIVE JSON / RPC”下的“ 查看详细信息”按钮。
  • 选择您在上面创建的App Credential,并在SECRET KEY字段中输入密码,然后单击SUBMIT按钮
  • 在新页面中,在JSON / RPC面板下选择HTTPS,滚动到Auth Type – INURL部分并复制那里显示的CONNECTION URL

然后通过设置创建钱包时获得的“助记符”短语以及从上一步复制的“连接URL”来保存kaleido配置。该secrets.json文件应如下所示:

{
    "mnemonic": "YOUR SECRET MNEMONIC",
    "kaleidoUrl": "username:password@kaleidonodeurl"
}

truffle.js文件中用kaleido配置替换当前的infura配置。通过替换线:

    rinkeby: {
        provider: new HDWalletProvider(secrets.mnemonic, "https://rinkeby.infura.io/v3/"+secrets.infuraApiKey),
        network_id: '4'
    }

用线条:

    production: {
        provider:  new HDWalletProvider(secrets.mnemonic, secrets.kaleidoUrl),
        network_id: '*',
        gas: 4700000
    }

设置Metamask

您还需要安装和设置metamask,它是浏览器的web3提供程序。

在浏览器中设置Metamask后,请执行以下操作:

  • 单击浏览器中的Metamask扩展/插件以将其打开。
  • 在登录之前,单击扩展程序上显示的导入使用帐户种子短语链接。
  • 在新页面中输入从上面复制的助记词短语,然后输入该帐户的新密码。
    • 请小心此步骤,因为它会覆盖您在Metamask中拥有的任何现有帐户。在导入上述短语之前,请确保备份任何现有帐户的种子短语,否则如果您的帐户未在其他任何位置备份,您无法访问您的帐户。
  • 然后使用您在上述步骤中创建的密码登录Metamask,并通过单击帐户名复制钱包的地址。
  • 此地址应与创建上述新助记符短语时派生的地址相匹配。

通过执行以下操作配置Metamask以连接到上面的kaleido节点:

  • 登录MetaMask。
  • 网络下拉列表中,选择“ 自定义RPC”选项。
  • 在新页面的网络名称下输入“Kaleido”,然后从上面输入kaleido连接URL,即“username:password @ kaleidonodeurl”作为网络新RPC URL,然后单击“ 保存”。您现在可以将其余字段留空。

资助以太坊钱包

要资助上面创建的以太坊钱包,请执行以下操作:

  • 转到kaleido仪表板,选择您的财团,然后选择您的环境。
  • 在“ 服务”表下,单击“ 以太坊矿池”选项,即该行末尾的3个点,然后选择“ 资金帐户”
  • 在新页面上,粘贴从上面的Metamask复制的钱包地址,输入您要为该帐户提供资金的ETH金额,然后单击基金

现在,如果您选择上面创建的kaleido网络,这会将资金添加到与钱包相关联的地址,并且Metamask会反映这一点。请注意,这些资金不是真实的,不能用于主要以太坊网络中的交易,但可用于私人kaleido网络中的区块链交易。

在AWS中设置dApp

在通过Metamask连接到上面创建的kaleido节点并为帐户提供资金后,通过以下步骤将dApp部署到AWS的时间:

  1. SSH登录到新创建的AWS EC2实例。
  2. 通过git克隆上面分叉的反应项目 repo到实例。
  3. 通过执行以下操作,将directory(cd)更改为truffle-react-box-frontend通过Truffle部署合约的文件夹:
    1. 通过命令全局安装Truffle包npm i truffle -g
    2. 通过命令编译智能合约truffle compile
    3. 通过命令将合约部署到上面创建的Kaleido私有以太坊区块链节点truffle migrate
    4. 如果您查看Kaleido中的Block Explorer,您应该会看到为Bounties智能合约执行的新交易。
    5. 您可以通过命令在Truffle控制台中测试合约,该命令truffle console --network production打开一个控制台,您可以在其中与已部署的合约进行交互。
    6. 如果对智能合约进行任何更改,则需要通过命令将它们重新部署到kaleido节点truffle compile && truffle migrate
  4. 在合约部署之后,将directory(cd)更改为react项目,即cd truffle-react-box-frontend/client/通过该命令安装所需的节点依赖项npm install
  5. 编辑文件truffle-react-box-frontend/client/src/App.js以反映上述kaleido更改并替换以下行。
const etherscanBaseUrl = "https://rinkeby.etherscan.io";
const ipfsBaseUrl = "https://ipfs.infura.io/ipfs";

const etherscanBaseUrl = "https://console.kaleido.io/environments/{consortiumId}/{environmentId}/explorer";
const ipfsBaseUrl = "username:password@kaleidoIPFSUrl/ipfs";

您可以通过在浏览器中手动打开kaleido块浏览器来获取consortiumIdenvironmentId变量,然后复制并粘贴生成的URL。

kaleidoIPFSUrl是我们在上面设置IPFS节点时生成的IPFS Url。

更改文件/truffle-react-box-frontend/client/src/utils/IPFS.js并替换该行:

const ipfs = new IPFS({ host: 'ipfs.infura.io', port: 5001, protocol: 'https' });

随着线:

const ipfs = new IPFS({ provider: 'username:password@kaleidoIPFSUrl', protocol: 'https' });
  1. 编辑/etc/httpd/conf/httpd.conf到以下内容:
"/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    Options -MultiViews
    
        RewriteEngine On
        # If an existing asset or directory is requested go to it as it is
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
        RewriteRule ^ - [L]
        # If the requested resource doesn't exist, use index.html
        RewriteRule ^ /index.html
    

    #
    # Controls who can get stuff from this server.
    #
    Require all granted

  1. 使用该命令重新启动Apache服务器以应用这些更改sudo service httpd start
  2. npm run build在文件夹中运行CLI命令构建dApp以进行生产truffle-react-box-frontend/client/
  3. 将文件夹中的所有文件和文件夹复制并粘贴truffle-react-box-frontend/client/dist/到apache文件夹中,即cd dist/ && cp -R * /var/www/html/
  4. 导航到EC2实例的IP地址,将显示dApp。您应该能够使用Kaleido Custom RPC预期的Metamask通过Metamask与dApp进行交互。
    1. 如果更改dApp,请重复步骤7到9以查看更改。
原文 Kauri
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢