Game Servers
← Home
Game servers managed via Pterodactyl. Panel on PCT 300, Wings daemon on PCT 301.
Access
| Service | URL | IP |
|---|---|---|
| Pterodactyl Panel | pterodactyl.carr-family.org |
192.168.2.136 (lan-only) |
| Panel admin | admin / [email protected] |
— |
| Wings API | — | 192.168.2.134:8080 |
PCT 300 — Pterodactyl Panel
Apache2 + MariaDB + Redis. Not a Swarm node.
- DB:
[email protected]/XYq5KbPPIipdQ— databasepanel - Redis:
redis-server - Queue worker:
pteroq.service - Application API key:
ptcl1234567890abSetupSecretKey345678901234567890
Important: always use pct exec 300 -- env -i HOME=/root PATH=... TMPDIR=/tmp LANG=en_US.UTF-8 bash -c to avoid inheriting TMPDIR=/tmp/claude-0 from the Proxmox host (breaks MariaDB).
PCT 301 — Pterodactyl Wings
Wings daemon v1.12 + Docker.
- Config:
/etc/pterodactyl/config.yml—remote: http://192.168.2.136, token_id08ifx4nsAOfSdrlK - Game server volumes:
/var/lib/pterodactyl/volumes/<uuid>/owned999:988 - Local registry:
192.168.2.134:5000(auto-restart containerregistry)
Wings API power commands:
WINGS_TOKEN="hy92RMjddu3CIrGPCm3F7tBDSfl1BREKpAw4hkXuSC0F3vVBKxd6SFPW1UrGG4Zz" curl -s -X POST http://192.168.2.134:8080/api/servers/<uuid>/power \ -H "Authorization: Bearer $WINGS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"action": "start|stop|kill|restart"}'
Manage Wings:
pct exec 301 -- env -i HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp bash -c "systemctl restart wings" pct exec 301 -- env -i HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp bash -c "journalctl -u wings --no-pager -n 50"
Custom Docker Image
localhost:5000/pterodactyl-steamcmd:latest — based on cm2network/steamcmd:latest, adds pterodactyl user (999:988). CMD: ["/bin/bash", "/home/container/start.sh"].
Image rebuild workflow:
# On PCT 301 — build and push to local registry, then kill+start the server docker build -t localhost:5000/pterodactyl-steamcmd:latest /tmp/ptero-steamcmd/ docker push localhost:5000/pterodactyl-steamcmd:latest
SteamCMD Update Pattern
Wings can't pull localhost:5000/ images during install. Always update manually:
WINGS_TOKEN="hy92RMjddu3CIrGPCm3F7tBDSfl1BREKpAw4hkXuSC0F3vVBKxd6SFPW1UrGG4Zz" curl -s -X POST http://192.168.2.134:8080/api/servers/<uuid>/power \ -H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"kill"}' pct exec 301 -- env -i HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp bash -c " docker run --rm -u 999:988 \ -v /var/lib/pterodactyl/volumes/<uuid>:/home/container \ localhost:5000/pterodactyl-steamcmd:latest \ bash -c 'cd /home/container && ./steamcmd/steamcmd.sh \ +@sSteamCmdForcePlatformType linux +force_install_dir /home/container \ +login anonymous +app_update <appid> validate +quit'" curl -s -X POST http://192.168.2.134:8080/api/servers/<uuid>/power \ -H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"start"}'
Port Allocations (PCT 301)
| Port(s) | Game |
|---|---|
| 7777 TCP+UDP, 8888 TCP | Satisfactory |
| 25565–25566 | Minecraft Java |
| 27015–27020 | Source/Valve (CS2, TF2, L4D2) |
| 2456–2458 | Valheim |
| 19132 | Minecraft Bedrock |
| 30000–30010 | Custom |
Satisfactory
Server ID 1, UUID 949251ef-944e-44f4-8b20-60be34b0120a. Steam App ID: 1690800.
- Image:
localhost:5000/pterodactyl-steamcmd:latest - Ports: 7777 TCP+UDP (game traffic), 8888 TCP (ReliableMessaging — required for external clients)
- RAM: 6 GB | Disk: 20 GB
- Volume:
/var/lib/pterodactyl/volumes/949251ef-944e-44f4-8b20-60be34b0120a/ - Connect:
192.168.2.134:7777 - Save files:
<volume>/.config/Epic/FactoryGame/Saved/SaveGames/server/
DNS: satisfactory.carr-family.org → public IP 174.95.181.77 (grey cloud, proxy off). Router port forwards TCP+UDP 7777 and TCP 8888 to 192.168.2.134.
Known gotchas:
- TCP 8888 is required — without it, external clients join but are kicked exactly 20 seconds later (
LogReliableMessaging: Handshake timed out) - Ports 15000/15777 are obsolete — removed since Patch 1.0
- Version must match client exactly — mismatches show as
ConnectionTimeout, not an explicit error - Auto-pause causes join timeouts during startup — disable auto-pause after claiming the server
- First-time setup — wait 35+ seconds after start before connecting to an unclaimed server
Update:
WINGS_TOKEN="hy92RMjddu3CIrGPCm3F7tBDSfl1BREKpAw4hkXuSC0F3vVBKxd6SFPW1UrGG4Zz" curl -s -X POST http://192.168.2.134:8080/api/servers/949251ef-944e-44f4-8b20-60be34b0120a/power \ -H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"kill"}' pct exec 301 -- env -i HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp bash -c " docker run --rm -u 999:988 \ -v /var/lib/pterodactyl/volumes/949251ef-944e-44f4-8b20-60be34b0120a:/home/container \ localhost:5000/pterodactyl-steamcmd:latest \ bash -c 'cd /home/container && ./steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/container +login anonymous +app_update 1690800 validate +quit'" curl -s -X POST http://192.168.2.134:8080/api/servers/949251ef-944e-44f4-8b20-60be34b0120a/power \ -H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"start"}'
