Blame

29e97f Damien 2026-06-15 09:53:04
Add homelab wiki — Infrastructure, Docker Swarm, Traefik, Network/Media/Documents/AI/Downloads stacks, Game Servers
1
# Game Servers
2
3
← [[Home]]
4
5
Game servers managed via Pterodactyl. Panel on PCT 300, Wings daemon on PCT 301.
6
7
---
8
9
## Access
10
11
| Service | URL | IP |
12
|---------|-----|----|
13
| Pterodactyl Panel | `pterodactyl.carr-family.org` | `192.168.2.136` (lan-only) |
14
| Panel admin | admin / `[email protected]` | — |
15
| Wings API | — | `192.168.2.134:8080` |
16
17
---
18
19
## PCT 300 — Pterodactyl Panel
20
21
Apache2 + MariaDB + Redis. Not a Swarm node.
22
23
- **DB:** `[email protected]` / `XYq5KbPPIipdQ` — database `panel`
24
- **Redis:** `redis-server`
25
- **Queue worker:** `pteroq.service`
26
- **Application API key:** `ptcl1234567890abSetupSecretKey345678901234567890`
27
28
**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).
29
30
---
31
32
## PCT 301 — Pterodactyl Wings
33
34
Wings daemon v1.12 + Docker.
35
36
- **Config:** `/etc/pterodactyl/config.yml``remote: http://192.168.2.136`, token_id `08ifx4nsAOfSdrlK`
37
- **Game server volumes:** `/var/lib/pterodactyl/volumes/<uuid>/` owned `999:988`
38
- **Local registry:** `192.168.2.134:5000` (auto-restart container `registry`)
39
40
**Wings API power commands:**
41
```bash
42
WINGS_TOKEN="hy92RMjddu3CIrGPCm3F7tBDSfl1BREKpAw4hkXuSC0F3vVBKxd6SFPW1UrGG4Zz"
43
curl -s -X POST http://192.168.2.134:8080/api/servers/<uuid>/power \
44
-H "Authorization: Bearer $WINGS_TOKEN" \
45
-H "Content-Type: application/json" \
46
-d '{"action": "start|stop|kill|restart"}'
47
```
48
49
**Manage Wings:**
50
```bash
51
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"
52
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"
53
```
54
55
### Custom Docker Image
56
57
`localhost:5000/pterodactyl-steamcmd:latest` — based on `cm2network/steamcmd:latest`, adds pterodactyl user (999:988). CMD: `["/bin/bash", "/home/container/start.sh"]`.
58
59
**Image rebuild workflow:**
60
```bash
61
# On PCT 301 — build and push to local registry, then kill+start the server
62
docker build -t localhost:5000/pterodactyl-steamcmd:latest /tmp/ptero-steamcmd/
63
docker push localhost:5000/pterodactyl-steamcmd:latest
64
```
65
66
### SteamCMD Update Pattern
67
68
Wings can't pull `localhost:5000/` images during install. Always update manually:
69
```bash
70
WINGS_TOKEN="hy92RMjddu3CIrGPCm3F7tBDSfl1BREKpAw4hkXuSC0F3vVBKxd6SFPW1UrGG4Zz"
71
curl -s -X POST http://192.168.2.134:8080/api/servers/<uuid>/power \
72
-H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"kill"}'
73
74
pct exec 301 -- env -i HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp bash -c "
75
docker run --rm -u 999:988 \
76
-v /var/lib/pterodactyl/volumes/<uuid>:/home/container \
77
localhost:5000/pterodactyl-steamcmd:latest \
78
bash -c 'cd /home/container && ./steamcmd/steamcmd.sh \
79
+@sSteamCmdForcePlatformType linux +force_install_dir /home/container \
80
+login anonymous +app_update <appid> validate +quit'"
81
82
curl -s -X POST http://192.168.2.134:8080/api/servers/<uuid>/power \
83
-H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"start"}'
84
```
85
86
---
87
88
## Port Allocations (PCT 301)
89
90
| Port(s) | Game |
91
|---------|------|
92
| 7777 TCP+UDP, 8888 TCP | Satisfactory |
93
| 25565–25566 | Minecraft Java |
94
| 27015–27020 | Source/Valve (CS2, TF2, L4D2) |
95
| 2456–2458 | Valheim |
96
| 19132 | Minecraft Bedrock |
97
| 30000–30010 | Custom |
98
99
---
100
101
## Satisfactory
102
103
Server ID 1, UUID `949251ef-944e-44f4-8b20-60be34b0120a`. Steam App ID: 1690800.
104
105
- **Image:** `localhost:5000/pterodactyl-steamcmd:latest`
106
- **Ports:** 7777 TCP+UDP (game traffic), 8888 TCP (ReliableMessaging — **required for external clients**)
107
- **RAM:** 6 GB | **Disk:** 20 GB
108
- **Volume:** `/var/lib/pterodactyl/volumes/949251ef-944e-44f4-8b20-60be34b0120a/`
109
- **Connect:** `192.168.2.134:7777`
110
- **Save files:** `<volume>/.config/Epic/FactoryGame/Saved/SaveGames/server/`
111
112
**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`.
113
114
**Known gotchas:**
115
- **TCP 8888 is required** — without it, external clients join but are kicked exactly 20 seconds later (`LogReliableMessaging: Handshake timed out`)
116
- **Ports 15000/15777 are obsolete** — removed since Patch 1.0
117
- **Version must match client exactly** — mismatches show as `ConnectionTimeout`, not an explicit error
118
- **Auto-pause causes join timeouts during startup** — disable auto-pause after claiming the server
119
- **First-time setup** — wait 35+ seconds after start before connecting to an unclaimed server
120
121
**Update:**
122
```bash
123
WINGS_TOKEN="hy92RMjddu3CIrGPCm3F7tBDSfl1BREKpAw4hkXuSC0F3vVBKxd6SFPW1UrGG4Zz"
124
curl -s -X POST http://192.168.2.134:8080/api/servers/949251ef-944e-44f4-8b20-60be34b0120a/power \
125
-H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"kill"}'
126
pct exec 301 -- env -i HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp bash -c "
127
docker run --rm -u 999:988 \
128
-v /var/lib/pterodactyl/volumes/949251ef-944e-44f4-8b20-60be34b0120a:/home/container \
129
localhost:5000/pterodactyl-steamcmd:latest \
130
bash -c 'cd /home/container && ./steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/container +login anonymous +app_update 1690800 validate +quit'"
131
curl -s -X POST http://192.168.2.134:8080/api/servers/949251ef-944e-44f4-8b20-60be34b0120a/power \
132
-H "Authorization: Bearer $WINGS_TOKEN" -H "Content-Type: application/json" -d '{"action":"start"}'
133
```