✓ Verified 💻 Development ✓ Enhanced Data

Slv Rpc

Ansible playbooks and Jinja2 templates for deploying and managing Solana RPC nodes (mainnet, testnet

Rating
5 (263 reviews)
Downloads
7,343 downloads
Version
1.0.0

Overview

Ansible playbooks and Jinja2 templates for deploying and managing Solana RPC nodes (mainnet, testnet, devnet).

Complete Documentation

View Source →

SLV RPC Skill

Ansible playbooks and Jinja2 templates for deploying and managing Solana RPC nodes (mainnet, testnet, devnet).

Supported RPC Types

TypeDescription
RPCStandard RPC node
Index RPCFull-index RPC node (with Old Faithful/yellowstone-faithful)
Geyser gRPCRPC with Geyser gRPC streaming
Index RPC + gRPCFull-index + gRPC streaming

Directory Structure

text
ansible/
  mainnet-rpc/   — Mainnet RPC playbooks
  testnet-rpc/   — Testnet RPC playbooks
  devnet-rpc/    — Devnet RPC playbooks
  cmn/           — Shared common playbooks
jinja/
  mainnet-rpc/   — Mainnet Jinja2 templates
  testnet-rpc/   — Testnet Jinja2 templates
  devnet-rpc/    — Devnet Jinja2 templates
  cmn/           — Shared templates

CLI Command ↔ Playbook Mapping

The slv r CLI commands map directly to these playbooks. {net} = mainnet-rpc, testnet-rpc, or devnet-rpc.

CLI CommandPlaybookDescription
slv r deploy{net}/init.ymlFull RPC node initialization and deployment
slv r start{net}/start_node.ymlStart RPC node
slv r stop{net}/stop_node.ymlStop RPC node
slv r restart{net}/restart_node.ymlRestart RPC node
slv r build:solana{net}/install_solana.ymlBuild Solana from source
slv r install:solanacmn/install_solana.ymlInstall Solana binary (deprecated, prefer build)
slv r setup:firedancer{net}/setup_firedancer.ymlSetup Firedancer
slv r update:firedancercmn/update_firedancer.ymlUpdate Firedancer binary
slv r update:script{net}/update_startup_config.ymlUpdate start-validator.sh from template
slv r update:geyser{net}/update_geyser.ymlUpdate Geyser plugin
slv r get:snapshot{net}/wget_snapshot.ymlDownload snapshot via aria2c
slv r cleanupcmn/rm_ledger.ymlRemove ledger/snapshot files
slv r list(no playbook)List RPC nodes (CLI only)
slv r update:allowed-ips(no playbook)Update allowed IPs (CLI only)
slv r init(no playbook)Interactive wizard (CLI only)

All Playbooks

Mainnet RPC (mainnet-rpc/)

PlaybookDescription
init.ymlFull RPC node initialization
init_richat_geyser.ymlInitialize Richat Geyser configuration
restart_node.ymlRestart RPC node
start_node.ymlStart RPC node
stop_node.ymlStop RPC node
install_solana.ymlBuild Solana from source
install_agave.ymlBuild Agave from source
install_jito.ymlBuild Jito from source
install_rust.ymlInstall Rust toolchain
install_package.ymlInstall system packages
install_richat.ymlInstall Richat gRPC plugin
install_of1.ymlInstall Old Faithful (yellowstone-faithful)
install_of1_service.ymlSetup Old Faithful systemd service
geyser_build.ymlBuild Yellowstone gRPC from source
geyser_richat_build.ymlBuild Richat gRPC plugin from source
update_geyser.ymlUpdate Geyser plugin
update_startup_config.ymlUpdate start-validator.sh from template
update_ubuntu.ymlUpdate Ubuntu packages
setup_firedancer.ymlSetup Firedancer for RPC
setup-solv-service.ymlSetup systemd service
start-solv-service.ymlStart systemd service
setup_ufw.ymlConfigure UFW firewall
setup_logrotate.ymlSetup log rotation
setup_norestart.ymlDisable auto-restart
configure_hugetlbfs.ymlConfigure hugepages for Firedancer
fail2ban_solana_rate_limit.ymlSetup fail2ban rate limiting
fail2ban_sshd.ymlSetup fail2ban for SSH
allow_ufw.ymlAdd UFW allow rules
add_solv.ymlAdd solv user
copy_keys.ymlCopy node keys
create-start-validator-sh.ymlGenerate start script from template
create-symlink.ymlCreate version symlinks
mount_disks.ymlMount and format disks
optimize_system.ymlOptimize system settings
run_restarter.ymlRun restarter script
run_snapshot_finder.ymlFind and download best snapshot

Testnet RPC (testnet-rpc/)

PlaybookDescription
init.ymlFull testnet RPC initialization
restart_node.ymlRestart node
start_node.yml / stop_node.ymlStart/stop node
install_solana.ymlBuild Solana from source
install_agave.yml / install_jito.ymlBuild client from source
install_richat.ymlInstall Richat plugin
geyser_build.ymlBuild Yellowstone gRPC
geyser_richat_build.ymlBuild Richat plugin from source
update_geyser.ymlUpdate Geyser plugin
update_firedancer.ymlUpdate Firedancer
update_startup_config.ymlUpdate start script
setup_firedancer.ymlSetup Firedancer
setup_solv_service.ymlSetup systemd service
create-start-validator-sh.ymlGenerate start script
wget_snapshot.ymlDownload snapshot

Devnet RPC (devnet-rpc/)

PlaybookDescription
init.ymlFull devnet RPC initialization
restart_node.ymlRestart node
start_node.yml / stop_node.ymlStart/stop node
install_solana.ymlBuild Solana from source
install_agave.yml / install_jito.ymlBuild client from source
install_richat.ymlInstall Richat plugin
geyser_build.ymlBuild Yellowstone gRPC
geyser_richat_build.ymlBuild Richat plugin from source
update_geyser.ymlUpdate Geyser plugin
update_startup_config.ymlUpdate start script
setup_firedancer.ymlSetup Firedancer
setup_solv_service.ymlSetup systemd service
create-start-validator-sh.ymlGenerate start script

Shared Common (cmn/)

PlaybookDescription
build_solana.ymlBuild Solana from source (dispatches to build_agave/build_jito)
build_agave.ymlBuild Agave from GitHub source
build_jito.ymlBuild Jito from GitHub source
install_solana.ymlInstall Solana binary (deprecated)
install_package.ymlInstall system packages
install_rust.ymlInstall Rust toolchain
mount_disks.yml / mount-disks.ymlMount and format disks
optimize_system.ymlOptimize system settings
disable_swap.ymlDisable swap
setup_logrotate.ymlConfigure log rotation
setup_node_exporter.ymlSetup Prometheus node exporter
setup_norestart.ymlDisable auto-restart
setup_unstaked_identity.ymlSetup unstaked identity keypair
restart_solv.ymlRestart solv service
start_solv.yml / stop_solv.ymlStart/stop solv service
start_firedancer.yml / stop_firedancer.ymlStart/stop Firedancer
copy_restart_sh.ymlCopy restarter script
copy_rpc_keys.ymlCopy RPC keys
update_ubuntu.ymlUpdate Ubuntu packages
wget_snapshot.ymlDownload snapshot
add_solv.ymlAdd solv user
fix_permissions.ymlFix file permissions

Key Variables (extra_vars)

VariableDescriptionDefault
rpc_typeRPC node type (RPC, Index RPC, Geyser gRPC, Index RPC + gRPC)RPC
validator_typeClient type (agave, jito, firedancer-agave, firedancer-jito)
solana_versionSolana/Agave version
jito_versionJito version
firedancer_versionFiredancer version
yellowstone_grpc_versionYellowstone gRPC version
richat_versionRichat plugin version (e.g. richat-v8.1.0)
snapshot_urlSnapshot download URL
tpu_peer_addressTPU peer address (for Index RPC transaction forwarding)
limit_ledger_sizeLedger size limit200000000 (Index), 100000000 (others)
dynamic_port_rangePort range8000-8025
port_rpcRPC port8899
port_grpcgRPC port10000

Geyser Plugin Sources

Both plugins are built from source (no binary downloads):

  • Yellowstone gRPC: https://github.com/rpcpool/yellowstone-grpc
  • Richat: https://github.com/lamports-dev/richat

Usage

bash
ansible-playbook -i inventory mainnet-rpc/init.yml \
  -e '{"rpc_type":"Index RPC","solana_version":"3.1.8","snapshot_url":"https://..."}'

No versions.yml required — all variables can be passed via extra_vars.

Interactive Deployment Flow

See AGENT.md for the full step-by-step flow and examples/inventory.yml for output format.

Required Variables

VariablePromptValidation
server_ip"Target server IP?"Valid IPv4
network"mainnet, testnet, or devnet?"mainnet, testnet, devnet
region"Server region?"String
rpc_type"RPC type?"RPC, Index RPC, Geyser gRPC, Index RPC + gRPC
validator_type"Underlying client?"agave, jito, jito-bam, firedancer-agave
solana_version"Solana version? (default: 3.1.8)"Semver
identity_account"Node identity pubkey?"Base58 pubkey
snapshot_url"Snapshot URL? (auto for ERPC)"URL (cannot be empty for init)

Conditionally Required Variables

VariableDefaultWhen Required
jito_versionMatches solana_versionjito/jito-bam types
firedancer_versionfiredancer types
yellowstone_grpc_versionYellowstone gRPC plugin
richat_versionRichat plugin
of1_versionIndex RPC (Old Faithful)
epochIndex RPC (faithful service)
faithful_proxy_target_urlIndex RPC

Optional Variables

VariableDefaultWhen Required
ssh_usersolvAlways
port_rpc8899 (ERPC: 7211)Always
limit_ledger_size100000000Always
dynamic_port_range8000-8025Always
port_grpc10000gRPC types only
tpu_peer_addressIndex RPC (tx forwarding)
allowed_ssh_ipsStrongly recommended (UFW)
allowed_ipsOptional (UFW)
expected_shred_versionEpoch-dependentTestnet only

Optional: Reference RPC

VariableDescriptionDefault
reference_rpc_urlReference RPC endpoint for slot sync comparison (e.g., ERPC)
ERPC API keys are free at https://erpc.global — enables full slot sync monitoring during deployment and updates.

Pre-flight: Fresh Server Setup

bash
ansible-playbook -i inventory.yml cmn/add_solv.yml \
  -e '{"ansible_user":"ubuntu"}' --become

Deployment Command

All paths relative to skill's ansible/ directory:

bash
cd /path/to/slv-rpc/ansible/
ansible-playbook -i inventory.yml {network}-rpc/init.yml \
  -e '{"rpc_type":"<type>","solana_version":"<version>"}'

Installation

Terminal bash

openclaw install slv-rpc
    
Copied!

💻Code Examples

cmn/ — Shared templates

-cmn--shared-templates.txt
## CLI Command ↔ Playbook Mapping

The `slv r` CLI commands map directly to these playbooks. `{net}` = `mainnet-rpc`, `testnet-rpc`, or `devnet-rpc`.

| CLI Command | Playbook | Description |
|---|---|---|
| `slv r deploy` | `{net}/init.yml` | Full RPC node initialization and deployment |
| `slv r start` | `{net}/start_node.yml` | Start RPC node |
| `slv r stop` | `{net}/stop_node.yml` | Stop RPC node |
| `slv r restart` | `{net}/restart_node.yml` | Restart RPC node |
| `slv r build:solana` | `{net}/install_solana.yml` | Build Solana from source |
| `slv r install:solana` | `cmn/install_solana.yml` | Install Solana binary (deprecated, prefer build) |
| `slv r setup:firedancer` | `{net}/setup_firedancer.yml` | Setup Firedancer |
| `slv r update:firedancer` | `cmn/update_firedancer.yml` | Update Firedancer binary |
| `slv r update:script` | `{net}/update_startup_config.yml` | Update start-validator.sh from template |
| `slv r update:geyser` | `{net}/update_geyser.yml` | Update Geyser plugin |
| `slv r get:snapshot` | `{net}/wget_snapshot.yml` | Download snapshot via aria2c |
| `slv r cleanup` | `cmn/rm_ledger.yml` | Remove ledger/snapshot files |
| `slv r list` | *(no playbook)* | List RPC nodes (CLI only) |
| `slv r update:allowed-ips` | *(no playbook)* | Update allowed IPs (CLI only) |
| `slv r init` | *(no playbook)* | Interactive wizard (CLI only) |

## All Playbooks

### Mainnet RPC (`mainnet-rpc/`)

| Playbook | Description |
|---|---|
| `init.yml` | Full RPC node initialization |
| `init_richat_geyser.yml` | Initialize Richat Geyser configuration |
| `restart_node.yml` | Restart RPC node |
| `start_node.yml` | Start RPC node |
| `stop_node.yml` | Stop RPC node |
| `install_solana.yml` | Build Solana from source |
| `install_agave.yml` | Build Agave from source |
| `install_jito.yml` | Build Jito from source |
| `install_rust.yml` | Install Rust toolchain |
| `install_package.yml` | Install system packages |
| `install_richat.yml` | Install Richat gRPC plugin |
| `install_of1.yml` | Install Old Faithful (yellowstone-faithful) |
| `install_of1_service.yml` | Setup Old Faithful systemd service |
| `geyser_build.yml` | Build Yellowstone gRPC from source |
| `geyser_richat_build.yml` | Build Richat gRPC plugin from source |
| `update_geyser.yml` | Update Geyser plugin |
| `update_startup_config.yml` | Update start-validator.sh from template |
| `update_ubuntu.yml` | Update Ubuntu packages |
| `setup_firedancer.yml` | Setup Firedancer for RPC |
| `setup-solv-service.yml` | Setup systemd service |
| `start-solv-service.yml` | Start systemd service |
| `setup_ufw.yml` | Configure UFW firewall |
| `setup_logrotate.yml` | Setup log rotation |
| `setup_norestart.yml` | Disable auto-restart |
| `configure_hugetlbfs.yml` | Configure hugepages for Firedancer |
| `fail2ban_solana_rate_limit.yml` | Setup fail2ban rate limiting |
| `fail2ban_sshd.yml` | Setup fail2ban for SSH |
| `allow_ufw.yml` | Add UFW allow rules |
| `add_solv.yml` | Add solv user |
| `copy_keys.yml` | Copy node keys |
| `create-start-validator-sh.yml` | Generate start script from template |
| `create-symlink.yml` | Create version symlinks |
| `mount_disks.yml` | Mount and format disks |
| `optimize_system.yml` | Optimize system settings |
| `run_restarter.yml` | Run restarter script |
| `run_snapshot_finder.yml` | Find and download best snapshot |

### Testnet RPC (`testnet-rpc/`)

| Playbook | Description |
|---|---|
| `init.yml` | Full testnet RPC initialization |
| `restart_node.yml` | Restart node |
| `start_node.yml` / `stop_node.yml` | Start/stop node |
| `install_solana.yml` | Build Solana from source |
| `install_agave.yml` / `install_jito.yml` | Build client from source |
| `install_richat.yml` | Install Richat plugin |
| `geyser_build.yml` | Build Yellowstone gRPC |
| `geyser_richat_build.yml` | Build Richat plugin from source |
| `update_geyser.yml` | Update Geyser plugin |
| `update_firedancer.yml` | Update Firedancer |
| `update_startup_config.yml` | Update start script |
| `setup_firedancer.yml` | Setup Firedancer |
| `setup_solv_service.yml` | Setup systemd service |
| `create-start-validator-sh.yml` | Generate start script |
| `wget_snapshot.yml` | Download snapshot |

### Devnet RPC (`devnet-rpc/`)

| Playbook | Description |
|---|---|
| `init.yml` | Full devnet RPC initialization |
| `restart_node.yml` | Restart node |
| `start_node.yml` / `stop_node.yml` | Start/stop node |
| `install_solana.yml` | Build Solana from source |
| `install_agave.yml` / `install_jito.yml` | Build client from source |
| `install_richat.yml` | Install Richat plugin |
| `geyser_build.yml` | Build Yellowstone gRPC |
| `geyser_richat_build.yml` | Build Richat plugin from source |
| `update_geyser.yml` | Update Geyser plugin |
| `update_startup_config.yml` | Update start script |
| `setup_firedancer.yml` | Setup Firedancer |
| `setup_solv_service.yml` | Setup systemd service |
| `create-start-validator-sh.yml` | Generate start script |

### Shared Common (`cmn/`)

| Playbook | Description |
|---|---|
| `build_solana.yml` | Build Solana from source (dispatches to build_agave/build_jito) |
| `build_agave.yml` | Build Agave from GitHub source |
| `build_jito.yml` | Build Jito from GitHub source |
| `install_solana.yml` | Install Solana binary (deprecated) |
| `install_package.yml` | Install system packages |
| `install_rust.yml` | Install Rust toolchain |
| `mount_disks.yml` / `mount-disks.yml` | Mount and format disks |
| `optimize_system.yml` | Optimize system settings |
| `disable_swap.yml` | Disable swap |
| `setup_logrotate.yml` | Configure log rotation |
| `setup_node_exporter.yml` | Setup Prometheus node exporter |
| `setup_norestart.yml` | Disable auto-restart |
| `setup_unstaked_identity.yml` | Setup unstaked identity keypair |
| `restart_solv.yml` | Restart solv service |
| `start_solv.yml` / `stop_solv.yml` | Start/stop solv service |
| `start_firedancer.yml` / `stop_firedancer.yml` | Start/stop Firedancer |
| `copy_restart_sh.yml` | Copy restarter script |
| `copy_rpc_keys.yml` | Copy RPC keys |
| `update_ubuntu.yml` | Update Ubuntu packages |
| `wget_snapshot.yml` | Download snapshot |
| `add_solv.yml` | Add solv user |
| `fix_permissions.yml` | Fix file permissions |

## Key Variables (extra_vars)

| Variable | Description | Default |
|---|---|---|
| `rpc_type` | RPC node type (`RPC`, `Index RPC`, `Geyser gRPC`, `Index RPC + gRPC`) | `RPC` |
| `validator_type` | Client type (`agave`, `jito`, `firedancer-agave`, `firedancer-jito`) | — |
| `solana_version` | Solana/Agave version | — |
| `jito_version` | Jito version | — |
| `firedancer_version` | Firedancer version | — |
| `yellowstone_grpc_version` | Yellowstone gRPC version | — |
| `richat_version` | Richat plugin version (e.g. `richat-v8.1.0`) | — |
| `snapshot_url` | Snapshot download URL | — |
| `tpu_peer_address` | TPU peer address (for Index RPC transaction forwarding) | — |
| `limit_ledger_size` | Ledger size limit | `200000000` (Index), `100000000` (others) |
| `dynamic_port_range` | Port range | `8000-8025` |
| `port_rpc` | RPC port | `8899` |
| `port_grpc` | gRPC port | `10000` |

## Geyser Plugin Sources

Both plugins are built from source (no binary downloads):
- **Yellowstone gRPC**: https://github.com/rpcpool/yellowstone-grpc
- **Richat**: https://github.com/lamports-dev/richat

## Usage

-e '{"rpc_type":"Index RPC","solana_version":"3.1.8","snapshot_url":"https://..."}'

--e-rpctypeindex-rpcsolanaversion318snapshoturlhttps.txt
No `versions.yml` required — all variables can be passed via `extra_vars`.

## Interactive Deployment Flow

See `AGENT.md` for the full step-by-step flow and `examples/inventory.yml` for output format.

### Required Variables

| Variable | Prompt | Validation |
|---|---|---|
| `server_ip` | "Target server IP?" | Valid IPv4 |
| `network` | "mainnet, testnet, or devnet?" | `mainnet`, `testnet`, `devnet` |
| `region` | "Server region?" | String |
| `rpc_type` | "RPC type?" | `RPC`, `Index RPC`, `Geyser gRPC`, `Index RPC + gRPC` |
| `validator_type` | "Underlying client?" | `agave`, `jito`, `jito-bam`, `firedancer-agave` |
| `solana_version` | "Solana version? (default: 3.1.8)" | Semver |
| `identity_account` | "Node identity pubkey?" | Base58 pubkey |
| `snapshot_url` | "Snapshot URL? (auto for ERPC)" | URL (cannot be empty for init) |

### Conditionally Required Variables

| Variable | Default | When Required |
|---|---|---|
| `jito_version` | Matches solana_version | jito/jito-bam types |
| `firedancer_version` | — | firedancer types |
| `yellowstone_grpc_version` | — | Yellowstone gRPC plugin |
| `richat_version` | — | Richat plugin |
| `of1_version` | — | Index RPC (Old Faithful) |
| `epoch` | — | Index RPC (faithful service) |
| `faithful_proxy_target_url` | — | Index RPC |

### Optional Variables

| Variable | Default | When Required |
|---|---|---|
| `ssh_user` | `solv` | Always |
| `port_rpc` | `8899` (ERPC: `7211`) | Always |
| `limit_ledger_size` | `100000000` | Always |
| `dynamic_port_range` | `8000-8025` | Always |
| `port_grpc` | `10000` | gRPC types only |
| `tpu_peer_address` | — | Index RPC (tx forwarding) |
| `allowed_ssh_ips` | — | Strongly recommended (UFW) |
| `allowed_ips` | — | Optional (UFW) |
| `expected_shred_version` | Epoch-dependent | Testnet only |

### Optional: Reference RPC

| Variable | Description | Default |
|---|---|---|
| `reference_rpc_url` | Reference RPC endpoint for slot sync comparison (e.g., ERPC) | — |

ERPC API keys are free at https://erpc.global — enables full slot sync monitoring during deployment and updates.

### Pre-flight: Fresh Server Setup

-e '{"ansible_user":"ubuntu"}' --become

--e-ansibleuserubuntu---become.txt
### Deployment Command

All paths relative to skill's `ansible/` directory:
example.txt
ansible/
  mainnet-rpc/   — Mainnet RPC playbooks
  testnet-rpc/   — Testnet RPC playbooks
  devnet-rpc/    — Devnet RPC playbooks
  cmn/           — Shared common playbooks
jinja/
  mainnet-rpc/   — Mainnet Jinja2 templates
  testnet-rpc/   — Testnet Jinja2 templates
  devnet-rpc/    — Devnet Jinja2 templates
  cmn/           — Shared templates
example.sh
cd /path/to/slv-rpc/ansible/
ansible-playbook -i inventory.yml {network}-rpc/init.yml \
  -e '{"rpc_type":"<type>","solana_version":"<version>"}'

Tags

#devops_and-cloud

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author poppin-fumi
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install slv-rpc