Skip to content

Acquiredl/community-mining-pool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

25 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

⛏️ Community Mining Pool β€” Open Source Template

Status Docker Monero License

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.


🌟 Why This Exists

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 up and 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.


πŸ—οΈ Architecture

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 Status

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

πŸš€ Quick Start

Prerequisites

  • Docker Desktop (Windows/Mac/Linux)
  • 80GB+ free disk space (SSD recommended β€” Monero runs in pruned mode)
  • 8GB+ RAM

1. Clone the Repository

git clone https://github.com/Acquiredl/community-mining-pool
cd community-mining-pool

2. Configure Your Environment

cp config/.env.example config/.env

Edit config/.env with your values:

DB_PASSWORD=your_secure_password_here
POOL_NAME=My Community Pool

3. Customize Your Pool

Edit 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.5

See CUSTOMIZATION.md for the full guide.

4. Start the Stack

cd docker
docker compose up -d

Blockchain nodes will begin syncing. Monero runs in pruned mode and syncs faster; Ergo uses the official image with bootstrap enabled.

5. Verify Everything is Running

docker compose logs -f miningcore

Look for [xmr1] Pool Online to confirm Monero is accepting connections.


βš™οΈ Configuration

The Theming System

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.

Supported Coins

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.


πŸ“ Project Structure

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

πŸ”Œ Connecting Miners

Monero (CPU Mining)

Recommended software: XMRig

xmrig -o pool.example.com:3333 -u YOUR_WALLET_ADDRESS -p YourWorkerName

Ergo (GPU Mining)

Recommended software: lolMiner or NBMiner

lolMiner --algo AUTOLYKOS2 --pool pool.example.com:3052 --user YOUR_WALLET_ADDRESS.WorkerName

Replace pool.example.com with your pool's domain and update ports to match your pool.config.yml.


πŸ›£οΈ Roadmap

βœ… Phase 1 β€” Foundation

  • MiningCore + PostgreSQL stack
  • Docker Compose orchestration
  • Gitflow workflow + CI syntax checks

βœ… Phase 2 β€” Monero Integration

  • monerod with ZMQ block notification
  • monero-wallet-rpc connected
  • PPLNS payout scheme, VarDiff configured
  • Pool confirmed online, accepting shares

πŸ”„ Phase 3 β€” Ergo Integration

  • Ergo node deployed (official Docker image)
  • Wallet address generated
  • Node syncing β€” integration in progress

πŸ”¨ Phase 4 β€” Frontend & Community Features (Active)

  • 4A β€” Core dashboard (pool stats, miner lookup, block history) βœ…
  • 4B β€” Config-driven theming system πŸ”¨
  • 4C β€” Community goals + block celebrations ⏳
  • 4D β€” Discord bot ⏳

⏳ Phase 5 β€” Production Hardening

  • 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

πŸ”’ Security Model

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.


πŸ§‘β€πŸ’» Development

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-feature

A GitHub Actions workflow automatically validates JSON and YAML syntax on every push to catch config errors before they reach the pool.


🀝 Contributing

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.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-improvement)
  3. Commit your changes
  4. Open a pull request against dev

Please don't open PRs directly against main.


πŸ“„ License

MIT β€” fork it, customize it, run it for your community.


πŸ™ Built With

About

A high-performance, containerized crypto mining pool stack built on Miningcore. Currently in Alpha. Open-source, low-fee, and designed for community deployment via Docker Compose.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors