部署一个节点

注意:这个指导是为了需要将一个 Corda 节点部署到 server 上的开发者,他们或是按照在本地创建节点的指引来开发并测试了一个 CorDapp,或是在部署一个第三方的 CorDapp。

Linux:安装并且运行 Corda 作为一个系统的服务

我们建议创建一个系统服务来运行节点,还可以选择用系统服务来运行 webserver。这个会提供 logging 和 service handling,并且确保了 Corda 服务会在 server 启动时自动启动。

先决条件:

  1. 添加一个被用来运行 Corda 的系统用户
    sudo adduser --system --no-create-home --group corda
  2. 创建一个名为 /opt/corda 的路径然后将它的 ownership 变为要运行 Corda 的那个用户:
    mkdir /opt/corda; chown corda:corda /opt/corda
  3. 下载 Corda jar (在 /VERSION_NUMBER/corda-VERSION_NUMBER.jar 下)并且把它放在 /opt/corda
  4. (可选步骤)下载 Corda webserver jar(在 /VERSION_NUMBER/corda-VERSION_NUMBER.jar 下)并且把它放在 /opt/corda
  5. /opt/corda 里创建一个名为 plugins 的路径,并且将你的 CorDapp jar 文件放到里边。你也可以下载我们的 CorDapp 示例到 plugins 路径下
  6. 将以下的 node.conf 保存到 /opt/corda/node.conf
    basedir : "/opt/corda"
    p2pAddress : "example.com:10002"
    rpcAddress : "example.com:10003"
    webAddress : "0.0.0.0:10004"
    h2port : 11000
    emailAddress : "you@example.com"
    myLegalName : "O=Bank of Breakfast Tea, L=London, C=GB"
    keyStorePassword : "cordacadevpass"
    trustStorePassword : "trustpass"
    useHTTPS : false
    devMode : false
    networkMapService {
        address="networkmap.foo.bar.com:10002"
        legalName="O=FooBar NetworkMap, L=Dublin, C=IE"
    }
    rpcUsers=[
        {
            user=corda
            password=portal_password
            permissions=[
                ALL
            ]
        }
    ]
  7. /opt/corda/node.conf 进行下边的修改
    • p2pAddressrpcAddress 的值修改为以你的 server hostname 或者外部的 IP address 开始。这个地址会被其他的节点或 RPC 接口用来和你的节点进行沟通
    • 如果需要的话改变端口号,比如你在同一个 server 上运行了多个节点
    • 输入一个 emial address,会在注册的流程中作为管理员的联系方式。这个只有 permissioning service 能够看到
    • 输入你的节点期望的 legal name。这个会在发行你的证书的时候用到,并且通常不会改变,因为它代表了你的 legal identity。
      • Organization(O=)应该是唯一的并且是一个有意义的 identifier(比如 Bank of Breakfast Tea)
      • Location(L=)是离你最近的城市
      • Country(C=)是 ISO 3166-1 alpha-2 code
    • 改变 RPC username 和 password

    注意:Ubuntu 16.04 以及大多数当前的 Linux distributions 使用 SystemD,所以如果你在运行着这些 distributions 中的一个,那你需要按照下边标记为 SystemD 的步骤。如果你运行的是 Ubuntu 14.04,那么按照下边的标记为 Upstart 的步骤。

  8. SystemD:根据下边的例子创建一个 corda.service 文件,并且将它保存在 /etc/systemd/system/ 路径下
    [Unit]
    Description=Corda Node - Bank of Breakfast Tea
    Requires=network.target
    
    [Service]
    Type=simple
    User=corda
    WorkingDirectory=/opt/corda
    ExecStart=/usr/bin/java -Xmx2048m -jar /opt/corda/corda.jar
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target

    Upstart:根据下边的例子创建一个 corda.conf 文件,并且将它保存在 /etc/init/ 路径下

    description "Corda Node - Bank of Breakfast Tea"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    respawn
    setuid corda
    chdir /opt/corda
    exec java -Xmx2048m -jar /opt/corda/corda.jar
  9. 按照下边修改 corda.service 或者 corda.conf
    • 确保 service 描述是有意义的 – 特别是你想要运行多个节点的时候
    • 将 username 修改成你想要用来运行 Corda 的用户账户。我们建议这个用户账号不是 root
    • 通过修改 -Xmx2048m 参数来设置对于 Corda 进行可用的最大内存值
    • SystemD:确保 corda.service 文件是 root 所有并且有正确的权限:
      • sudo chown root:root /etc/systemd/system/corda.service
      • sudo chmod 644 /etc/systemd/system/corda.service
    • Upstart:确保 corda.conf 是被 root 所有并且有正确的权限:
      • sudo chown root:root /etc/init/corda.conf
      • sudo chmod 644 /etc/init/corda.conf

    注意: Corda webserver 提供了一个在浏览器中能够跟你安装的 CorDapps 进行互动的简单接口。运行 webserver 不是必须的。

  10. SystemD:根据下边的例子创建一个 corda-webserver.service 文件并把它存在 /etc/systemd/system/ 路径下
    [Unit]
    Description=Webserver for Corda Node - Bank of Breakfast Tea
    Requires=network.target
    
    [Service]
    Type=simple
    User=corda
    WorkingDirectory=/opt/corda
    ExecStart=/usr/bin/java -jar /opt/corda/corda-webserver.jar
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target

    Upstart:基于下边的例子创建一个 corda-webserver.conf 的文件并将它放在 /etc/init/ 路径下

    description "Webserver for Corda Node - Bank of Breakfast Tea"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    respawn
    setuid corda
    chdir /opt/corda
    exec java -jar /opt/corda/corda-webserver.jar
  11. 为你的节点生成证书。联系 network permissioning service 或者查看 Network Permissioning
  12. SystemD:现在你就可以启动一个节点和它的 webserver,通过运行下边的 systemctl 命令来将 service 设置为同系统启动一起运行:
    • sudo systemctl daemon-reload
    • sudo systemctl enable –now corda
    • sudo systemctl enable –now corda-webserver

    SystemD:现在你就可以启动一个节点和它的 webserver,通过运行下边的 systemctl 命令来将 service 设置为同系统启动一起运行:

    • sudo systemctl daemon-reload
    • sudo systemctl enable –now corda
    • sudo systemctl enable –now corda-webserver

    Upstart:现在你就可以通过运行下边的命令启动一个节点和它的 webserver:

    • sudo start corda
    • sudo start corda-webserver

