From 5182ce540340400021be719a67d0ce2e147055cb Mon Sep 17 00:00:00 2001 From: thomas Date: Fri, 21 Nov 2025 19:20:00 +0000 Subject: [PATCH] update --- readme.md | 430 +++++++++++++++++++++++------------------------------- 1 file changed, 184 insertions(+), 246 deletions(-) diff --git a/readme.md b/readme.md index d7ce38a..8367c69 100644 --- a/readme.md +++ b/readme.md @@ -1,246 +1,184 @@ -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 +# 🚀 TuxiNet Pterodactyl Stack – Docker Compose + +Komplet Pterodactyl Panel & Wings setup pakket til Docker, inkl.: + +- MariaDB (database) +- Redis (cache & køer) +- Panel (Pterodactyl web/APP) +- Wings (daemon til game servers) +- Nginx (reverse proxy) +- Certbot (Let's Encrypt SSL) +- 💜 Branded til **TuxiNet** med dark-mode/neon banner (`banner.png`) + +![Banner](banner.png) + +--- + +## 📁 Struktur + +Når du pakker dette ud i `/srv/pterodactyl`, vil du have: + +```text +/srv/pterodactyl/ +├── README.md +├── docker-compose.yml +├── install.sh +├── cert-renewal.sh +├── banner.png +├── docker/ +│ ├── mariadb/Dockerfile +│ ├── panel/Dockerfile +│ ├── redis/Dockerfile +│ ├── wings/Dockerfile +│ ├── nginx/Dockerfile +│ └── certbot/Dockerfile +├── panel/ +├── wings/ +├── servers/ +├── mysql/ +│ └── data/ +└── nginx/ + ├── conf.d/ + └── certbot/ + ├── conf/ + └── www/ +``` + +> Mapperne `panel/`, `wings/`, `servers/`, `mysql/data`, `nginx/...` er med som tomme mapper, så alt er klar fra start. + +--- + +## 🛠️ Trin 1: Klargøring + +### 1.1 Flyt projektet til `/srv/pterodactyl` + +```bash +sudo mkdir -p /srv/pterodactyl +sudo chown -R $(whoami):$(whoami) /srv/pterodactyl +# Kopiér/zippens indhold herind +``` + +--- + +### 1.2 Redigér `install.sh` + +Øverst i `install.sh`: + +```bash +DOMAIN="panel.ditdomæne.dk" # ← SKAL OPDATERES +``` + +--- + +### 1.3 Kør installationsscriptet + +```bash +cd /srv/pterodactyl +chmod +x install.sh +./install.sh +``` + +Dette opretter mappestruktur og en midlertidig Nginx-konfiguration + dummy certifikater. + +--- + +## ⚙️ Trin 2: Tilpas `docker-compose.yml` + +**Vigtige felter:** + +- MariaDB: + - `MYSQL_ROOT_PASSWORD` + - `MYSQL_PASSWORD` + +- Panel (Pterodactyl): + - `APP_URL=https://panel.ditdomæne.dk` + - Alle `MAIL_*` (SMTP-konfiguration) + +- Wings (game server ports): + - Tilføj fx `25565:25565` for Minecraft, m.m. + +Når alt er rettet, start stacken: + +```bash +docker-compose up -d +``` + +--- + +## 🔐 Trin 3: Hent rigtige SSL-certifikater + +Skift domæne og email i følgende kommando: + +```bash +docker-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: + +```bash +docker-compose restart nginx +``` + +--- + +## 🧩 Trin 4: Pterodactyl Panel Setup + +```bash +docker-compose exec panel php artisan migrate --force +docker-compose exec panel php artisan p:environment:setup +docker-compose exec panel php artisan p:user:make +``` + +Følg anvisningerne i terminalen for at oprette din admin-bruger. + +--- + +## 🛰️ Trin 5: Wings konfiguration + +1. Log ind i Panelet i browseren. +2. Opret en **Location** og derefter en **Node**. +3. Kopiér tokenet fra Node-konfigurationen. +4. Kør på hosten (indsæt dit token): + +```bash +docker-compose exec wings /bin/bash -c "echo '{ \"token\": \"DIT_TOKEN_HER\" }' > /etc/pterodactyl/config.json" +docker-compose restart wings +``` + +--- + +## 🔄 Trin 6: Automatisk SSL-fornyelse + +### 6.1 Gør scriptet eksekverbart + +```bash +chmod +x /srv/pterodactyl/cert-renewal.sh +``` + +### 6.2 Cron-job + +```bash +crontab -e +``` + +Tilføj: + +```cron +# Certbot automatisk fornyelse (08:00 & 20:00) +0 8,20 * * * /srv/pterodactyl/cert-renewal.sh >> /var/log/cert-renewal.log 2>&1 +``` + +--- + +## 🧡 Brand & Tilpasning (TuxiNet) + +- Banneret (`banner.png`) er lavet i dark-mode med neon/teal gaming-look. +- Du kan frit udskifte det med et nyt TuxiNet-brandet banner (samme filnavn, så README stadig virker). +- Dockerfiles har simple `LABEL`-felter, hvor du kan tilføje mere metadata, hvis du vil. + +Har du brug for en version med flere noder, Traefik i stedet for Nginx, eller ekstra monitoring (Prometheus/Grafana), kan vi bygge næste lag ovenpå den her stack.