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 1. `README.md` (Denne fil) 2. `docker-compose.yml` 3. `install.sh` (Til opsætning af mapper og Nginx-konfig) 4. `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. ```bash 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 < /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 ---"