update
This commit is contained in:
430
readme.md
430
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 <<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 ---"
|
||||
# 🚀 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`)
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 📁 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.
|
||||
|
||||
Reference in New Issue
Block a user