Self-Hosting Crafty Controller with Docker

What Is Crafty Controller?

Crafty Controller is a self-hosted game server management panel that lets you create, monitor, and manage multiple Minecraft (Java and Bedrock) and Hytale servers from a single web interface. It replaces the need to SSH into your server and manage game instances manually — you get a dashboard with one-click server creation, file management, backups, and player administration. SteamCMD integration for games like Valheim, Rust, and ARK is in active development.

Official site: https://craftycontrol.com

Prerequisites

  • A Linux server (Ubuntu 22.04+ recommended) — do not use Docker Desktop on Windows/WSL2 (critical data corruption bug)
  • Docker and Docker Compose installed (guide)
  • 4 GB of RAM minimum (512 MB for Crafty + 1–4 GB per game server)
  • 20 GB of free disk space (grows with server count and world size)
  • Ports open for game traffic (25565 for Minecraft Java, 19132/udp for Bedrock)

Docker Compose Configuration

Create a docker-compose.yml file:

services:
  crafty:
    image: arcadiatechnology/crafty-4:4.9.0
    container_name: crafty-controller
    restart: unless-stopped
    environment:
      - TZ=Etc/UTC  # Set to your timezone
    ports:
      - "8443:8443"                    # HTTPS web UI
      - "8000:8000"                    # HTTP web UI
      - "19132:19132/udp"              # Minecraft Bedrock
      - "25565:25565"                  # Minecraft Java (default)
      - "25566:25566"                  # Additional Java server (add more as needed)
    volumes:
      - ./data/backups:/crafty/backups       # Server backups
      - ./data/logs:/crafty/logs             # Application logs
      - ./data/servers:/crafty/servers       # Game server files and worlds
      - ./data/config:/crafty/app/config     # Crafty config, database, users
      - ./data/import:/crafty/import         # Import existing servers

Start the stack:

docker compose up -d

First boot takes 30–60 seconds while Crafty initializes its database and default configuration. No external database is required — Crafty uses a built-in SQLite database.

Initial Setup

  1. Open https://your-server-ip:8443 in your browser (accept the self-signed certificate)
  2. Create your admin account — Crafty prompts for an email and password on first access
  3. From the dashboard, click Create Server
  4. Select the server type: Minecraft Java, Minecraft Bedrock, or Hytale
  5. For Java servers, choose the Java version (8, 11, 17, 21, or 25 — all bundled in the container)
  6. Set RAM allocation (1–4 GB per server is typical)
  7. Click Create — Crafty downloads the server JAR and starts it automatically

Default game server ports start at 25565 and increment. Map additional ports in your docker-compose.yml as you add servers.

Configuration

Adding more game server ports: Each Minecraft Java server needs its own port. Add port mappings to your Compose file as you create servers:

    ports:
      - "8443:8443"
      - "8000:8000"
      - "19132:19132/udp"
      - "25565:25565"
      - "25566:25566"
      - "25567:25567"
      # Add more as needed

Timezone: Set TZ to your local timezone (e.g., America/New_York, Europe/London) so log timestamps and scheduled tasks align with your clock.

Backups: Crafty has built-in backup functionality. Configure backup schedules per server from the web UI. Backups are stored in the /crafty/backups volume — point this to a drive with sufficient space.

Multi-user access: Create additional users from Settings → User Management. Assign per-server permissions so different people can manage different servers without full admin access.

API access: Crafty exposes a REST API for automation. Generate API keys from the web UI under Settings → API Keys.

Reverse Proxy

To access Crafty over HTTPS with a proper certificate, put it behind a reverse proxy. The web UI runs on port 8443 (HTTPS) or 8000 (HTTP).

Example Nginx Proxy Manager configuration:

  • Scheme: https
  • Forward Hostname: crafty-controller (or your server IP)
  • Forward Port: 8443
  • Block Common Exploits: enabled
  • Websockets Support: enabled (required for the live console)

Game server traffic (ports 25565, 19132, etc.) bypasses the reverse proxy — players connect directly to those ports. Only the web management UI benefits from a reverse proxy.

For detailed reverse proxy setup: Reverse Proxy Setup

Backup

What to back up:

VolumeContentsPriority
./data/serversGame server files, world data, pluginsCritical — this is your players’ data
./data/configCrafty database, user accounts, settingsHigh — losing this means reconfiguring Crafty
./data/backupsCrafty’s own backup archivesMedium — redundant if you back up servers/
./data/logsApplication logsLow — useful for debugging only

Crafty’s built-in backup system creates server snapshots on a schedule. For full protection, also back up the entire ./data/ directory to an external location.

For backup strategies: Backup Strategy

Troubleshooting

Server won’t start — “Java not found”

Symptom: Server creation fails with a Java-related error. Fix: Crafty Controller 4.9.0 bundles Java 8, 11, 17, 21, and 25. Make sure you selected the correct Java version for your Minecraft version. Minecraft 1.21+ requires Java 21. Older versions (1.16 and below) may need Java 8 or 11.

World corruption on Windows Docker Desktop

Symptom: Chunk data becomes corrupted after stopping or restarting a server. Fix: This is a known upstream Docker Desktop + WSL2 issue with a ~90% failure rate. Run Crafty on native Linux only — a Linux VPS, a bare-metal Linux machine, or a Linux VM. Do not use Docker Desktop on Windows for game servers.

Web UI unreachable on port 8443

Symptom: Browser shows connection refused on https://your-ip:8443. Fix: Check that port 8443 is mapped in your docker-compose.yml and not blocked by your firewall. Run docker logs crafty-controller to verify Crafty started successfully. First boot can take up to 60 seconds.

Players can’t connect to Minecraft server

Symptom: Minecraft client shows “Connection timed out.” Fix: Verify the game server port is mapped in docker-compose.yml (e.g., 25565:25565). Check your firewall allows inbound TCP on that port. For Bedrock servers, the port must be UDP (19132:19132/udp). Also confirm the server is running (green status) in the Crafty dashboard.

High memory usage

Symptom: Container uses more RAM than expected. Fix: Each game server allocates its own heap memory (typically 1–4 GB). Crafty itself uses 256–512 MB. With 3 servers at 2 GB each, expect 6.5–7 GB total. Reduce per-server RAM allocation in Server Settings → Performance, or run fewer concurrent servers.

Resource Requirements

ComponentRAMCPUDisk
Crafty Controller256–512 MBLow1–2 GB
Per Minecraft Java server1–4 GB2–4 cores (high activity)500 MB – 5 GB+ per world
Per Bedrock server1–2 GB1–2 cores200 MB – 2 GB per world

Minimum setup (Crafty + 1 small server): 2 GB RAM, 2 cores, 10 GB disk. Recommended (Crafty + 2–3 servers): 8 GB RAM, 4 cores, 50 GB disk.

Verdict

Crafty Controller is the best option for managing multiple Minecraft servers from a single interface. The web UI is polished, backup management is built-in, and the bundled Java runtimes mean zero dependency headaches. It’s lighter and more focused than Pterodactyl, which targets a broader range of games but requires a MySQL database, Redis, and a more complex setup. If you only run Minecraft (Java and/or Bedrock), Crafty is the simpler, more streamlined choice. If you need to manage Rust, ARK, Valheim, and other Steam-based games today, Pterodactyl is the more versatile option — though Crafty’s upcoming SteamCMD integration may change that.

Comments