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 — database panel
  • 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.ymlremote: http://192.168.2.136, token_id 08ifx4nsAOfSdrlK
  • Game server volumes: /var/lib/pterodactyl/volumes/<uuid>/ owned 999:988
  • Local registry: 192.168.2.134:5000 (auto-restart container registry)

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"}'