2025-11-19 17:51:48 +00:00
2025-11-19 17:51:48 +00:00

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.

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 ---"
Description
No description provided
Readme 95 KiB
Languages
Shell 100%