14 KiB
Minecraft Servers
Minecraft servers running on docker-host2 via Crafty Controller 4.
Servers Overview
| Server | Address | Port | Version | Status |
|---|---|---|---|---|
| Hutworld | hutworld.htsn.io | 25565 | Paper 1.21.11 | Running |
| Backrooms | backrooms.htsn.io | 25566 | Paper 1.21.4 | Running |
Quick Reference
Hutworld (Main Server)
| Setting | Value |
|---|---|
| Web GUI | https://mc.htsn.io |
| Game Server (Java) | hutworld.htsn.io:25565 |
| Game Server (Bedrock) | hutworld.htsn.io:19132 |
| Host | docker-host2 (10.10.10.207) |
| Server Type | Paper 1.21.11 |
| World Name | hutworld |
| Memory | 2GB min / 4GB max |
Backrooms (Horror/Exploration)
| Setting | Value |
|---|---|
| Web GUI | https://mc.htsn.io |
| Game Server (Java) | backrooms.htsn.io:25566 |
| Host | docker-host2 (10.10.10.207) |
| Server Type | Paper 1.21.4 |
| World Name | backrooms |
| Memory | 512MB min / 1.5GB max |
| Datapack | The Backrooms v2.2.0 |
Backrooms Features:
- 50+ custom dimensions based on Backrooms lore
- Use
/execute in backrooms:level0 run tp @s ~ ~ ~to travel to Level 0 - Horror-themed exploration gameplay
- No client mods required (datapack only)
Crafty Controller Access
| Setting | Value |
|---|---|
| URL | https://mc.htsn.io |
| Username | admin |
| Password | See /crafty/data/config/default-creds.txt on docker-host2 |
Get password:
ssh docker-host2 'cat ~/crafty/data/config/default-creds.txt'
Current Status
Completed
- Crafty Controller 4.4.7 deployed on docker-host2
- Traefik reverse proxy configured (mc.htsn.io → 10.10.10.207:8443)
- DNS A record created for hutworld.htsn.io (non-proxied, points to public IP)
- Port forwarding configured via UniFi API:
- TCP/UDP 25565 → 10.10.10.207 (Java Edition)
- UDP 19132 → 10.10.10.207 (Bedrock via Geyser)
- Server files transferred from Windows PC (D:\Minecraft\mcss\servers\hutworld)
- Server imported into Crafty and running
- Paper upgraded from 1.21.5 to 1.21.11
- Plugins updated (GSit 3.1.1, LuckPerms 5.5.22)
- Orphaned plugin data cleaned up
- LuckPerms database restored with original permissions
- Automated backups to TrueNAS configured (every 6 hours)
Pending
- Change Crafty admin password to something memorable
- Test external connectivity from outside network
Import Instructions
To import the hutworld server in Crafty:
- Go to Servers → Click + Create New Server
- Select Import Server tab
- Fill in:
- Server Name:
Hutworld - Import Path:
/crafty/import/hutworld - Server JAR:
paper.jar - Min RAM:
2048(2GB) - Max RAM:
6144(6GB) - Server Port:
25565
- Server Name:
- Click Import Server
- Go to server → Click Start
Server Configuration
World Data
| World | Description |
|---|---|
| hutworld | Main overworld |
| hutworld_nether | Nether dimension |
| hutworld_the_end | End dimension |
Installed Plugins
| Plugin | Version | Purpose |
|---|---|---|
| EssentialsX | 2.20.1 | Core server commands |
| EssentialsXChat | 2.20.1 | Chat formatting |
| EssentialsXSpawn | 2.20.1 | Spawn management |
| Geyser-Spigot | Latest | Bedrock Edition support |
| floodgate | Latest | Bedrock authentication |
| GSit | 3.1.1 | Sit/lay/crawl animations |
| LuckPerms | 5.5.22 | Permissions management |
| PluginPortal | 2.2.2 | Plugin management |
| Vault | 1.7.3 | Economy/permissions API |
| ViaVersion | Latest | Multi-version support |
| ViaBackwards | Latest | Older client support |
| randomtp | Latest | Random teleportation |
Removed plugins (cleaned up 2026-01-03):
- GriefPrevention, Multiverse-Core, Multiverse-Portals, ProtocolLib, WorldEdit, WorldGuard (disabled/orphaned)
Docker Configuration
Location: ~/crafty/docker-compose.yml on docker-host2
services:
crafty:
image: registry.gitlab.com/crafty-controller/crafty-4:4.4.7
container_name: crafty
restart: unless-stopped
environment:
- TZ=America/New_York
ports:
- "8443:8443" # Web GUI (HTTPS)
- "8123:8123" # Dynmap (if used)
- "25565:25565" # Minecraft Java
- "25566:25566" # Additional server
- "19132:19132/udp" # Minecraft Bedrock (Geyser)
volumes:
- ./data/backups:/crafty/backups
- ./data/logs:/crafty/logs
- ./data/servers:/crafty/servers
- ./data/config:/crafty/app/config
- ./data/import:/crafty/import
Traefik Configuration
File: /etc/traefik/conf.d/crafty.yaml on CT 202 (10.10.10.250)
http:
routers:
crafty-secure:
entryPoints:
- websecure
rule: "Host(`mc.htsn.io`)"
service: crafty
tls:
certResolver: cloudflare
priority: 50
services:
crafty:
loadBalancer:
servers:
- url: "https://10.10.10.207:8443"
serversTransport: crafty-transport@file
serversTransports:
crafty-transport:
insecureSkipVerify: true
Port Forwarding (UniFi)
Configured via UniFi controller on UCG-Fiber (10.10.10.1):
| Rule Name | Port | Protocol | Destination | Status |
|---|---|---|---|---|
| Minecraft Java | 25565 | TCP/UDP | 10.10.10.207:25565 | Active |
| Minecraft Bedrock | 19132 | UDP | 10.10.10.207:19132 | Active |
| Minecraft Backrooms | 25566 | TCP/UDP | 10.10.10.207:25566 | Active |
DNS Records (Cloudflare)
| Record | Type | Value | Proxied |
|---|---|---|---|
| mc.htsn.io | CNAME | htsn.io | Yes (for web GUI) |
| hutworld.htsn.io | A | 70.237.94.174 | No (direct for game traffic) |
| backrooms.htsn.io | A | 70.237.94.174 | No (direct for game traffic) |
Note: Game traffic (25565, 25566, 19132) cannot be proxied through Cloudflare - only HTTP/HTTPS works with Cloudflare proxy.
LuckPerms Web Editor
After server is running:
- Open Crafty console for Hutworld server
- Run command:
/lp editor - A unique URL will be generated (cloud-hosted by LuckPerms)
- Open the URL in browser to manage permissions
The editor is hosted by LuckPerms, so no additional port forwarding is needed.
Backup Configuration
Automated Backups to TrueNAS
Backups run automatically every 6 hours and are stored on TrueNAS.
| Setting | Value |
|---|---|
| Destination | TrueNAS (10.10.10.200) |
| Path | /mnt/vault/users/backups/minecraft/ |
| Frequency | Every 6 hours (12am, 6am, 12pm, 6pm) |
| Retention | 14 backups (~3.5 days of history) |
| Size | ~2.3 GB per backup |
| Script | /home/hutson/minecraft-backup.sh on docker-host2 |
| Log | /home/hutson/minecraft-backup.log on docker-host2 |
Backup Script
Location: ~/minecraft-backup.sh on docker-host2
#!/bin/bash
# Minecraft Server Backup Script
# Backs up Crafty server data to TrueNAS
BACKUP_SRC="$HOME/crafty/data/servers/19f604a9-f037-442d-9283-0761c73cfd60"
BACKUP_DEST="hutson@10.10.10.200:/mnt/vault/users/backups/minecraft"
DATE=$(date +%Y-%m-%d_%H%M)
BACKUP_NAME="hutworld-$DATE.tar.gz"
LOCAL_BACKUP="/tmp/$BACKUP_NAME"
# Create compressed backup (exclude large unnecessary files)
tar -czf "$LOCAL_BACKUP" \
--exclude="*.jar" \
--exclude="cache" \
--exclude="libraries" \
--exclude=".paper-remapped" \
-C "$HOME/crafty/data/servers" \
19f604a9-f037-442d-9283-0761c73cfd60
# Transfer to TrueNAS
sshpass -p 'GrilledCh33s3#' scp -o StrictHostKeyChecking=no "$LOCAL_BACKUP" "$BACKUP_DEST/"
# Clean up local temp file
rm -f "$LOCAL_BACKUP"
# Keep only last 14 backups on TrueNAS
sshpass -p 'GrilledCh33s3#' ssh -o StrictHostKeyChecking=no hutson@10.10.10.200 '
cd /mnt/vault/users/backups/minecraft
ls -t hutworld-*.tar.gz 2>/dev/null | tail -n +15 | xargs -r rm -f
'
Cron Schedule
# View current schedule
ssh docker-host2 'crontab -l | grep minecraft'
# Output: 0 */6 * * * /home/hutson/minecraft-backup.sh >> /home/hutson/minecraft-backup.log 2>&1
Manual Backup Commands
# Run backup manually
ssh docker-host2 '~/minecraft-backup.sh'
# Check backup log
ssh docker-host2 'tail -20 ~/minecraft-backup.log'
# List backups on TrueNAS
sshpass -p 'GrilledCh33s3#' ssh -o StrictHostKeyChecking=no hutson@10.10.10.200 \
'ls -lh /mnt/vault/users/backups/minecraft/'
Restore from Backup
# 1. Stop the server in Crafty web UI
# 2. Copy backup from TrueNAS
sshpass -p 'GrilledCh33s3#' scp -o StrictHostKeyChecking=no \
hutson@10.10.10.200:/mnt/vault/users/backups/minecraft/hutworld-YYYY-MM-DD_HHMM.tar.gz \
/tmp/
# 3. Extract to server directory (backup existing first)
ssh docker-host2 'cd ~/crafty/data/servers && \
mv 19f604a9-f037-442d-9283-0761c73cfd60 19f604a9-f037-442d-9283-0761c73cfd60.old && \
tar -xzf /tmp/hutworld-YYYY-MM-DD_HHMM.tar.gz'
# 4. Start server in Crafty web UI
Common Tasks
Start/Stop Server
Via Crafty web UI at https://mc.htsn.io, or:
# Check Crafty container status
ssh docker-host2 'docker ps | grep crafty'
# Restart Crafty container
ssh docker-host2 'cd ~/crafty && docker compose restart'
# View Crafty logs
ssh docker-host2 'docker logs -f crafty'
Backup Server
See Backup Configuration for full details.
# Run backup manually
ssh docker-host2 '~/minecraft-backup.sh'
# Check recent backups
sshpass -p 'GrilledCh33s3#' ssh -o StrictHostKeyChecking=no hutson@10.10.10.200 \
'ls -lht /mnt/vault/users/backups/minecraft/ | head -5'
Update Plugins
- Download new plugin JAR
- Upload via Crafty Files tab, or:
scp plugin.jar docker-host2:~/crafty/data/servers/hutworld/plugins/
- Restart server in Crafty
Check Server Logs
Via Crafty web UI (Logs tab), or:
ssh docker-host2 'tail -f ~/crafty/data/servers/hutworld/logs/latest.log'
Troubleshooting
Server won't start
# Check Crafty container logs
ssh docker-host2 'docker logs crafty --tail 50'
# Check server logs
ssh docker-host2 'cat ~/crafty/data/servers/hutworld/logs/latest.log | tail -100'
# Check Java version in container
ssh docker-host2 'docker exec crafty java -version'
Can't connect externally
- Verify port forwarding is active:
ssh root@10.10.10.1 'iptables -t nat -L -n | grep 25565'
- Test from external network:
nc -zv hutworld.htsn.io 25565
- Check if server is listening:
ssh docker-host2 'netstat -tlnp | grep 25565'
Bedrock players can't connect
- Verify Geyser plugin is installed and enabled
- Check Geyser config:
~/crafty/data/servers/hutworld/plugins/Geyser-Spigot/config.yml - Ensure UDP 19132 is forwarded and not blocked
LuckPerms missing users/permissions
If LuckPerms shows a fresh database (missing users like Suwan):
- Check if original database exists:
ssh docker-host2 'ls -la ~/crafty/data/import/hutworld/plugins/LuckPerms/*.db'
- Restore from import backup:
# Stop server in Crafty UI first
ssh docker-host2 'cp ~/crafty/data/import/hutworld/plugins/LuckPerms/luckperms-h2-v2.mv.db \
~/crafty/data/servers/19f604a9-f037-442d-9283-0761c73cfd60/plugins/LuckPerms/'
- Or restore from TrueNAS backup:
# List available backups
sshpass -p 'GrilledCh33s3#' ssh -o StrictHostKeyChecking=no hutson@10.10.10.200 \
'ls -lt /mnt/vault/users/backups/minecraft/'
# Extract LuckPerms database from backup
sshpass -p 'GrilledCh33s3#' scp hutson@10.10.10.200:/mnt/vault/users/backups/minecraft/hutworld-YYYY-MM-DD_HHMM.tar.gz /tmp/
tar -xzf /tmp/hutworld-*.tar.gz -C /tmp --strip-components=2 \
'*/plugins/LuckPerms/luckperms-h2-v2.mv.db'
- Restart server in Crafty UI
Migration History
2026-01-04: Backup System
- Configured automated backups to TrueNAS every 6 hours
- Set 14-backup retention (~3.5 days of recovery points)
- Created backup script with compression and cleanup
- Storage:
/mnt/vault/users/backups/minecraft/
2026-01-03: Server Fixes & Updates
Updates:
- Upgraded Paper from 1.21.5 to 1.21.11 (build 69)
- Updated GSit from 2.3.2 to 3.1.1
- Fixed corrupted LuckPerms JAR (re-downloaded 5.5.22)
- Restored original LuckPerms database with user permissions
Cleanup:
- Removed disabled plugins: Dynmap, Graves
- Removed orphaned data folders: GriefPreventionData, SilkSpawners_v2, Graves, ViaRewind
Fixes:
- Fixed memory allocation (was attempting 2TB, set to 2GB min / 4GB max)
- Fixed file permissions for Docker container access
2026-01-03: Initial Migration
Source: Windows PC (10.10.10.150) - D:\Minecraft\mcss\servers\hutworld
Steps completed:
- Compressed hutworld folder on Windows (2.4GB zip)
- Transferred via SCP to docker-host2
- Unzipped to ~/crafty/data/import/hutworld
- Downloaded Paper 1.21.5 JAR (later upgraded to 1.21.11)
- Imported server into Crafty Controller
- Configured port forwarding (updated existing 25565 rule, added 19132)
- Created DNS record for hutworld.htsn.io
Original MCSS config preserved: mcss_server_config.json
Related Documentation
- IP Assignments - Network configuration
- Traefik - Reverse proxy setup
- VMs - docker-host2 details
- Gateway - UCG-Fiber configuration
Resources
Last Updated: 2026-01-05
Migration History (Backrooms)
2026-01-05: Backrooms Server Created
- Created new Backrooms server in Crafty Controller
- Installed Paper 1.21.4 build 232 (recommended version for datapack)
- Installed The Backrooms datapack v2.2.0 from Modrinth
- DNS record created for backrooms.htsn.io
- Memory configured for 512MB-1.5GB (VM memory constrained)
- Server running on port 25566
- Pending: Port forwarding for external access