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
- Open
https://your-server-ip:8443in your browser (accept the self-signed certificate) - Create your admin account — Crafty prompts for an email and password on first access
- From the dashboard, click Create Server
- Select the server type: Minecraft Java, Minecraft Bedrock, or Hytale
- For Java servers, choose the Java version (8, 11, 17, 21, or 25 — all bundled in the container)
- Set RAM allocation (1–4 GB per server is typical)
- 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:
| Volume | Contents | Priority |
|---|---|---|
./data/servers | Game server files, world data, plugins | Critical — this is your players’ data |
./data/config | Crafty database, user accounts, settings | High — losing this means reconfiguring Crafty |
./data/backups | Crafty’s own backup archives | Medium — redundant if you back up servers/ |
./data/logs | Application logs | Low — 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
| Component | RAM | CPU | Disk |
|---|---|---|---|
| Crafty Controller | 256–512 MB | Low | 1–2 GB |
| Per Minecraft Java server | 1–4 GB | 2–4 cores (high activity) | 500 MB – 5 GB+ per world |
| Per Bedrock server | 1–2 GB | 1–2 cores | 200 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.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments