Advanced Docker node configuration

Introduction

If you have used the radixnode script to set up your docker node, or used the manual installation described in Installing and Running a Node Using systemd, then the node instance will have been set up with a set of default parameters. You can change the parameters by altering the docker compose file and restarting the node.

You should not change the node’s default settings unless you are confident as to what each setting does and how changing it will affect the operation of your node

Make sure that you take a copy of the docker compose script(s) before making any changes to it.

Configuring your docker node

You can adjust many of the node’s settings by changing the parameters in the radix-fullnode-compose.yml file or radix-archivenode-compose.yml (which you downloaded yourself, or was downloaded for you by the RadixNode script).

radix-fullnode-compose.yml / radix-archivenode-compose.yml
version: '2.2'
services:
  core:
    image: radixdlt/radixdlt-core:1.0-beta.40
    init: true
    restart: unless-stopped
    mem_limit: 7000m
    cap_add:
      - NET_ADMIN
    environment:
      RADIXDLT_HOME: "/home/radixdlt"    (1)
      RADIXDLT_NETWORK_SEEDS_REMOTE: "${RADIXDLT_NETWORK_NODE}"    (2)
      RADIXDLT_DB_LOCATION: "./RADIXDB"    (3)
      RADIXDLT_PACEMAKER_TIMEOUT_MILLIS: 30000
      RADIXDLT_LOG_LEVEL: debug    (4)
      JAVA_OPTS: -server -Xms8g -Xmx8g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseCompressedOops -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts -Djavax.net.ssl.trustStoreType=jks -Djava.security.egd=file:/dev/urandom -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector     (5)
      RADIXDLT_VALIDATOR_KEY_LOCATION: "/home/radixdlt/node-keystore.ks"    (6)
      RADIXDLT_NODE_API_PORT: 3333    (7)
      RADIXDLT_ARCHIVE_API_ENABLE : "True"    (8)
      RADIXDLT_ACCOUNT_API_ENABLE : "True"    (9)
      RADIXDLT_CONSTRUCT_API_ENABLE : "True"    (10)
      RADIXDLT_CHAOS_API_ENABLE : "True"    (11)
      RADIXDLT_HEALTH_API_ENABLE : "True"    (12)
      RADIXDLT_METRICS_API_ENABLE : "True"    (13)
      RADIXDLT_SYSTEM_API_ENABLE : "True"    (14)
      RADIXDLT_VALIDATION_API_ENABLE : "True"    (15)
      RADIXDLT_VERSION_API_ENABLE : "True"    (16)
      RADIXDLT_ARCHIVE_API_PORT: 8080    (17)
      RADIX_NODE_KEYSTORE_PASSWORD: "${RADIXDLT_NODE_KEY_PASSWORD}"
      RADIXDLT_HTTP_NODE_BIND_ADDRESS: 0.0.0.0    (18)
      RADIXDLT_HTTP_ARCHIVE_BIND_ADDRESS: 0.0.0.0    (19)
#     If you want use same user from your host, you can pass LOCAL_USER_ID enviroment variable, else it will default to 999.
#     Command `id` will show your uid of the user from terminal. Replace it with <uid of local user> and uncomment the below line
#      LOCAL_USER_ID: <uid of local user>

    volumes:
      - "./node-keystore.ks:/home/radixdlt/node-keystore.ks"
# NAMED VOLUMES: To mount the ledger onto a named docker volume uncomment the below line.This named docker volumes can be externally binded to directory in below volumes section
#      - "core_ledger:/home/radixdlt/RADIXDB"

  nginx:
     image: radixdlt/radixdlt-nginx:1.0-beta.40
     restart: unless-stopped
     ports:
       - "443:443"
       - "30000:30000"
     volumes:
       - "nginx_secrets:/etc/nginx/secrets"
     environment:
       RADIXDLT_ARCHIVE_API_ENABLE: "True"    (20)


volumes:
    nginx_secrets:
# BIND MOUNT Named core ledger volume : Uncomment below lines to bind core_ledger volume. The directory /data should exist before in hand and should have permission 640
#    core_ledger:
#      driver: local
#      driver_opts:
#        o: bind
#        type: none
#        device: /data
1 the installation directory for the node.
2 the IP address of the node that your own node will use to provide a connection to the Radix network.
3 the location of the Radix ledger.
4 set to debug by default which is useful for troubleshooting, but will generate a lot of logging and potentially slow the operation of the node.
5 the parameters for the underlying Java runtime. It’s best not to change this unless you’re absolutely sure you know what you’re doing, or have been advised to so by RadixDLT support.
6 the location of the encrypted key file.

The key file contains a randomly-generated private key that determines your node’s unique address and (if choosing to register as a validator node) validator ID.

This means if you lose your key file, you will forever lose your node address and validator ID - forcing you to generate a new key file from scratch.

Any tokens held by the node address will be lost.

As a validator, your delegators will have to unstake from your validator ID and restake to your new ID.

Always make sure that you securely back up your key file as soon as you’ve generated it, and carefully protect it.

7 this is the internal port that the node uses for the system API. This shouldn’t be changed unless it clashes with another application using the same port.
8 set this to true if you want to enable the node’s JSON-RPC service. Only archive nodes support the REST service client.
9 enables the API which allows for the retrieval of account information.
10 enables the construction API which is used for building transactions for token transfers, staking and unstaking.
11 this API is used for stress testing your node by flooding it with blocks of messages.
12 enable the API for extracting health information from the nodes.
13 activates the API for extracting monitoring and metrics information.
14 this API is used for extracting operational data for the node, for example: network peers, network identifier and native token information
15 API used for retrieving information about validator nodes.
16 activates API that is used to return the version identifier of the node software.
17 this is the internal port that for the node’s client API. This shouldn’t be changed unless it clashes with another application using the same port. Only archive nodes support client REST services.
18 the address to use for the system API.
19 the address used for the client API. This API is only available for archive nodes.
20 set this to true to allow the nginx server to pass JSON-RPC requests through to the node. Only archive nodes support REST services.

The complete specification for the node JSON-RPC API can be found here:

Having made changes to the compose file, you will need to run the docker compose command (manually or through the radixnode script) for the changes to take effect.