From 9a8984128252d4e1148f3feb9fa06d4fb6c88768 Mon Sep 17 00:00:00 2001 From: thomas Date: Wed, 19 Nov 2025 17:51:48 +0000 Subject: [PATCH] readme --- readme.md | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d7ce38a --- /dev/null +++ b/readme.md @@ -0,0 +1,246 @@ +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 ---" \ No newline at end of file