WINGS SETUP
Wings is the lightweight Go daemon that runs on every node server. It communicates with the panel over a secure WebSocket connection and manages Docker containers for each game server.
Architecture overview
The panel itself does not run game servers — it only coordinates. Wings runs on separate node machines (can be the same VPS or different ones) and receives instructions from the panel API. Each node requires its own Wings installation.
https://node.xwolf.space:8080 — Wings v1.12.1 on Debian 13
Node requirements
| Requirement | Details |
|---|---|
| OS | Linux (Debian/Ubuntu recommended, kernel ≥ 5.4) |
| Docker | Latest stable (24+) |
| CPU | 1+ vCPU (more = more servers) |
| RAM | Depends on hosted game servers |
| Open port | TCP 8080 (Wings HTTPS API) |
| Root access | Required — Wings runs as root |
1 — Install Docker
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker
systemctl disable --now apparmor
2 — Create Wings directory
mkdir -p /etc/pterodactyl
mkdir -p /var/lib/pterodactyl/{volumes,backups,logs}
3 — Download Wings binary
curl -L -o /usr/local/bin/wings \
"https://github.com/pterodactyl/wings/releases/download/v1.12.1/wings_linux_amd64"
chmod +x /usr/local/bin/wings
4 — Create the node in the panel
- Log into the wolfXcore admin area at
/admin/nodes. - Click Create New.
- Fill in: name, FQDN (
node.xwolf.space), port (8080), memory & disk allocations. - Set Communication over SSL to Yes if Wings is behind SSL.
- Save. Then navigate to the Configuration tab of the new node.
- Click Generate Token — copy the YAML config block.
5 — Write the Wings config
Paste the generated YAML into /etc/pterodactyl/config.yml.
A typical config looks like:
debug: false
uuid: NODE-UUID-HERE
token_id: TOKEN-ID-HERE
token: TOKEN-SECRET-HERE
api:
host: 0.0.0.0
port: 8080
ssl:
enabled: true
cert: /etc/letsencrypt/live/node.xwolf.space/fullchain.pem
key: /etc/letsencrypt/live/node.xwolf.space/privkey.pem
upload_limit: 100
system:
data: /var/lib/pterodactyl/volumes
sftp:
bind_port: 2022
remote: 'https://panel.xwolf.space'
remote_configuration: 'https://panel.xwolf.space'
6 — SSL certificate for the node
apt install -y certbot
certbot certonly --standalone -d node.xwolf.space \
--agree-tos -m admin@xwolf.space --no-eff-email
Add a cron to auto-renew:
echo "0 3 * * * root certbot renew --quiet \
--deploy-hook 'systemctl restart wings'" \
>> /etc/cron.d/certbot-renew
7 — Systemd service
[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
systemctl enable --now wings
systemctl status wings
8 — Port allocations
Allocations are the IP + port combinations that Wings can assign to game servers. Without them the panel refuses to create servers ("allocation id is required"). Add them once per node; they are shared across all servers on that node.
Go to Admin → Nodes → xwolf-node-1 → Allocations and enter the node IP with a port or range, then click Submit. Alternatively, insert them directly via SQL (fastest for bulk setup):
-- Run inside the wolfxcore database
INSERT INTO allocations (node_id, ip, ip_alias, port, created_at, updated_at)
VALUES
(1, '161.97.100.158', 'node.xwolf.space', 25565, NOW(), NOW()),
(1, '161.97.100.158', 'node.xwolf.space', 25566, NOW(), NOW());
-- Or use a range — see installation guide for the full loop query
xwolf-node-1 — current allocation ranges
| Port range | Count | Use |
|---|---|---|
7777 – 7810 | 34 | ARK: Survival Evolved, general game servers |
9987 – 10022 | 6 | TeamSpeak 3 / voice servers |
25565 – 25600 | 36 | Minecraft (Vanilla, Paper, Spigot, BungeeCord) |
27015 – 27050 | 36 | Rust, CS2, other Steam games |
30000 – 30049 | 50 | Node.js bots, Discord bots, APIs, general purpose |
9 — Firewall rules
ufw allow 8080/tcp # Wings API
ufw allow 2022/tcp # SFTP
ufw allow 443/tcp # HTTPS (if panel on same node)
ufw allow 80/tcp # HTTP (cert renewal)
ufw enable
Verifying the connection
After Wings starts, check it connected successfully:
- In the panel admin area, go to Nodes.
- The node should show a green heartbeat dot.
- If red — check
journalctl -u wings -ffor errors. - Verify the panel's URL is reachable from the node machine.
wings --debug temporarily to see verbose output during troubleshooting.
Stop it with Ctrl+C, then restart the service.
Updating Wings
systemctl stop wings
curl -L -o /usr/local/bin/wings \
"https://github.com/pterodactyl/wings/releases/download/vX.Y.Z/wings_linux_amd64"
chmod +x /usr/local/bin/wings
systemctl start wings