上边创建的 Upstart 配置文件会告诉 Upstart 在 server 重启的时候要运行 Corda services,所以这里不需要显式地开启他们。

你可以通过创建多个路径和 Corda services 来运行多个节点,修改 node.conf 和 SystemD 或者 Upstart 配置文件,这样他们就都是唯一的了。

Windows:作为 Windows service 来安装和运行 Corda

我们建议将 Corda 作为一个 Windows service 来运行。这提供了 service handling,确保了 Corda 能够在系统重启后自动运行,这意味着我们不需要有人去连接到 server, Corda 就能够始终保持运行状态。

先决条件

  1. 创建一个 Corda 目录,然后下载 Corda jar。将 VERSION_NUMBER 替换成想要的版本号。下边是一个使用 powershell 的一个例子:
    mkdir C:\Corda
    wget http://jcenter.bintray.com/net/corda/corda/VERSION_NUMBER/corda-VERSION_NUMBER.jar -OutFile C:\Corda\corda.jar
  2. /opt/corda 下创建一个名为 plugins 的目录,然后将你的 CorDapp jar 文件存储到这里。或者也可以从我们的 CorDapp 例子中下载一个放到 plugins 目录下。
  3. 把下边的内容存储为 C:\Corda\node.conf。查看 节点配置 来了解这些选项的详细介绍
    basedir : "C:\\Corda"
    p2pAddress : "example.com:10002"
    rpcAddress : "example.com:10003"
    webAddress : "0.0.0.0:10004"
    h2port : 11000
    emailAddress: "you@example.com"
    myLegalName : "O=Bank of Breakfast Tea, L=London, C=GB"
    keyStorePassword : "cordacadevpass"
    trustStorePassword : "trustpass"
    extraAdvertisedServiceIds: [ "" ]
    useHTTPS : false
    devMode : false
    networkMapService {
            address="networkmap.foo.bar.com:10002"
            legalName="O=FooBar NetworkMap, L=Dublin, C=IE"
    }
    rpcUsers=[
        {
            user=corda
            password=portal_password
            permissions=[
                ALL
            ]
        }
    ]
  4. C:\Corda\node.conf 做以下的修改:
    • p2pAddressrpcAddress 的值修改为以你的 server hostname 或者外部的 IP address 开始。这个地址会被其他的节点或 RPC 接口用来和你的节点进行沟通
    • 如果需要的话改变端口号,比如你在同一个 server 上运行了多个节点
    • 输入一个 emial address,会在注册的流程中作为管理员的联系方式。这个只有 permissioning service 能够看到
    • 输入你的节点期望的 legal name。这个会在发行你的证书的时候用到,并且通常不会改变,因为它代表了你的 legal identity。
      • Organization(O=)应该是唯一的并且是一个有意义的 identifier(比如 Bank of Breakfast Tea)
      • Location(L=)是离你最近的城市
      • Country(C=)是 ISO 3166-1 alpha-2 code
    • 改变 RPC username 和 password
  5. 将要求的 Java keystores 拷贝到节点。参考 Network Permissioning 了解详细
  6. 下载 NSSM service manager
  7. Upzip nssm-2.24\win64\nssm.exeC:\Corda
  8. 将下边的代码存储为 C:\Corda\nssm.bat
    nssm install cordanode1 C:\ProgramData\Oracle\Java\javapath\java.exe
    nssm set cordanode1 AppDirectory C:\Corda
    nssm set cordanode1 AppParameters "-Xmx2048m -jar corda.jar --config-file=C:\corda\node.conf"
    nssm set cordanode1 AppStdout C:\Corda\service.log
    nssm set cordanode1 AppStderr C:\Corda\service.log
    nssm set cordanode1 Description Corda Node - Bank of Breakfast Tea
    nssm set cordanode1 Start SERVICE_AUTO_START
    sc start cordanode1
  9. 修改这个 batch 文件:
    • 如果你安装了多个节点,对每个节点要使用不同的 service name(cordanode1
    • 修改 -Xmx 参数来设置对于该节点可用的 Java heap memory 值
    • 设置一个有意义的描述
  10. 双击或者从命令行运行这个 batch file
  11. 运行 services.msc 并确认一个名为 cordanode1 的 service 显式并运行着
  12. 运行 netstat -ano 并确认你在 node.conf 中设置的端口是否在运行
  13. 你可能需要在防火墙中打开这个端口

测试你的安装

你可以通过另外的 host 来链接到你的 RPC 端口来确认 Corda 是否在运行:

telnet your-hostname.example.com 10002

如果你收到的消息是“Escape character is ^]”,Corda 已经在运行并且可以访问了。按 Ctrl-] 和 Ctrl-D 退出 telnet。

发表评论

电子邮件地址不会被公开。 必填项已用*标注