8.8 KiB
8.8 KiB
Markdown# 🚀 Pterodactyl Panel & Wings - Docker Compose Setup
Dette repository indeholder en komplet docker-compose opsætning til Pterodactyl Panel og Wings, inklusiv en MariaDB database, Redis til caching, Nginx som reverse proxy, og Certbot til automatisk SSL/TLS.
🌟 Indhold i dette repository
README.md(Denne fil)docker-compose.ymlinstall.sh(Til opsætning af mapper og Nginx-konfig)cert-renewal.sh(Til automatisk Certbot-fornyelse)
🛠️ Trin 1: Klargøring og Konfiguration
1.1 Opret Mappe og Hent Filer
Opret rodmappen på din host-maskine og gem alle de vedhæftede filer (docker-compose.yml, install.sh, cert-renewal.sh) heri.
mkdir -p /srv/pterodactyl
cd /srv/pterodactyl
# Hent/kopier filerne her
1.2 Redigér install.shÅbn install.sh og skift domænenavnet i toppen:Bash# /srv/pterodactyl/install.sh
DOMAIN="panel.ditdomæne.dk" # <--- SKAL REDIGERES
1.3 Kør InstallationsscriptetKør scriptet. Det opretter den nødvendige mappestruktur og en dummy Nginx-konfiguration:Bashchmod +x install.sh
./install.sh
1.4 Redigér docker-compose.ymlDu skal redigere følgende sektioner i docker-compose.yml:ServiceVariabelBeskrivelsemariadbMYSQL_ROOT_PASSWORD / MYSQL_PASSWORDSkift til stærke, unikke kodeord.panelDB_PASSWORDSkal matche mariadb password.panelMAIL_* variablerUdfyld dine SMTP-oplysninger for at aktivere email (vigtigt).panelAPP_URLSkift til dit faktiske domæne.wingsportsTilføj de porte, dine spilservere skal bruge (f.eks. 25565:25565).🚀 Trin 2: Start og SSL Opsætning2.1 Start ServicesStart alle definerede services:Bashdocker-compose up -d
2.2 Hent SSL-certifikater med CertbotSKIFT domæne og emailadresse i kommandoen. Dette henter det rigtige certifikat:Bashdocker-compose run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d panel.ditdomæne.dk \
--email din@email.dk \
--agree-tos \
--no-eff-email
Genstart Nginx for at indlæse de nye, gyldige certifikater:Bashdocker-compose restart nginx
2.3 Kør Pterodactyl SetupKør migrations og opret administratorbrugeren i Panel-containeren:Bash# Kør databasemigreringer og sæt APP_KEY
docker-compose exec panel php artisan migrate --force
docker-compose exec panel php artisan p:environment:setup
# Opret den første administratorbruger
docker-compose exec panel php artisan p:user:make
2.4 Konfigurering af WingsLog ind på dit Panel via browseren.Opret en Location og en Node.På Node-konfigurationssiden, kopier Konfigurations-tokenet.Kør denne kommando på din host, og ERSTAT "DIT_TOKEN_HER":Bash# Opretter den Wings-konfigurationsfil, den skal bruge
docker-compose exec wings /bin/bash -c "echo '{ \"token\": \"DIT_TOKEN_HER\" }' > /etc/pterodactyl/config.json"
# Genstart Wings for at indlæse konfigurationen
docker-compose restart wings
🔄 Trin 3: Automatisk Certifikatfornyelse3.1 cert-renewal.shGør fornyelsesscriptet eksekverbart:Bashchmod +x /srv/pterodactyl/cert-renewal.sh
3.2 Opret Cron JobÅbn din brugers Cron-tabel:Bashcrontab -e
Indsæt denne linje i bunden af filen (kører kl. 08:00 og 20:00 dagligt):Kodestykke# Kør Pterodactyl Certbot fornyelsesscript to gange dagligt
0 8,20 * * * /srv/pterodactyl/cert-renewal.sh >> /var/log/cert-renewal.log 2>&1
💾 Vedhæftede Filerdocker-compose.ymlYAMLversion: '3.7'
services:
# --- 1. MariaDB Database Service ---
mariadb:
image: mariadb:10.5
container_name: pterodactyl_database
restart: always
environment:
# SKAL UDSKIFTES!
MYSQL_ROOT_PASSWORD: DitSuperSikreRootPassword
MYSQL_DATABASE: panel
MYSQL_USER: pterodactyl
MYSQL_PASSWORD: DitSuperSikreDBPassword
volumes:
- /srv/pterodactyl/mysql/data:/var/lib/mysql
ports:
- "3306:3306"
# --- 2. Pterodactyl Panel Service (Webserver/PHP) ---
panel:
image: ghcr.io/pterodactyl/panel:latest
container_name: pterodactyl_panel
restart: always
depends_on:
- mariadb
- redis
environment:
# Databaseforbindelse
DB_HOST: mariadb
DB_PORT: 3306
DB_DATABASE: panel
DB_USERNAME: pterodactyl
DB_PASSWORD: DitSuperSikreDBPassword # SKAL MATCHES
# SMTP Email Konfiguration - SKAL UDFYLDES!
MAIL_FROM_ADDRESS: "noreply@ditdomæne.dk"
MAIL_FROM_NAME: "Pterodactyl Panel"
MAIL_DRIVER: smtp
MAIL_HOST: smtp.ditdomæne.dk # DIN SMTP HOST
MAIL_PORT: 587
MAIL_USERNAME: "din-email-bruger" # DIN SMTP BRUGER
MAIL_PASSWORD: "din-email-adgangskode" # DIN SMTP ADGANGSKODE
MAIL_ENCRYPTION: tls
# Generel App Konfiguration
APP_URL: [https://panel.ditdomæne.dk](https://panel.ditdomæne.dk) # SKAL REDIGERES
APP_TIMEZONE: Europe/Copenhagen
CACHE_DRIVER: redis
SESSION_DRIVER: redis
QUEUE_DRIVER: redis
REDIS_HOST: redis
REDIS_PORT: 6379
volumes:
- /srv/pterodactyl/panel:/app
# --- 3. Redis Service (Caching/Køer) ---
redis:
image: redis:latest
container_name: pterodactyl_redis
restart: always
# --- 4. Pterodactyl Wings Service (Game Server Daemon) ---
wings:
image: ghcr.io/pterodactyl/wings:latest
container_name: pterodactyl_wings
restart: always
cap_add:
- NET_ADMIN
- NET_RAW
ports:
# Wings API Port & SFTP Port (OBLIGATORISK)
- "8080:8080"
- "2022:2022"
# Tilføj dine spilserver-porte her:
# - "25565-25570:25565-25570"
volumes:
- /srv/pterodactyl/wings:/etc/pterodactyl
- /var/run/docker.sock:/var/run/docker.sock:ro
- /srv/pterodactyl/servers:/var/lib/pterodactyl/volumes
# --- 5. Nginx Reverse Proxy Service (Webserver med SSL) ---
nginx:
image: nginx:stable-alpine
container_name: pterodactyl_nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /srv/pterodactyl/nginx/conf.d:/etc/nginx/conf.d:ro
- /srv/pterodactyl/nginx/certbot/www:/var/www/certbot:ro
- /srv/pterodactyl/nginx/certbot/conf:/etc/letsencrypt:ro
depends_on:
- panel
# --- 6. Certbot Service (SSL/TLS) ---
certbot:
image: certbot/certbot
container_name: pterodactyl_certbot
volumes:
- /srv/pterodactyl/nginx/certbot/www:/var/www/certbot
- /srv/pterodactyl/nginx/certbot/conf:/etc/letsencrypt
entrypoint: /bin/sh -c "trap exit TERM; while :; do sleep 3600; done"
install.shBash#!/bin/bash
# Domæne du vil bruge til Pterodactyl Panel (SKAL REDIGERES!)
DOMAIN="panel.ditdomæne.dk"
# Opret hovedmapper
mkdir -p /srv/pterodactyl/{panel,wings,mysql/data,servers}
mkdir -p /srv/pterodactyl/nginx/{conf.d,certbot/{conf,www}}
# Opret Nginx konfigurationsfil
cat <<EOF > /srv/pterodactyl/nginx/conf.d/default.conf
server {
listen 80;
server_name ${DOMAIN};
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/certbot;
}
location / {
return 301 https://\$host\$request_uri;
}
}
server {
listen 443 ssl http2;
server_name ${DOMAIN};
# SSL konfiguration (Certbot stier)
ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/html/public;
index index.html index.php;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass panel:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param PATH_INFO \$fastcgi_path_info;
}
location ~ /\. {
deny all;
}
}
EOF
echo "✅ Mappestruktur og Nginx konfiguration er oprettet."
# Generer dummy certifikater for at starte Nginx
openssl req -x509 -nodes -newkey rsa:4096 -days 365 \
-keyout /srv/pterodactyl/nginx/certbot/conf/privkey.pem \
-out /srv/pterodactyl/nginx/certbot/conf/fullchain.pem \
-subj "/CN=${DOMAIN}" 2>/dev/null
echo "✅ Dummy SSL-certifikater oprettet."
echo ""
echo "Næste trin: Rediger 'docker-compose.yml' og kør 'docker-compose up -d'."
cert-renewal.shBash#!/bin/bash
# /srv/pterodactyl/cert-renewal.sh
# Script til automatisk fornyelse af Certbot certifikater
cd /srv/pterodactyl/ || exit
echo "--- Starter Let's Encrypt certifikatfornyelse ---"
# Kører Certbot for at tjekke fornyelse
docker-compose run --rm certbot renew --quiet
# Tjekker exit-koden
if [ $? -eq 0 ]; then
echo "Certbot kørsel succesfuld. Genstarter Nginx."
docker-compose restart nginx
else
echo "FEJL: Certbot fornyelsen mislykkedes."
fi
echo "--- Certifikatfornyelse afsluttet ---"