Herní servery

SSL pro Pterodactyl Panel i Wings s Let's Encrypt

Jak získat certifikáty Let's Encrypt pro Panel i node, nastavit HTTPS v nginx, zapnout SSL ve Wings a vyřešit automatickou obnovu bez výpadků.

12. 10. 2026 · 4 min čtení

Pterodactyl má jedno nepříjemné pravidlo, které vyplývá z fungování prohlížečů: pokud Panel běží na HTTPS, musí i Wings komunikovat přes HTTPS. Konzole serveru se otevírá jako websocket z prohlížeče přímo na node a prohlížeč nepovolí nezabezpečené spojení ze zabezpečené stránky (mixed content). Výsledkem je nefunkční konzole a hláška o selhání websocketu.

Tento návod ukazuje, jak certifikáty vyřešit pomocí Let’s Encrypt a certbotu.

Příprava DNS

Potřebujete dvě domény (nebo subdomény) s A záznamy:

  • panel.example.cz → IP serveru s Panelem,
  • node1.example.cz → IP nodu s Wings.

Let’s Encrypt nevydá certifikát na holou IP adresu v běžném HTTP-01 režimu, proto má node vlastní doménu. Pokud máte doménu za Cloudflare, nastavte záznam pro node jako DNS only (šedý mráček) – proxy Cloudflare nepropouští port 8080 ani SFTP na 2022.

Instalace certbotu

sudo apt update
sudo apt install -y certbot python3-certbot-nginx

Certifikát pro Panel

Na serveru s Panelem a běžícím nginx:

sudo certbot certonly --nginx -d panel.example.cz

Certifikáty se uloží do /etc/letsencrypt/live/panel.example.cz/. V nginx konfiguraci Panelu pak doplňte HTTPS blok:

server {
    listen 80;
    server_name panel.example.cz;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name panel.example.cz;
    root /var/www/pterodactyl/public;
    index index.php;

    ssl_certificate /etc/letsencrypt/live/panel.example.cz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.example.cz/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    client_max_body_size 100m;

    # ... location bloky stejné jako v HTTP verzi ...
}

Na novějších verzích nginx (1.25.1+) se místo listen 443 ssl http2; doporučuje zápis listen 443 ssl; a samostatná direktiva http2 on;. Starý zápis funguje, jen vypíše varování.

sudo nginx -t && sudo systemctl reload nginx

Zkontrolujte také APP_URL v /var/www/pterodactyl/.env – musí začínat https://. Po změně spusťte php artisan config:clear.

Certifikát pro node (Wings)

Na nodu obvykle žádný webserver neběží, proto použijte režim standalone, kdy certbot na chvíli sám naslouchá na portu 80:

sudo ufw allow 80/tcp
sudo certbot certonly --standalone -d node1.example.cz

Pokud na nodu nginx běží, použijte stejně jako u Panelu --nginx.

Zapnutí SSL ve Wings

  1. V Panelu u nodu nastavte Communicate Over SSL → Use SSL Connection a FQDN na node1.example.cz.
  2. V /etc/pterodactyl/config.yml ověřte sekci api.ssl:
api:
  host: 0.0.0.0
  port: 8080
  ssl:
    enabled: true
    cert: /etc/letsencrypt/live/node1.example.cz/fullchain.pem
    key: /etc/letsencrypt/live/node1.example.cz/privkey.pem
  1. Restartujte Wings:
sudo systemctl restart wings

Ověření z jiného stroje:

curl -I https://node1.example.cz:8080

Odpověď (i 401 nebo 404) znamená, že TLS handshake proběhl. Chyba certifikátu znamená špatnou cestu nebo doménu.

Automatická obnova

Certifikáty Let’s Encrypt platí 90 dní. Balíček certbot instaluje systemd timer, který obnovu zkouší automaticky (systemctl list-timers | grep certbot). Problém je, že Wings po obnově certifikát sám znovu nenačte – potřebuje restart.

Řešení je deploy hook, který se spustí jen při skutečné obnově:

sudo tee /etc/letsencrypt/renewal-hooks/deploy/restart-wings.sh > /dev/null <<'EOF'
#!/bin/sh
systemctl restart wings
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-wings.sh

U standalone režimu musí být při obnově volný port 80. Otestujte nanečisto:

sudo certbot renew --dry-run

Na serveru s Panelem stačí reload nginx – plugin --nginx to zařídí sám.

Časté problémy

Příznak Příčina
Konzole hlásí websocket error Panel na HTTPS, Wings na HTTP
Červené srdíčko po zapnutí SSL Wings nebyl restartován nebo nesedí FQDN
Certbot hlásí timeout Port 80 blokovaný firewallem nebo Cloudflare proxy
Po 90 dnech nefunguje konzole Chybí deploy hook pro restart Wings

Restart Wings neukončuje běžící herní servery – kontejnery v Dockeru běží dál a Wings se k nim po startu znovu připojí.