Deploying a node to a server

R3 recommends creating system services to run a node. This provides logging and service handling, and ensures the Corda service is run at boot.

Prerequisites:

  • A supported Java distribution (see Getting set up for CorDapp development)

  • As root/sys admin user - add a system user which will be used to run Corda: sudo adduser --system --no-create-home --group corda

  • Create a directory called /opt/corda and change its ownership to the user you want to use to run Corda:mkdir /opt/corda; chown corda:corda /opt/corda

  • Place the Enterprise Corda JAR corda-4.9.jar in /opt/corda

  • Create a directory called cordapps in /opt/corda and save your CorDapp jar file to it. Alternatively, download one of our sample CorDapps to the cordapps directory

  • Save the below as /opt/corda/node.conf. See Node configuration for a description of these options:

p2pAddress = "example.com:10002"
rpcSettings {
    address: "example.com:10003"
    adminAddress: "example.com: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
        ]
    }
]
custom { jvmArgs = [ "-Xmx2048m", "-XX:+UseG1GC" ] }
  • Make the following changes to /opt/corda/node.conf:
  • Change the p2pAddress, rpcSettings.address and rpcSettings.adminAddress values to match your server’s hostname or external IP address. These are the addresses other nodes or RPC interfaces will use to communicate with your node.
  • Change the ports if necessary, for example if you are running multiple nodes on one server (see below).
  • Enter an email address which will be used as an administrative contact during the registration process. This is only visible to the permissioning service.
  • Enter your node’s desired legal name (see Node identity for more details).
  • If required, add RPC users
  • SystemD: Create a corda.service file based on the example below and save it in the /etc/systemd/system/ directory>
[Unit]
Description=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.jar
Restart=on-failure
Environment="CAPSULE_CACHE_DIR=./capsule"

[Install]
WantedBy=multi-user.target
  • Upstart: Create a corda.conf file based on the example below and save it in the /etc/init/ directory>
description "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.jar
  • Make the following changes to corda.service or corda.conf:

  • Make sure the service description is informative - particularly if you plan to run multiple nodes.

  • Change the username to the user account you want to use to run Corda. R3 recommends that this user account is not root

  • SystemD: Make sure the corda.service file is owned by root with the correct permissions:

* `sudo chown root:root /etc/systemd/system/corda.service`
* `sudo chmod 644 /etc/systemd/system/corda.service`
  • Upstart: Make sure the corda.conf file is owned by root with the correct permissions:

    sudo chown root:root /etc/init/corda.conf
    sudo chmod 644 /etc/init/corda.conf
    
  • Provision the required certificates to your node. Contact the network permissioning service or see permissioning

  • Depending on the versions of Corda and of the CorDapps used, database migration scripts might need to run before a node is able to start. For more information refer to database-management

  • SystemD: You can now start a node and set the services to start on boot by running the following systemctl commands:

  • sudo systemctl daemon-reload

  • sudo systemctl enable --now corda

  • Upstart: You can now start a node by running the following commands:

  • sudo start corda

The Upstart configuration files created above tell Upstart to start the Corda services on boot so there is no need to explicitly enable them.

You can run multiple nodes by creating multiple directories and Corda services, modifying the node.conf and SystemD or Upstart configuration files so they are unique.

R3 recommends running Corda as a Windows service. This provides service handling, ensures the Corda service is run at boot, and means the Corda service stays running with no users connected to the server.

Prerequisites:

