A turn-key, containerized mining pool template designed for communities. Fork it, edit one config file, and run docker compose up β no deep technical expertise required. Built on the MiningCore pool engine with a Nuxt 3 dashboard and optional Discord bot integration.
Current Status: π§ Alpha β Monero pool is operational. Frontend dashboard (Phase 4) is actively in development.
Most open-source pool software is either abandoned, requires significant technical skill to customize, or has no community features at all. This project is different:
- Config-driven branding β Communities customize via a single YAML file, not code surgery
- Community goals β Turn mining into a shared activity by funding server costs or events together
- Block celebrations β Real-time animations when the pool finds a block
- Discord-native β Bot integration meets communities where they already live
- Fair-launch coins only β XMR (CPU mining) and ERG (GPU mining) are ASIC-resistant and philosophically aligned with decentralized mining
- Dockerized everything β
docker compose upand you're live. No dependency hell
This isn't just a pool dashboard. It's a community funding platform that happens to use crypto mining.
The entire stack runs on Docker Compose, orchestrating the following services:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DOCKER COMPOSE STACK β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β monero-node β β ergo-node β β postgres β β
β β (CPU coin) β β (GPU coin) β β (database) β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β ββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββ΄βββββββ β
β β MININGCORE (Pool Engine) β β
β β REST API on :4000 β β
β ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββ β
β β NGINX (Reverse Proxy) β β
β β /api/* β MiningCore :4000 β β
β β /* β Nuxt Frontend :3000 β β
β ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββ β
β β NUXT 3 FRONTEND (:3000) β β
β β Dashboard β Miners β Blocks β Goals β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β DISCORD BOT (optional) β β
β β Block alerts β Role rewards β Stats commands β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Service | Technology | Status |
|---|---|---|
| Pool Engine | MiningCore (C#) | β Live |
| Database | PostgreSQL 13 | β Live |
| Monero Node | monerod v0.18.4.5 (pruned) | β Synced |
| Monero Wallet | monero-wallet-rpc | β Connected |
| Ergo Node | ergo-node (official image) | π Syncing |
| Frontend | Nuxt 3 | π¨ In Development |
| Reverse Proxy | Nginx | β³ Phase 4 |
| Discord Bot | discord.js v14 | β³ Phase 4 |
- Docker Desktop (Windows/Mac/Linux)
- 80GB+ free disk space (SSD recommended β Monero runs in pruned mode)
- 8GB+ RAM
git clone https://github.com/Acquiredl/community-mining-pool
cd community-mining-poolcp config/.env.example config/.envEdit config/.env with your values:
DB_PASSWORD=your_secure_password_here
POOL_NAME=My Community PoolEdit config/pool-theme/pool.config.yml to set your pool's name, colors, logo, and community goals. This is the only file most communities will ever need to touch:
pool:
name: "Pixel Pickaxe Pool"
tagline: "Mining for the community"
theme:
primary_color: "#8B5CF6"
mode: "dark"
goals:
enabled: true
items:
- title: "Monthly Server Costs"
target_xmr: 0.5See CUSTOMIZATION.md for the full guide.
cd docker
docker compose up -dBlockchain nodes will begin syncing. Monero runs in pruned mode and syncs faster; Ergo uses the official image with bootstrap enabled.
docker compose logs -f miningcoreLook for [xmr1] Pool Online to confirm Monero is accepting connections.
Everything communities need to customize lives in one file:
config/
βββ pool-theme/
βββ pool.config.yml β Edit this file
This file controls:
- Pool name, tagline, logo, and favicon
- Theme colors, fonts, dark/light mode, border radius, glow effects
- Which dashboard pages are enabled
- Community goal targets and wallet addresses
- Block celebration style (confetti, fireworks, flash)
- Discord integration settings
- Stratum connection details shown in the Getting Started guide
The Nuxt frontend reads this YAML at startup and injects all values as CSS custom properties and a global usePoolConfig() composable. No code changes needed for basic customization.
| Coin | Algorithm | Mining Type | Node |
|---|---|---|---|
| Monero (XMR) | RandomX | CPU | monerod (pruned) |
| Ergo (ERG) | Autolykos v2 | GPU | ergo-node (official) |
Both coins are ASIC-resistant and fair-launch, aligned with the project's decentralized mining philosophy.
community-mining-pool/
βββ docker/
β βββ docker-compose.yml # Full stack definition
β βββ Dockerfile.pool # MiningCore build
β
βββ config/
β βββ miningcore/
β β βββ config.json # Pool engine config (coins, payouts, ports)
β βββ pool-theme/
β β βββ pool.config.yml # β Community customization lives here
β βββ nginx/
β β βββ nginx.conf # Reverse proxy config
β βββ .env.example # Template for secrets
β
βββ frontend/ # Nuxt 3 dashboard (Phase 4)
β βββ pages/
β β βββ index.vue # Home / pool overview
β β βββ miners/[address].vue # Miner lookup (dynamic route)
β β βββ blocks.vue # Block history
β β βββ getting-started.vue # Connection guides
β β βββ goals.vue # Community goal tracker
β βββ components/
β β βββ HashrateChart.vue
β β βββ GoalTracker.vue
β β βββ BlockCelebration.vue
β β βββ ...
β βββ composables/
β βββ usePoolConfig.ts # Reads pool.config.yml
β βββ usePoolApi.ts # MiningCore API wrapper
β
βββ discord-bot/ # Optional Discord integration (Phase 4)
β βββ src/
β βββ commands/ # !pool stats, !pool mystats, etc.
β βββ events/ # Block alerts, daily summaries
β
βββ .github/
βββ workflows/
βββ syntax-check.yml # CI: validates JSON/YAML on every push
Recommended software: XMRig
xmrig -o pool.example.com:3333 -u YOUR_WALLET_ADDRESS -p YourWorkerNameRecommended software: lolMiner or NBMiner
lolMiner --algo AUTOLYKOS2 --pool pool.example.com:3052 --user YOUR_WALLET_ADDRESS.WorkerNameReplace pool.example.com with your pool's domain and update ports to match your pool.config.yml.
- MiningCore + PostgreSQL stack
- Docker Compose orchestration
- Gitflow workflow + CI syntax checks
- monerod with ZMQ block notification
- monero-wallet-rpc connected
- PPLNS payout scheme, VarDiff configured
- Pool confirmed online, accepting shares
- Ergo node deployed (official Docker image)
- Wallet address generated
- Node syncing β integration in progress
- 4A β Core dashboard (pool stats, miner lookup, block history) β
- 4B β Config-driven theming system π¨
- 4C β Community goals + block celebrations β³
- 4D β Discord bot β³
- SSL/TLS on stratum ports and API
- Nginx rate limiting and DDoS protection
- Payout system end-to-end testing
- CUSTOMIZATION.md guide for community forks
Least privilege: Blockchain nodes run as non-root users inside containers. The database has no externally exposed ports.
Network isolation: Only stratum ports (for miners) and the Nginx proxy (for the web UI) are exposed to the internet. All inter-service communication stays on a private Docker network.
Secret management: Passwords and tokens live in .env (gitignored). Never hardcoded in config files or committed to the repository.
Infrastructure as code: The entire stack is defined in docker-compose.yml. Disaster recovery means running docker compose up on a new server.
This project follows Gitflow:
main β production-ready only, tagged releases
dev β integration branch, all features merge here first
feature/[name] β individual feature development
Never push directly to main. Feature branches merge to dev; dev merges to main at release.
# Start a new feature
git checkout dev
git checkout -b feature/my-feature
# Merge when done
git checkout dev
git merge feature/my-featureA GitHub Actions workflow automatically validates JSON and YAML syntax on every push to catch config errors before they reach the pool.
Contributions are welcome! This project is intended as a community template β the more it gets tested across different setups, the better it becomes for everyone.
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-improvement) - Commit your changes
- Open a pull request against
dev
Please don't open PRs directly against main.
MIT β fork it, customize it, run it for your community.
- MiningCore β Pool engine
- Nuxt 3 β Frontend framework
- PostgreSQL β Database
- discord.js β Discord bot framework
- Docker β Containerization