⚒️Installation
Quick start guide for installing and configuring a production-ready Monad full node on bare-metal servers.
Node Requirements
CPU:
16 cores, 4.5+ GHz base clock (e.g., AMD Ryzen 9950X / 7950X, EPYC 4584PX)
RAM:
32 GB+
Storage:
2 TB NVMe (PCIe Gen4x4) — TrieDB
500 GB NVMe (PCIe Gen4x4) — MonadBFT + OS
Bandwidth:
Validators: 300 Mbit/s
Full Nodes: 100 Mbit/s
SSD Reliability Notes:
Recommended: Samsung 980/990 Pro, Samsung PM9A1
Acceptable: Micron 7450 (occasional slowdowns)
Avoid: Nextorage SSDs — can freeze under load
Create GPT and a full-disk partition:
Create a udev rule and /dev/triedb symlink:
Check active LBA format:
Expected: Data Size: 512 bytes ... (in use).
If not, switch to 512-byte LBA:
You should see output showing the MPT database on /dev/nvme… and monad-mpt.service: Deactivated successfully.
Open SSH and P2P port 8000 (TCP+UDP):
Recommended extra protection against spammy small UDP packets:
Remember: iptables rules are lost after reboot unless you persist them (e.g. iptables-persistent).
To make the mitigation rule permanent under UFW, modify before.rules.
Open the UFW pre-rules file:
Just below this line:
add:
Reload UFW:
Verify that the rule is active:
Expected output:
This ensures the anti-spam rule survives reboots and operates consistently.
Monad metrics will be exposed at http://0.0.0.0:8889/metrics.
Generate a strong random password and store it in .env:
Back up off-node:
/opt/monad/backup/secp-backup/opt/monad/backup/bls-backupdocs.monad.xyz
Edit:
Key fields:
Sign your node’s name record with the SECP key:
The command prints self_address, self_record_seq_num and self_name_record_sig.
Put them into the peer_discovery section of node.toml, for example:
In /home/monad/.env you can let the node auto-fetch the latest validators.toml and forkpoint.toml on startup:
For archive / RPC workloads add --trace_calls to the monad-execution service:
Drop-in override:
To control how long artifacts are kept (minutes), append to /home/monad/.env:
monad-cruft runs hourly and will pick up changes automatically.
Fix ownership:
Enable services at boot:
Before first start, follow the Hard Reset Guide to seed the node with a recent database.
Start services:
Check status and logs:
Last updated