personal_infra/ansible/roles/xmrblocks/defaults/main.yml
counterweight f33f1a4b67
monero: check every five minutes again
The probes, the unit check and the public checks ran once a day with 26h
windows, justified as "a multi-week initial sync on a rotating disk". That
stopped being true: the node is synced, and a cold explorer page now renders
in 29s and a warm one in 0.2s - polling every 5 minutes is what keeps it warm.
A dead monerod could go unnoticed for a day.

Back to the standard 5m cadence and 11m heartbeat; the per-host
service_health override on monerod-box is gone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 22:10:24 +02:00

82 lines
4 KiB
YAML

# xmrblocks - the Onion Monero Blockchain Explorer.
# https://github.com/moneroexamples/onion-monero-blockchain-explorer
#
# This role INSTALLS a prebuilt binary; it does not compile one. xmrblocks links
# 21 static libraries out of a compiled monero source tree, and building that
# needs ~3.2 GB of RAM for a single compiler (~5.5 GB at -j4). monerod-box has
# 2 GB, so it cannot build this at any -j. See README.md.
#
# The artifact is produced by scripts/build-xmrblocks.sh, which runs the whole
# build in a debian:13 container - so it is reproducible on any machine with
# Docker, not just the one that happened to build it.
# --- The artifact ------------------------------------------------------------
# A directory on the CONTROL NODE holding `xmrblocks`, `templates/` and MANIFEST.
xmrblocks_artifact_dir: "{{ lookup('env', 'HOME') }}/personal_infra_artifacts/xmrblocks"
# Pinned checksum of the binary we intend to ship. Asserted on the control node
# BEFORE anything is copied: shipping an unverified binary to a host is the one
# thing this role must never do. Update it together with the build pins in
# scripts/build-xmrblocks.sh.
xmrblocks_sha256: "a40c495e73a44fbb3b666fcd8a01466a2aef12ed1906558f3d5b7e458c256af6"
# Recorded so the deployed host can be matched back to a build.
xmrblocks_explorer_commit: "29593b709edeb23daba035009ccd134a5862543a"
xmrblocks_monero_version: "0.18.5.1"
# --- Install layout ----------------------------------------------------------
# The binary hardcodes TMPL_DIR as "./templates", relative to the working
# directory - so templates MUST sit beside the binary and the unit MUST set
# WorkingDirectory. Get that wrong and it starts fine, then fails per-request.
xmrblocks_dir: /opt/xmrblocks
# Runs as the monero user: the explorer opens monerod's LMDB directly, and
# /var/lib/monero is 0750 monero:monero. It opens it READ-ONLY (DBF_RDONLY in
# MicroCore::init), so it is safe alongside a running monerod.
xmrblocks_user: monero
xmrblocks_group: monero
# --- Runtime -----------------------------------------------------------------
# The LMDB directory, not the data directory: monerod's data-dir plus /lmdb.
xmrblocks_bc_path: /var/lib/monero/lmdb
# 0.0.0.0 so the edge host can reach it over the tailnet. Nothing on the LAN or
# the internet can: Tailscale's ts-input chain sits ahead of UFW, and the only
# public route is the Caddy vhost on vipy.
xmrblocks_bind: "0.0.0.0"
xmrblocks_port: 8081
# The unrestricted RPC on loopback. Used for the mempool view and tx pushing.
xmrblocks_daemon_url: "127.0.0.1:18081"
# monerod's --rpc-login guards BOTH its RPC servers, so the explorer needs it.
xmrblocks_rpc_user: "{{ monero_rpc_user | default('') }}"
xmrblocks_rpc_password: "{{ monero_rpc_password | default('') }}"
# Upstream's own defaults (the Dockerfile CMD).
# NOTE: enable-pusher lets a visitor submit a raw transaction through YOUR node.
# It is a deliberate choice here, not an oversight.
xmrblocks_enable_json_api: true
xmrblocks_enable_autorefresh: true
xmrblocks_enable_pusher: true
# Crow's thread count. Held low on purpose: this box has 2 GB and monerod
# already uses ~1.3 GB of it.
xmrblocks_concurrency: 2
# The unit file carries the RPC login, so --diff is suppressed by default.
xmrblocks_reveal_config: false
# --- Health check ------------------------------------------------------------
# WHERE TO REPORT HEALTH — the one place to plug in monitoring. Empty means
# check, exit honestly, report nowhere.
healthcheck_push_url: ""
# Bearer token for the Gatus external endpoint. Required whenever a push URL
# is set: Gatus rejects an unauthenticated push with 401.
healthcheck_push_token: ""
# WHEN TO CHECK. Every 5 minutes, offset 2 minutes from monerod's own check so
# the two do not land together. On NVMe a cold page render measured 29s and a
# warm one 0.2s (2026-10-17); a 5-minute poll is what keeps it warm. See
# roles/monero/defaults for why the name is prefixed and why this is paired
# with the 11m heartbeat in infra/403_service_probe_registration.yml.
xmrblocks_healthcheck_on_calendar: "*:2/5"