mkdir C:\Corda
copy PATH_TO_CORDA_JAR/corda-4.9.jar C:\Corda\corda.jar
  • Create a directory called cordapps in C:\Corda\ and save your CorDapp jar file to it. Alternatively, download one of our sample CorDapps to the cordapps directory
  • Save the below as C:\Corda\node.conf. See Node configuration for a description of these options:
 p2pAddress = "example.com:10002"
 rpcSettings {
     address = "example.com:10003"
     adminAddress = "example.com:10004"
 }
 h2port = 11000
 emailAddress = "you@example.com"
 myLegalName = "O=Bank of Breakfast Tea, L=London, C=GB"
 keyStorePassword = "cordacadevpass"
 trustStorePassword = "trustpass"
 devMode = false
 rpcSettings {
    useSsl = false
    standAloneBroker = false
    address = "example.com:10003"
    adminAddress = "example.com:10004"
}
custom { jvmArgs = [ '-Xmx2048m', '-XX:+UseG1GC' ] }
  • Make the following changes to C:\Corda\node.conf:

  • Change the p2pAddress, rpcSettings.address and rpcSettings.adminAddress values to match your server’s hostname or external IP address. These are the addresses other nodes or RPC interfaces will use to communicate with your node.

  • Change the ports if necessary, for example if you are running multiple nodes on one server (see below).

  • Enter an email address which will be used as an administrative contact during the registration process. This is only visible to the permissioning service.

  • Enter your node’s desired legal name (see Node identity for more details).

  • If required, add RPC users

  • Copy the required Java keystores to the node; see Network Certificates.

  • Download the NSSM service manager.

  • Unzip nssm-2.24\win64\nssm.exe to C:\Corda.

  • Save the following as C:\Corda\nssm.bat:

    nssm install cordanode1 java.exe
    nssm set cordanode1 AppParameters "-jar corda.jar"
    nssm set cordanode1 AppDirectory C:\Corda
    nssm set cordanode1 AppStdout C:\Corda\service.log
    nssm set cordanode1 AppStderr C:\Corda\service.log
    nssm set cordanode1 AppEnvironmentExtra CAPSULE_CACHE_DIR=./capsule
    nssm set cordanode1 Description Corda Node - Bank of Breakfast Tea
    nssm set cordanode1 Start SERVICE_AUTO_START
    sc start cordanode1
    

Modify the batch file as follows:

  • If you are installing multiple nodes, use a different service name (cordanode1), and modify AppDirectory, AppStdout, and AppStderr for each node accordingly

  • Set an informative description

  • Provision the required certificates to your node. Contact the network permissioning service or see permissioning

  • Depending on the versions of Corda and of the CorDapps used, database migration scripts might need to run before a node is able to start. For more information refer to database-management

  • Run the batch file by clicking on it or from a command prompt

  • Run services.msc and verify that a service called cordanode1 is present and running

  • Run netstat -ano and check for the ports you configured in node.conf

  • You may need to open the ports on the Windows firewall

You can verify Corda is running by connecting to your RPC port from another host, for example:

telnet your-hostname.example.com 10002

If you receive the message “Escape character is ^]”, Corda is running and accessible. Press Ctrl-] and Ctrl-D to exit telnet.

From Corda 4.9, the database schema objects are not automatically initialised during the first run of the node. There are two ways to initialise the database schema sets:

Start the node using the initial-registration sub-command:

java -jar corda.jar initial-registration

Start the node with the run-migration-scripts sub-command with --core-schemas and --app-schemas:

java -jar corda.jar run-migration-scripts --core-schemas --app-schemas

See Node command-line options for more details.

From Corda 4.9, the database schema migration process requires you to explicitly perform the following actions. This step is only required when upgrading to Corda 4.9 from a previous version.

Remove any transactionIsolationLevel, initialiseSchema, or initialiseAppSchema entries from the database section of your configuration.

Start the node with the run-migration-scripts sub-command with --core-schemas and --app-schemas.

java -jar corda.jar run-migration-scripts --core-schemas --app-schemas

The node will perform any automatic data migrations required, which may take some time. If the migration process is interrupted it can be continued simply by starting the node again, without harm. The node will stop automatically when migration is complete.

See Node command-line options) for more details.

Was this page helpful?

Thanks for your feedback!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.

We're sorry this page wasn't helpful. Let us know how we can make it better!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Create an issue

Create a new GitHub issue in this repository - submit technical feedback, draw attention to a potential documentation bug, or share ideas for improvement and general feedback.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.