groups: - name: Monero Configuration description: Configure Monero - name: Network Configuration description: Configure Network for Monero - name: Storage Configuration description: Configure Storage for Monero - name: Labels Configuration description: Configure Labels for Monero - name: Resources Configuration description: Configure Resources for Monero questions: - variable: TZ group: Monero Configuration label: Timezone schema: type: string default: Etc/UTC required: true $ref: - definitions/timezone - variable: monero label: "" group: Monero Configuration schema: type: dict attrs: - variable: pruned label: Prune the blockchain description: | A pruned Monero blockchain will take up about 1/3rd the storage space of an unpruned node. If you have the extra space and wish to contribute more resources to the Monero network, consider disabling the prune option. A pruned node provides nearly all of the advantages of an unpruned node, so if you are unsure, leave this option enabled. schema: type: boolean default: true - variable: publicly_available label: Advertise as publicly-available description: | If you wish to make it easier for other people to connect their wallet with your node, enable this option. This sets --public-node and --confirm-external-bind if enabled, and --hide-my-port if disabled. If you are unsure, leave this option enabled. schema: type: boolean default: true - variable: dns_blocklist label: Enable community DNS Blocklist description: | Unless you have a good reason to disable this option, leave this option enabled. schema: type: boolean default: true - variable: logging label: Enable logging description: | Unless you encounter an issue and wish to review the logs, leave this option disabled. schema: type: boolean default: false - variable: ipv6_enabled label: Enable IPv6 schema: type: boolean default: true - variable: tor_connections_enabled label: Enable Tor connections description: | Requires a connection to a Tor SOCKS proxy, such as the Arti TrueNAS App. schema: type: boolean default: false - variable: tor_ip label: Tor IP description: | Enter the local IP of this machine if you are running the Arti TrueNAS App. schema: type: ipaddr required: true show_if: [["tor_connections_enabled", "=", true]] - variable: tor_port label: Tor port schema: type: int min: 1 max: 65535 required: true show_if: [["tor_connections_enabled", "=", true]] - variable: tor_inbound_connections_enabled label: Enable inbound Tor connections schema: type: boolean default: false show_if: [["tor_connections_enabled", "=", true]] - variable: tor_inbound_address label: Inbound onion address description: | Port needs to be configured under "Network". schema: type: string required: true valid_chars: "^[a-zA-Z0-9]+\\.onion$" valid_chars_error: Invalid onion address. show_if: [["tor_inbound_connections_enabled", "=", true]] - variable: routing label: Route all traffic through description: | If in the default "Clearnet (no proxy)" mode, normal peer to peer connections with this node will be made over the clearnet, but transaction broadcasts will be made over Tor. If "Tor" is selected, then ALL connections will be made over Tor. This will significantly reduce your node's performance. For nearly all use-cases, leave this set to "Clearnet (no proxy)". schema: type: string show_if: [["tor_connections_enabled", "=", true]] default: clearnet required: true enum: - value: clearnet description: Clearnet (no proxy) - value: tor description: Tor - variable: i2p_connections_enabled label: Enable I2P connections description: | Requires a connection to an I2P SOCKS proxy, such as the I2P TrueNAS App. schema: type: boolean default: false - variable: i2p_ip label: I2P IP description: | Enter the local IP of this machine if you are running the I2P TrueNAS App. schema: type: ipaddr required: true show_if: [["i2p_connections_enabled", "=", true]] - variable: i2p_port label: I2P port schema: type: int min: 1 max: 65535 required: true show_if: [["i2p_connections_enabled", "=", true]] - variable: i2p_inbound_connections_enabled label: Enable inbound I2P connections schema: type: boolean default: false show_if: [["i2p_connections_enabled", "=", true]] - variable: i2p_inbound_address label: Inbound I2P base32 address description: | Port needs to be configured under "Network". schema: type: string required: true valid_chars: "^[a-zA-Z0-9]+\\.b32\\.i2p$" valid_chars_error: Invalid I2P address. show_if: [["i2p_inbound_connections_enabled", "=", true]] - variable: additional_flags label: Additional flags description: | Additional monerod commands can be provided here. If you are unsure, leave this blank. Reference: https://docs.getmonero.org/interacting/monerod-reference/#options schema: type: list items: - variable: flag label: Flag schema: type: string required: true - variable: network label: "" group: Network Configuration schema: type: dict attrs: - variable: monerod_p2p_port label: P2P Port description: | The port used for your node to communicate blockchain data with other nodes. This should be published for external access in most scenarios. schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "published" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18080 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: monerod_rpc_port label: RPC Port description: | This is the unrestricted RPC endpoint which will only be made available on the local network. Unless you specifically need this, leave it disabled. schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18081 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: monerod_restricted_rpc_port label: Restricted RPC Port description: | This is the restricted RPC endpoint which is safe to expose publicly. This allows Monero wallet users to connect to your node. Use in conjunction with "Advertise as publicly-available". If you do not want Monero wallet users to connect to your node, set the bind mode to "None" (for no RPC access) or "Expose port for inter-container communication" (for RPC access only to other TrueNAS apps).
Note that unless you configure SSL for your node separately, for example with Cloudflare or Nginx, then all wallet RPC traffic will be unencrypted which has privacy risks. schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "published" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18089 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: monerod_zmq_rpc_port label: ZMQ RPC Port schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18082 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: monerod_zmq_pub_port label: ZMQ Pub Port schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18083 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: tor_inbound_port label: Tor inbound port schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18084 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: i2p_inbound_port label: I2P inbound port schema: type: dict attrs: - variable: bind_mode label: Port Bind Mode description: | The port bind mode.
- Publish: The port will be published on the host for external access.
- Expose: The port will be exposed for inter-container communication.
- None: The port will not be exposed or published.
Note: If the Dockerfile defines an EXPOSE directive, the port will still be exposed for inter-container communication regardless of this setting. schema: type: string default: "" enum: - value: "published" description: Publish port on the host for external access - value: "exposed" description: Expose port for inter-container communication - value: "" description: None - variable: port_number label: Port Number schema: type: int default: 18085 min: 1 max: 65535 required: true - variable: host_ips label: Host IPs description: IPs on the host to bind this port schema: type: list show_if: [["bind_mode", "=", "published"]] default: [] items: - variable: host_ip label: Host IP schema: type: string required: true $ref: - definitions/node_bind_ip - variable: storage label: "" group: Storage Configuration schema: type: dict attrs: - variable: bitmonero label: Blockchain storage location description: | Use SSDs for reasonable performance. You will have a very bad time trying to sync a Monero node on HDDs.
We recommend at least 200GB of free space if pruning is enabled and at least 500GB if pruning is disabled. schema: type: dict attrs: - variable: type label: Type description: | ixVolume: Is dataset created automatically by the system.
Host Path: Is a path that already exists on the system. schema: type: string required: true default: "ix_volume" enum: - value: "host_path" description: Host Path (Path that already exists on the system) - value: "ix_volume" description: ixVolume (Dataset created automatically by the system) - variable: ix_volume_config label: ixVolume Configuration description: The configuration for the ixVolume dataset. schema: type: dict show_if: [["type", "=", "ix_volume"]] $ref: - "normalize/ix_volume" attrs: - variable: acl_enable label: Enable ACL description: Enable ACL for the storage. schema: type: boolean default: false - variable: dataset_name label: Dataset Name description: The name of the dataset to use for storage. schema: type: string required: true hidden: true default: "bitmonero" - variable: acl_entries label: ACL Configuration schema: type: dict show_if: [["acl_enable", "=", true]] attrs: [] - variable: host_path_config label: Host Path Configuration schema: type: dict show_if: [["type", "=", "host_path"]] attrs: - variable: acl_enable label: Enable ACL description: Enable ACL for the storage. schema: type: boolean default: false - variable: acl label: ACL Configuration schema: type: dict show_if: [["acl_enable", "=", true]] attrs: [] $ref: - "normalize/acl" - variable: path label: Host Path description: The host path to use for storage. schema: type: hostpath show_if: [["acl_enable", "=", false]] required: true - variable: additional_storage label: Additional Storage schema: type: list default: [] items: - variable: storageEntry label: Storage Entry schema: type: dict attrs: - variable: type label: Type description: | ixVolume: Is dataset created automatically by the system.
Host Path: Is a path that already exists on the system.
SMB Share: Is a SMB share that is mounted to as a volume. schema: type: string required: true default: "ix_volume" enum: - value: "host_path" description: Host Path (Path that already exists on the system) - value: "ix_volume" description: ixVolume (Dataset created automatically by the system) - value: "cifs" description: SMB/CIFS Share (Mounts a volume to a SMB share) - variable: read_only label: Read Only description: Mount the volume as read only. schema: type: boolean default: false - variable: mount_path label: Mount Path description: The path inside the container to mount the storage. schema: type: path required: true - variable: host_path_config label: Host Path Configuration schema: type: dict show_if: [["type", "=", "host_path"]] attrs: - variable: acl_enable label: Enable ACL description: Enable ACL for the storage. schema: type: boolean default: false - variable: acl label: ACL Configuration schema: type: dict show_if: [["acl_enable", "=", true]] attrs: [] $ref: - "normalize/acl" - variable: path label: Host Path description: The host path to use for storage. schema: type: hostpath show_if: [["acl_enable", "=", false]] required: true - variable: ix_volume_config label: ixVolume Configuration description: The configuration for the ixVolume dataset. schema: type: dict show_if: [["type", "=", "ix_volume"]] $ref: - "normalize/ix_volume" attrs: - variable: acl_enable label: Enable ACL description: Enable ACL for the storage. schema: type: boolean default: false - variable: dataset_name label: Dataset Name description: The name of the dataset to use for storage. schema: type: string required: true default: "storage_entry" - variable: acl_entries label: ACL Configuration schema: type: dict show_if: [["acl_enable", "=", true]] attrs: [] $ref: - "normalize/acl" - variable: cifs_config label: SMB Configuration description: The configuration for the SMB dataset. schema: type: dict show_if: [["type", "=", "cifs"]] attrs: - variable: server label: Server description: The server to mount the SMB share. schema: type: string required: true - variable: path label: Path description: The path to mount the SMB share. schema: type: string required: true - variable: username label: Username description: The username to use for the SMB share. schema: type: string required: true - variable: password label: Password description: The password to use for the SMB share. schema: type: string required: true private: true - variable: domain label: Domain description: The domain to use for the SMB share. schema: type: string - variable: labels label: "" group: Labels Configuration schema: type: list default: [] items: - variable: label label: Label schema: type: dict attrs: - variable: key label: Key schema: type: string required: true - variable: value label: Value schema: type: string required: true - variable: containers label: Containers description: Containers where the label should be applied schema: type: list items: - variable: container label: Container schema: type: string required: true enum: - value: monerod description: monerod - variable: resources label: "" group: Resources Configuration schema: type: dict attrs: - variable: limits label: Limits schema: type: dict attrs: - variable: cpus label: CPUs description: CPUs limit for Monero Node. schema: type: int default: 2 required: true - variable: memory label: Memory (in MB) description: Memory limit for Monero Node. schema: type: int default: 4096 required: true