Docs/Operate

Running public seed nodes

New nodes find the network through seed nodes. Run at least three on different providers and continents, and publish them two ways:

  1. DNS seeds: an A/AAAA record set seed.<yourdomain> that returns the IPs of all seed nodes. Nodes resolve it on start (-dnsseed, and the compiled-in default list in cmd/argonmined/main.go once you have a domain).
  2. Hardcoded seeds: the same IPs in defaultSeeds in cmd/argonmined/main.go and cmd/argonmine-app/main.go, as a fallback if DNS is blocked.

Option A: Docker (any VPS)

git clone <repo> && cd <repo>
export ARGONMINE_NETWORK=mainnet ARGONMINE_RPC_TOKEN=$(openssl rand -hex 24)
docker compose -f deploy/docker-compose.yml up -d --build
docker compose -f deploy/docker-compose.yml logs -f node

Open TCP 9333 (mainnet) or 19333 (testnet) in the provider firewall. The explorer listens on 8380; put Caddy or nginx with TLS in front of it.

Option B: systemd (bare Linux)

scripts/release.sh                      # builds release/argonmine-<ver>-linux-amd64.zip
scp release/*linux-amd64.zip host:
ssh host 'unzip argonmine-*.zip && sudo install -m755 argonmined /usr/local/bin/'
sudo useradd -r -m -d /var/lib/argonmine argonmine
sudo install -m644 deploy/argonmined.service /etc/systemd/system/
sudo systemctl enable --now argonmined

Option C: Railway (or Render / Fly)

deploy/railway/ holds a single image that runs the seed node, the explorer and the website, selected by ARGONMINE_ROLE, plus the service layout, variables and the CLI commands used for the public testnet deployment. See deploy/railway/README.md. Platforms that only expose HTTP cannot be P2P seeds; Railway's TCP proxy covers that. Behind a TCP proxy every inbound peer arrives from the proxy's address, so run the node with -behind-proxy (on Railway: ARGONMINE_ARGS=-behind-proxy); otherwise one misbehaving peer could get the proxy's address banned and three connections would fill its per-address cap. See Connection limits.

Hosting map (one domain)

Host Service Notes
domain.com argonmine-web -app https://app.domain.com -site https://domain.com Serves the rendered documentation at /docs and redirects / to the app. There is no landing page or downloads page by decision: the app is the product.
app.domain.com the same argonmine-web instance (requests for this host get the app) The browser app: creates a wallet in the browser, mines whole blocks with the WebAssembly miner using templates from the explorer, shows balance and history from the explorer, links to docs, explorer and bridge. Point both hostnames at the one process, or serve the static export's index.html here.
explorer.domain.com argonmine-explorer -listen 0.0.0.0:8380 Behind a TLS reverse proxy; one instance per network. Also the work server for browser miners (/api/work): it builds block templates from its node and submits solved blocks, holding no funds.
bridge.domain.com argonmine-bridge -leader Guardians on separate hosts and providers; followers expose /guardian/* only to the leader (firewall or mTLS).
seed.domain.com DNS A/AAAA records List every seed node's IP.

The public testnet on Railway uses app., explorer. and bridge. argonmine.com; the bare domain is kept for a landing page, so the app also serves the docs at /docs. Names, services, ports and DNS records are in railway/README.md.

Put Caddy or nginx in front of every HTTP service for TLS; none of them terminates TLS themselves.

Checklist per seed

  • argonmined reachable: nc -vz <ip> 9333 from outside.
  • Behind a TCP proxy or load balancer: -behind-proxy is set.
  • Clock synced (chrony/ntpd). A node more than two hours off rejects valid blocks.
  • Disk: the chain grows at most ~1 MB per 10 minutes (about 50 GB/year at full blocks).
  • Monitor with the RPC getpeerinfo and getblockchaininfo; alert if peers drop to 0 or height stalls for 2 hours.
  • Keep the RPC bound to localhost (the Docker compose file binds it only inside the compose network).