🧪 Skills

Slv Rpc

Ansible playbooks and templates to deploy, manage, and update Solana RPC nodes on mainnet, testnet, and devnet with support for RPC, indexing, and gRPC.

v0.10.2
❤️ 4
⬇️ 261
👁 2
Share

Description

SLV RPC Skill

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

Supported RPC Types

Type Description
RPC Standard RPC node
Index RPC Full-index RPC node (with Old Faithful/yellowstone-faithful)
Geyser gRPC RPC with Geyser gRPC streaming
Index RPC + gRPC Full-index + gRPC streaming

Directory Structure

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 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):

Usage

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

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

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

Deployment Command

All paths relative to skill's ansible/ directory:

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

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs