将全栈dApp部署到Amazon EC2
在本系列的前几篇教程中,我们了解了如何开发基于以太体层的完整区块链dApp。
在本教程中,我们将学习如何将dApp部署到Amazon Web服务(AWS)弹性云计算(EC2)实例。我们还使用kaleido创建私有以太坊区块链节点,并配置dApp以使用此区块链节点。
先决条件
要完成本教程,您需要很好地理解以下概念:
- 通过SSH连接到远程服务器。
- 基本的Linux命令行界面(CLI)知识。
- 建议您很好地理解区块链的工作原理,但不是完成本教程所必需的。
启动并连接到EC2实例
要启动EC2实例,请按照本教程中的说明进行操作
- 确保控制台中的实例状态正在运行,状态检查下有绿色勾号。
- 确保您能够通过SSH连接到EC2实例,如上文所述。
接下来安装apache服务器httpd
,node.js
并git
在EC2实例上运行以下命令。
sudo yum update -y
sudo yum install -y httpd git nodejs
sudo service httpd start
sudo chkconfig httpd on
使用Kaleido创建私有以太坊区块链节点
要在kaleido中创建私有以太坊区块链节点,请执行以下操作:
- 创建一个新的Kaleido帐户,登录/登录,然后完成注册过程。
- 登录后,通过单击Create Consortium按钮创建一个Consortium,然后执行以下操作:
- 输入财团的名称和使命。
- 如果您选择美国作为您的国家,请设置您的家乡地区,例如俄亥俄州
- 单击“ 下一步”,然后在下一个选项卡中单击“ 完成 ”。
- 单击“ 设置环境”按钮并执行以下操作来设置新环境:
- 输入环境的名称,或将其留空并单击“ 下一步”。
- 在“ 协议”选项卡中,选择“ PROVIDER”下的“ Geth ” 。这很重要,因为您需要创建以太坊区块链节点,其他2个选项为本教程未涵盖的其他提供程序创建区块链节点。
- 默认情况下,在CONSENSUS ALGORITHM下选择PoA。
- 单击“ 完成”以完成设置。
- 接下来,通过单击
ADD NODE
并执行以下操作添加以太坊节点:- 为节点选择正确的OWNING MEMBER,输入节点的名称,然后单击“ 下一步”。
- 单击CLOUD CONFIGURATION选项卡中的NEXT并将设置保留为默认值。请注意,在免费计划下,您将无法更改任何设置。
- 在SIZE选项卡中,选择所需的节点大小。请注意,在免费计划下,只有小节点大小可用。
- 单击“ 完成”以完成设置。
为新创建的节点提供大约3分钟的时间来完成初始化和启动。
要连接到新创建的节点,您需要通过执行以下操作在Kaleido中添加新的应用凭据:
- 单击+ ADD下拉列表,然后选择New App Credentials选项。
- 确保在MEMBERSHIP选项下选择正确的成员资格,并为凭证输入新名称。
- 请注意显示的USERNAME和PASSWORD。
- 复制显示的密码并将其保存在安全的地方。这是密码显示的唯一时间,因此如果丢失密码,则必须创建新的应用凭据才能连接到节点。
- 单击“ 完成”以保存应用程序凭据。
创建Kaleido IPFS节点
由于dApp需要连接到IPFS节点,因此您需要通过执行以下操作来创建新节点:
- 导航到现有环境,然后单击屏幕右上角的+ ADD下拉列表。
- 选择“ 添加服务”选项。这将打开一个新面板,展示可用的Kaleido服务。
- 单击“ IPFS文件存储”选项下的“ 添加”按钮。
- 为节点命名,然后单击“ 添加”。单击“ 完成”完成部署。
- 新创建的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助记符代码表单中,执行以下操作:
- 从Coin下拉菜单中选择ETH – Ethereum。
- 选择至少12个单词。
- 单击“ 生成”按钮以生成助记符。
- 复制并保存位于字段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的时间:
- SSH登录到新创建的AWS EC2实例。
- 通过git克隆上面分叉的反应项目 repo到实例。
- 通过执行以下操作,将directory(
cd
)更改为truffle-react-box-frontend
通过Truffle部署合约的文件夹:- 通过命令全局安装Truffle包
npm i truffle -g
。 - 通过命令编译智能合约
truffle compile
。 - 通过命令将合约部署到上面创建的Kaleido私有以太坊区块链节点
truffle migrate
。 - 如果您查看Kaleido中的Block Explorer,您应该会看到为
Bounties
智能合约执行的新交易。 - 您可以通过命令在Truffle控制台中测试合约,该命令
truffle console --network production
打开一个控制台,您可以在其中与已部署的合约进行交互。 - 如果对智能合约进行任何更改,则需要通过命令将它们重新部署到kaleido节点
truffle compile && truffle migrate
。
- 通过命令全局安装Truffle包
- 在合约部署之后,将directory(
cd
)更改为react项目,即cd truffle-react-box-frontend/client/
通过该命令安装所需的节点依赖项npm install
。 - 编辑文件
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块浏览器来获取consortiumId
和environmentId
变量,然后复制并粘贴生成的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' });
- 编辑
/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
- 使用该命令重新启动Apache服务器以应用这些更改
sudo service httpd start
。 npm run build
在文件夹中运行CLI命令构建dApp以进行生产truffle-react-box-frontend/client/
。- 将文件夹中的所有文件和文件夹复制并粘贴
truffle-react-box-frontend/client/dist/
到apache文件夹中,即cd dist/ && cp -R * /var/www/html/
。 - 导航到EC2实例的IP地址,将显示dApp。您应该能够使用
Kaleido Custom RPC
预期的Metamask通过Metamask与dApp进行交互。- 如果更改dApp,请重复步骤7到9以查看更改。