Wer ESP32-basierte Micro-Miner wie den NMMiner oder NerdMiner betreibt, nutzt diese meist als digitale Solo-Lotterie. Doch statt sich von fremden Pools abhängig zu machen, lässt sich mit Public-Pool und Bitcoin Core (bitcoind) in wenigen Minuten ein vollkommen autonomer, gebührenfreier Solo-Mining-Pool im eigenen Homelab realisieren.
1. Die Speicherplatz-Frage: Pruned Node statt 700 GB NVMe
Eine unbeschnittene Full Node belegt über 600–700 GB Speicherplatz. Für das Generieren von Mining-Jobs (getblocktemplate) reicht jedoch eine Pruned Node vollkommen aus. Mit dem Parameter -prune=5000 validiert der Node die Historie vollständig, löscht alte Blockdaten jedoch automatisch und belegt dauerhaft unter 15 GB Speicherplatz.
2. Docker-Compose Stack (bitcoind, public-pool & public-pool-ui)
Das Setup besteht aus drei Komponenten im Docker-Bridge-Netzwerk: Bitcoin Core, dem Public-Pool Backend (Stratum + REST-API) und dem Angular-Frontend. Über -dbcache=4000 wird der initiale Blockchain-Sync im Arbeitsspeicher massiv beschleunigt:
version: "3.8"
services:
bitcoind:
image: kylemanna/bitcoind:latest
container_name: bitcoind
restart: unless-stopped
volumes:
- /home/docker/bitcoin:/bitcoin/.bitcoin
ports:
- "8332:8332" # RPC-Port für Public-Pool
- "8333:8333" # P2P-Port für schnellen Peer-Sync
environment:
- RPCUSER=poolrpcuser
- RPCPASSWORD=EinSicheresPasswort123!
command:
- -server=1
- -rpcuser=poolrpcuser
- -rpcpassword=EinSicheresPasswort123!
- -rpcallowip=0.0.0.0/0
- -rpcbind=0.0.0.0
- -disablewallet=1
- -fallbackfee=0.00001
- -prune=5000
- -dbcache=4000
- -maxconnections=20
network_mode: bridge
public-pool:
image: ghcr.io/benjamin-wilson/public-pool:latest
container_name: public-pool
restart: unless-stopped
ports:
- "21496:21496" # Stratum-Port für Miner (TCP)
- "3334:3334" # Backend REST- & WebSocket-API
environment:
- BITCOIN_RPC_URL=http://172.17.0.1:8332
- BITCOIN_RPC_USER=poolrpcuser
- BITCOIN_RPC_PASSWORD=EinSicheresPasswort123!
- BITCOIN_RPC_TIMEOUT=10000
- API_PORT=3334
- STRATUM_PORT=21496
- NETWORK=mainnet
- POOL_FEE=0
depends_on:
- bitcoind
network_mode: bridge
public-pool-ui:
image: ghcr.io/benjamin-wilson/public-pool-ui:latest
container_name: public-pool-ui
restart: unless-stopped
ports:
- "8080:80" # Web-Frontend
environment:
- API_URL=https://pool.tessmann.dev/api
- STRATUM_URL=pool.tessmann.dev:21496
depends_on:
- public-pool
network_mode: bridge
3. Nginx Proxy Manager (NPM) Konfiguration
Damit das Web-Dashboard und die Backend-API sauber und ohne Cross-Origin-Probleme unter einer einzigen Domain (pool.tessmann.dev) laufen, konfigurieren wir den Proxy-Host in NPM wie folgt:
Reiter "Details":
- Domain Names:
pool.tessmann.dev - Scheme:
http - Forward Hostname / IP:
192.168.5.215(Docker-Host-IP) - Forward Port:
8080(Port des Web-Frontends) - Websockets Support: Aktivieren (essenziell für Live-Updates der Hashrate)
- Block Common Exploits: Aktivieren
Reiter "Custom Locations" (API-Routing):
Lege eine Custom Location an, damit Anfragen an /api direkt an das NestJS-Backend auf Port 3334 durchgereicht werden:
- Location:
/api/ - Scheme:
http - Forward Hostname / IP:
192.168.5.215 - Forward Port:
3334
Klicke auf das Zahnrad-Symbol der Location und trage folgende Nginx-Direktiven ein, um falsche Redirects auf externe Domains zu unterbinden:
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_redirect off;
Reiter "SSL":
- SSL-Zertifikat auswählen (Let's Encrypt / Wildcard)
- Force SSL und HTTP/2 Support aktivieren.
4. Router / Firewall (Stratum TCP-Port 21496)
Das Mining-Protokoll (Stratum) ist reines TCP und kann nicht über den HTTP-Reverse-Proxy geleitet werden. Richte im Router (z. B. Fritz!Box / OPNsense) eine Portweiterleitung ein:
- Protokoll: TCP
- Externer Port:
21496→ Interner Host:192.168.5.215:21496
5. Miner anbinden
Im Webinterface deines NMMiner oder NerdMiner werden die Verbindungsdaten hinterlegt:
- Stratum Host:
pool.tessmann.dev(oder intern die IP deines Hosts) - Port:
21496 - User:
DEINE_BITCOIN_WALLET_ADRESSE.workerName - Passwort:
x
Sobald die Bitcoin Node synchronisiert ist (verificationprogress = 1.0), generiert die Node gültige Block-Templates. Findet ein angeschlossener Miner einen Block, landet die gesamte Coinbase-Belohnung (3,125 BTC + Transaktionsgebühren) ohne Abzüge direkt auf deiner Wallet.
💬 Feedback & Diskussion 0
Kommentar hinterlassen
Noch keine Kommentare zu diesem Guide vorhanden. Sei der Erste!