部署节点

注意:这个指导是为了需要将一个 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 里创建一个名为 cordapps 的路径,并且将你的 CorDapp jar 文件放到里边。你也可以下载我们的 CorDapp 示例 到 cordapps 路径下

  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"
devMode : false
rpcUsers=[
    {
        user=corda
        password=portal_password
        permissions=[
            ALL
        ]
    }
]
  1. /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 的步骤。

  1. 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
  1. 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
  1. 按照下边修改 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 不是必须的。

  1. 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
  1. 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
  1. 为你的节点生成证书。联系 network permissioning service 或者查看 Network Permissioning
  2. SystemD:现在你就可以启动一个节点和它的 webserver,通过运行下边的 systemctl 命令来将 service 设置为同系统启动一起运行:
    • sudo systemctl daemon-reload
    • sudo systemctl enable --now corda
    • sudo systemctl enable --now corda-webserver
  3. 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. C:\Corda\ 下创建一个名为 cordapps 的目录,然后将你的 CorDapp jar 文件存储到这里。或者也可以从我们的 CorDapp 例子 中下载一个放到 cordapps 目录下。

  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: [ "" ]
    devMode : false
    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 拷贝到节点。

  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. 运行 1services.msc1 并确认一个名为 1cordanode11 的 service 显式并运行着

  12. 运行 netstat -ano 并确认你在 node.conf 中设置的端口是否在运行

  13. 你可能需要在防火墙中打开这个端口

测试你的安装

你可以通过另外的 host 来链接到你的 RPC 端口来确认 Corda 是否在运行: telnet your-hostname.example.com 10002

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