Installation Guide ​
This guide covers different installation methods for Minepanel, from simple to advanced setups.
Installation Methods ​
Choose the method that best fits your needs:
- Quick Install - Recommended for most users
- From Source - Clone the repository
- Split Services - Separate frontend/backend for reverse proxies
- Development Setup - For contributors and developers
Quick Install ​
The fastest way to get started. Perfect for trying out Minepanel or running on a local network.
Cross-Platform
This configuration works on all operating systems (Linux, macOS, Windows). Variables with :- syntax provide sensible defaults that work everywhere.
Step 1: Create docker-compose.yml ​
services:
minepanel:
image: ketbom/minepanel:latest
ports:
- "${BACKEND_PORT:-8091}:8091"
- "${FRONTEND_PORT:-3000}:3000"
environment:
# Backend Configuration
- SERVERS_DIR=/app/servers
- FRONTEND_URL=${FRONTEND_URL:-http://localhost:3000}
- JWT_SECRET=${JWT_SECRET} # Generate with: openssl rand -base64 32
- CLIENT_PASSWORD=${CLIENT_PASSWORD:-admin}
- CLIENT_USERNAME=${CLIENT_USERNAME:-admin}
# Frontend Configuration
- NEXT_PUBLIC_FILEBROWSER_URL=${NEXT_PUBLIC_FILEBROWSER_URL:-http://localhost:8080}
- NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL:-http://localhost:8091}
- NEXT_PUBLIC_DEFAULT_LANGUAGE=${NEXT_PUBLIC_DEFAULT_LANGUAGE:-en}
volumes:
- ${SERVERS_DIR:-./servers}:/app/servers
- /var/run/docker.sock:/var/run/docker.sock
- ${DATA_DIR:-./data}:/app/data
restart: always
filebrowser:
image: hurlenko/filebrowser
ports:
- "${FILEBROWSER_PORT:-8080}:8080"
volumes:
- ${SERVERS_DIR:-./servers}:/data
- ${FILEBROWSER_DIR:-./filebrowser-data}:/config
environment:
- FB_BASEURL=/
restart: alwaysStep 2: Launch ​
# Create required directories
mkdir -p servers filebrowser-data data
# Generate JWT secret
export JWT_SECRET=$(openssl rand -base64 32)
# Start services
docker compose up -dEnvironment Variables
Use a .env file to customize directories, ports, and other settings without modifying docker-compose.yml:
# .env file
JWT_SECRET=your_generated_secret
SERVERS_DIR=./servers
DATA_DIR=./data
FILEBROWSER_DIR=./filebrowser-dataSee Configuration Guide for all available variables.
Install from Source ​
Clone the repository for the latest development version or to modify the code.
# Clone repository
git clone https://github.com/Ketbome/minepanel.git
cd minepanel
# Create required directories
mkdir -p servers filebrowser-data data
# Generate JWT secret (optional, can use .env)
export JWT_SECRET=$(openssl rand -base64 32)
# Start services
docker compose up -dUpdate to Latest ​
cd minepanel
git pull origin main
docker compose pull
docker compose up -dSplit Services Installation ​
Use this method if you want to:
- Use a reverse proxy (nginx-proxy, Traefik, Caddy)
- Have separate domains for frontend/backend
- Add SSL certificates with Let's Encrypt
- Scale services independently
Using docker-compose.split.yml ​
git clone https://github.com/Ketbome/minepanel.git
cd minepanel
# Create required directories
mkdir -p servers filebrowser-data data
# Generate JWT secret
export JWT_SECRET=$(openssl rand -base64 32)
# Start services
docker compose -f docker-compose.split.yml up -dThis exposes:
- Backend: Port 9090
- Frontend: Port 3000
- Filebrowser: Port 8080
With nginx-proxy + Let's Encrypt ​
Perfect for production deployments with SSL certificates.
Step 1: Setup nginx-proxy ​
First, set up nginx-proxy with Let's Encrypt companion:
# nginx-proxy/docker-compose.yml
version: "3"
services:
nginx-proxy:
image: nginxproxy/nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
restart: always
letsencrypt:
image: nginxproxy/acme-companion
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- ./acme:/etc/acme.sh
environment:
- DEFAULT_EMAIL=your-email@example.com
restart: always
networks:
default:
name: nginx-proxy
external: falsecd nginx-proxy
docker compose up -dStep 2: Configure Minepanel ​
Modify docker-compose.split.yml:
networks:
default:
name: nginx-proxy
external: true
services:
frontend:
image: ketbom/minepanel-frontend:latest
expose:
- 3000
environment:
- VIRTUAL_HOST=minepanel.yourdomain.com
- VIRTUAL_PORT=3000
- LETSENCRYPT_HOST=minepanel.yourdomain.com
- LETSENCRYPT_EMAIL=your-email@example.com
- NEXT_PUBLIC_BACKEND_URL=https://api.yourdomain.com
- NEXT_PUBLIC_FILEBROWSER_URL=https://files.yourdomain.com
- NEXT_PUBLIC_DEFAULT_LANGUAGE=en
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
backend:
image: ketbom/minepanel-backend:latest
expose:
- 8091
environment:
- VIRTUAL_HOST=api.yourdomain.com
- VIRTUAL_PORT=8091
- LETSENCRYPT_HOST=api.yourdomain.com
- LETSENCRYPT_EMAIL=your-email@example.com
- SERVERS_DIR=/app/servers
- FRONTEND_URL=https://minepanel.yourdomain.com
- CLIENT_PASSWORD=admin
- CLIENT_USERNAME=admin
- DEFAULT_LANGUAGE=en
- JWT_SECRET=
volumes:
- ./servers:/app/servers
- /var/run/docker.sock:/var/run/docker.sock
restart: always
filebrowser:
image: hurlenko/filebrowser
expose:
- 8080
environment:
- VIRTUAL_HOST=files.yourdomain.com
- VIRTUAL_PORT=8080
- LETSENCRYPT_HOST=files.yourdomain.com
- LETSENCRYPT_EMAIL=your-email@example.com
- FB_BASEURL=/
volumes:
- ./servers:/data
- ./filebrowser-data:/config
restart: alwaysDNS Configuration
Make sure your domains point to your server's IP address before starting:
- minepanel.yourdomain.com → Your server IP
- api.yourdomain.com → Your server IP
- files.yourdomain.com → Your server IP
docker compose -f docker-compose.split.yml up -dDevelopment Setup ​
For contributors or those who want to modify the code.
Prerequisites ​
- Node.js 18+ and npm
- Docker and Docker Compose
- Git
Setup ​
# Clone repository
git clone https://github.com/Ketbome/minepanel.git
cd minepanel
# Install backend dependencies
cd backend
npm install
# Install frontend dependencies
cd ../frontend
npm installRun in Development Mode ​
Terminal 1 - Backend:
cd backend
npm run start:devTerminal 2 - Frontend:
cd frontend
npm run devTerminal 3 - Filebrowser (optional):
docker run -d \
--name filebrowser \
-p 8080:8080 \
-v $(pwd)/servers:/data \
hurlenko/filebrowserNow you can access:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8091
- Filebrowser: http://localhost:8080
Build Custom Docker Image ​
# Build single-arch image
docker build -t minepanel:custom .
# Test your custom build
docker compose up -dBuild Multi-Architecture ​
For publishing to Docker Hub (requires buildx):
# Create and use buildx builder
docker buildx create --name multiplatform --use --bootstrap
# Build and push for multiple architectures
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t username/minepanel:latest \
--push .Platform-Specific Notes ​
Linux ​
Make sure your user is in the docker group:
sudo usermod -aG docker $USER
# Log out and back inmacOS ​
Install Docker Desktop for Mac. Everything works out of the box.
Windows ​
- Install WSL2
- Install Docker Desktop for Windows
- Enable WSL2 integration in Docker Desktop settings
- Run commands inside WSL2 (Ubuntu terminal)
Better Performance
Use WSL2 file system for better performance: /home/username/minepanel instead of /mnt/c/Users/...
Raspberry Pi / ARM ​
Minepanel fully supports ARM64 architecture. Use the same installation commands - Docker automatically pulls the correct ARM image.
Performance Note
On Raspberry Pi 4 (4GB+), you can run 2-3 small Minecraft servers. Allocate 1-2GB RAM per server.
Custom Directories ​
To use custom directories on any platform, set environment variables:
# Create .env file
SERVERS_DIR=/custom/path/servers
DATA_DIR=/custom/path/data
FILEBROWSER_DIR=/custom/path/filebrowserSee the Configuration Guide for more details.
Uninstalling ​
To completely remove Minepanel:
# Stop all containers
docker compose down
# Remove all data (WARNING: This deletes everything!)
rm -rf servers/ filebrowser-data/ data/
# Remove Docker images
docker rmi ketbom/minepanel:latest
docker rmi hurlenko/filebrowserTo keep your server data but stop the panel:
# Just stop containers
docker compose down
# Start again later
docker compose up -dNext Steps ​
- đź“– Configuration Guide
- 🎯 Learn about Features
- 🏗️ Understand Architecture
