From 73c4985ac158ecba1fbf3f10996517fc29f94056 Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Mon, 8 Dec 2025 20:44:03 +0100 Subject: [PATCH] new file: .env.example new file: .gitignore new file: README.md new file: docker-compose.yml --- .env.example | 65 ++++++ .gitignore | 32 +++ README.md | 495 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 126 ++++++++++++ 4 files changed, 718 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..eadc884 --- /dev/null +++ b/.env.example @@ -0,0 +1,65 @@ +# ======================================== +# MINECRAFT SERVER KONFIGURATION +# ======================================== + +# ===== Server Software ===== +# Mögliche Werte: PAPER, PURPUR, SPIGOT, FABRIC, FORGE, VANILLA, VELOCITY +SERVER_TYPE=PAPER + +# Minecraft Version (z.B. 1.21, 1.20.4, 1.19.4, latest) +MC_VERSION=1.21 + +# ===== Server Name & Info ===== +SERVER_NAME=Mein Minecraft Server +MOTD=§6Willkommen auf meinem Server! +SERVER_PORT=25565 + +# ===== RAM Einstellungen ===== +MIN_RAM=2G +MAX_RAM=4G + +# ===== Spieler Einstellungen ===== +MAX_PLAYERS=20 +DIFFICULTY=normal +GAMEMODE=survival +PVP=true + +# ===== Welt Einstellungen ===== +WORLD_NAME=world +# Optional: Seed für Weltgenerierung (leer lassen für random) +WORLD_SEED= +VIEW_DISTANCE=10 +SIMULATION_DISTANCE=8 + +# ===== Velocity/BungeeCord Integration ===== +# Setze auf FALSE wenn Server hinter Velocity/Bungeecord läuft +ONLINE_MODE=TRUE +# Velocity Secret (nur bei Velocity Modern Forwarding) +VELOCITY_SECRET= + +# ===== Features ===== +ENABLE_COMMAND_BLOCK=true +SPAWN_PROTECTION=16 +ALLOW_FLIGHT=false +ENABLE_WHITELIST=false +ENFORCE_WHITELIST=false + +# ===== RCON (für Console Zugriff) ===== +RCON_PASSWORD=minecraft +RCON_PORT=25575 + +# ===== Operators (Admins) ===== +# Komma-getrennte Liste von Spielernamen oder UUIDs +OPS= + +# ===== Timezone ===== +TIMEZONE=Europe/Berlin + +# ======================================== +# SFTP KONFIGURATION (Zugriff auf MC Server Ordner) +# ======================================== + +SFTP_PORT=2222 +SFTP_USER=mcadmin +# ⚠️ WICHTIG: Ändere dieses Passwort! +SFTP_PASSWORD=changeme123 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15070ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# .env Datei wird in Coolify über Environment Variables verwaltet +.env + +# Node.js (falls alte Generator-Dateien noch da sind) +node_modules/ +package-lock.json + +# Logs +logs/ +*.log + +# OS +.DS_Store +Thumbs.db + +# IDE +.vscode/ +.idea/ +*.swp + +# Backups +backups/ +*.tar.gz + +# Alte Generator-Dateien (nicht mehr benötigt) +server.js +views/ +public/ +Dockerfile +.dockerignore +package.json +create-minecraft-server.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..36d14d6 --- /dev/null +++ b/README.md @@ -0,0 +1,495 @@ +# Minecraft Server Generator für Coolify + +Web-basierter Generator für Minecraft Server mit Velocity-Netzwerk Integration und SFTP-Zugriff. Direkt in Coolify deploybar! + +## 🎯 Features + +- ✅ **Web-Interface** - Benutzerfreundliche Oberfläche zur Server-Erstellung +- ✅ **Automatische Generierung** - Download fertiger Docker Compose Konfigurationen +- ✅ **Velocity Integration** - Perfekt für Proxy-Netzwerke konfiguriert +- ✅ **SFTP Zugriff** - Einfache Plugin-Verwaltung über FileZilla/WinSCP +- ✅ **Persistent Volumes** - Daten bleiben bei Updates erhalten +- ✅ **Docker Compose Ready** - Direkt in Coolify nutzbar +- ✅ **Health Checks** - Automatische Überwachung +- ✅ **Performance Optimiert** - Aikar Flags und Best Practices + +## 🚀 Schnellstart + +### 1. Generator in Coolify deployen + +#### Auf Gitea hochladen: +```bash +# Repository initialisieren +git init +git add . +git commit -m "Initial commit: Minecraft Server Generator" + +# Auf Gitea pushen +git remote add origin https://dein-gitea-server/user/minecraft-generator.git +git push -u origin main +``` + +#### In Coolify importieren: +1. Gehe zu Coolify Dashboard +2. **New Resource** → **Docker Compose** +3. Verbinde dein Gitea Repository +4. Branch: `main` +5. **Deploy!** + +Der Generator läuft dann auf Port 3000 und ist über deine Coolify-Domain erreichbar. + +### 2. Minecraft Server erstellen + +1. Öffne den Generator in deinem Browser +2. Fülle das Formular aus: + - Server Name (z.B. lobby, survival, minigames) + - Minecraft Version + - Server Software (Paper empfohlen) + - RAM Einstellungen + - Velocity Secret + - SFTP Zugangsdaten +3. Klicke auf **"Server-Dateien generieren"** +4. ZIP-Datei wird automatisch heruntergeladen + +### 3. Server deployen + +```bash +# ZIP entpacken +unzip minecraft-lobby.zip + +# Neues Git Repo erstellen +cd minecraft-lobby +git init +git add . +git commit -m "Initial commit: Lobby Server" + +# Auf Gitea pushen +git remote add origin https://dein-gitea-server/user/mc-lobby.git +git push -u origin main +``` + +Dann in Coolify: +1. **New Resource** → **Docker Compose** +2. Gitea Repository verbinden +3. **Deploy!** + +## 📖 Voraussetzungen + +- Coolify Installation +- Gitea oder anderer Git-Server +- Docker & Docker Compose (automatisch durch Coolify) + +## 📁 Generierte Struktur + +Nach dem Ausführen wird folgende Struktur erstellt: + +``` +[server-name]/ +├── docker-compose.yml # Docker Compose Konfiguration +├── .coolify.yml # Coolify spezifische Config +├── config/ # Server Konfiguration +│ ├── paper-global.yml # Velocity Integration +│ ├── spigot.yml +│ └── server.properties +├── deploy.sh # Deployment Script +├── README.md # Server-spezifische Dokumentation +└── .gitignore +``` + +## 🌐 Velocity Netzwerk Setup + +### 1. Backend Server (Lobby, Survival, etc.) + +Jeder Backend-Server wird automatisch mit Velocity-Support konfiguriert: + +```yaml +proxies: + velocity: + enabled: true + online-mode: false + secret: 'dein-secret' +``` + +### 2. Velocity Proxy Konfiguration + +Füge deine Server zur `velocity.toml` hinzu: + +```toml +[servers] + lobby = "server1.coolify:25565" + survival = "server2.coolify:25566" + minigames = "server3.coolify:25567" + +try = [ + "lobby" +] + +[forced-hosts] + "lobby.deine-domain.de" = ["lobby"] + "survival.deine-domain.de" = ["survival"] + "minigames.deine-domain.de" = ["minigames"] + +[player-info-forwarding] + mode = "modern" + secret = "dein-gemeinsames-secret" +``` + +## 📦 SFTP Plugin-Verwaltung + +Jeder Server bekommt einen eigenen SFTP-Container für einfache Plugin-Verwaltung. + +### Verbindung mit FileZilla + +1. Öffne FileZilla +2. **Host:** `sftp://dein-server.de` +3. **Port:** Der konfigurierte SFTP Port (z.B. 2222) +4. **Benutzer:** Dein SFTP Username +5. **Passwort:** Dein SFTP Passwort +6. Verbinden! + +### Verbindung mit WinSCP + +1. Öffne WinSCP +2. Neuer Session + - Protokoll: SFTP + - Host: dein-server.de + - Port: SFTP Port + - Benutzername & Passwort +3. Anmelden! + +### Ordnerstruktur über SFTP + +``` +/home/[username]/ +├── plugins/ # Hier Plugins hochladen (.jar Dateien) +├── config/ # Konfigurationsdateien +└── data/ # Weltdaten (nur lesend) +``` + +### Plugins installieren + +1. Verbinde dich via SFTP +2. Navigiere zu `/plugins` +3. Lade deine `.jar` Dateien hoch +4. Starte Server neu in Coolify oder via SSH: + ```bash + docker-compose restart minecraft-[server-name] + ``` + +## 🔧 Deployment in Coolify + +### Option 1: Über Git Repository (Empfohlen) + +```bash +# In deinem Server-Ordner +cd [server-name] + +# Git initialisieren +git init +git add . +git commit -m "Initial commit: [server-name]" + +# Zu deinem Repository pushen +git remote add origin https://github.com/dein-user/dein-repo.git +git push -u origin main +``` + +Dann in Coolify: +1. **New Resource** → **Docker Compose** +2. Git Repository verbinden +3. Branch auswählen (main) +4. Deploy! + +### Option 2: Direkt auf Coolify Server + +```bash +# Kopiere Ordner auf Coolify Server +scp -r [server-name] user@coolify-server:/pfad/ + +# SSH auf Server +ssh user@coolify-server + +# Deploy +cd /pfad/[server-name] +./deploy.sh +``` + +## 🎮 Mehrere Server erstellen + +Du kannst das Skript mehrmals ausführen für verschiedene Server: + +```bash +# Lobby Server +./create-minecraft-server.sh +# Input: lobby, 1.21, Paper, 2GB-4GB, Port 25565, SFTP Port 2222 + +# Survival Server +./create-minecraft-server.sh +# Input: survival, 1.21, Paper, 4GB-8GB, Port 25566, SFTP Port 2223 + +# Minigames Server +./create-minecraft-server.sh +# Input: minigames, 1.20.4, Paper, 2GB-4GB, Port 25567, SFTP Port 2224 +``` + +Jeder Server bekommt: +- Eigenen Docker Container +- Eigene Volumes (Daten persistent) +- Eigenen SFTP Zugang +- Eigenen Port + +## 🛠️ Server Management + +### Logs ansehen (in Coolify oder SSH) + +```bash +# Alle Logs +docker-compose logs -f + +# Nur Minecraft Server +docker-compose logs -f minecraft-[server-name] + +# Nur SFTP Server +docker-compose logs -f sftp-[server-name] +``` + +### Server Console + +```bash +# Interaktive Minecraft Console +docker exec -it mc-[server-name] rcon-cli + +# Dann kannst du Commands ausführen: +> list +> op Username +> whitelist add Username +``` + +### Backup erstellen + +```bash +# Erstelle Backup Ordner +mkdir -p backups + +# Backup +docker run --rm \ + -v mc-[server-name]-data:/data \ + -v $(pwd)/backups:/backup \ + alpine tar czf /backup/backup-$(date +%Y%m%d-%H%M%S).tar.gz -C /data . +``` + +### Server neustarten + +```bash +docker-compose restart minecraft-[server-name] +``` + +### Server stoppen + +```bash +docker-compose down +``` + +### Server starten + +```bash +docker-compose up -d +``` + +## 🔒 Sicherheit Best Practices + +### 1. Firewall Konfiguration + +Nur Velocity Proxy sollte sich zu Backend-Servern verbinden können: + +```bash +# Auf Backend-Server (z.B. mit ufw) +sudo ufw allow from [VELOCITY-PROXY-IP] to any port 25565 +sudo ufw deny 25565 # Blockiere von allen anderen +``` + +### 2. Sichere Secrets verwenden + +```bash +# Generiere sichere Secrets +openssl rand -base64 32 +``` + +Nutze diesen Output für `forwarding-secret`. + +### 3. SFTP Passwörter ändern + +Nach dem ersten Setup, ändere SFTP Passwörter in der `docker-compose.yml`: + +```yaml +command: ${SFTP_USER}:neues-sicheres-passwort:1000:1000:plugins,config,data +``` + +### 4. Regelmäßige Updates + +```bash +# Docker Images updaten +docker-compose pull +docker-compose up -d +``` + +## 📊 Performance Tipps + +### 1. Aikar Flags (bereits aktiviert) + +Die optimalen JVM Flags sind bereits gesetzt via `USE_AIKAR_FLAGS: "true"`. + +### 2. View Distance anpassen + +In `server.properties` oder als Environment Variable: + +```yaml +VIEW_DISTANCE: 8 # Reduzieren bei Lag +SIMULATION_DISTANCE: 6 +``` + +### 3. Paper Timings + +Auf dem Server: +``` +/timings on +# Warte 10-15 Minuten +/timings paste +``` + +Analysiere die URL um Lag-Quellen zu finden. + +### 4. Chunk-Loading optimieren + +In `paper-world-defaults.yml`: +```yaml +chunks: + auto-save-interval: 6000 # 5 Minuten statt 1 +``` + +## 🐛 Troubleshooting + +### Problem: Server startet nicht + +**Lösung:** +```bash +# Prüfe Logs +docker-compose logs minecraft-[server-name] + +# Häufige Fehler: +# - Port bereits belegt → Ändere Port in docker-compose.yml +# - Zu wenig RAM → Erhöhe Memory Limits +# - EULA nicht akzeptiert → Sollte automatisch sein, prüfe EULA: "TRUE" +``` + +### Problem: Velocity Verbindung fehlgeschlagen + +**Lösung:** +1. Prüfe ob Secret in Velocity und Paper identisch ist +2. Stelle sicher dass `online-mode=false` auf Backend-Server +3. Teste Netzwerk-Verbindung: + ```bash + # Auf Velocity Server + telnet backend-server 25565 + ``` + +### Problem: SFTP Login funktioniert nicht + +**Lösung:** +```bash +# Prüfe SFTP Container Status +docker-compose ps sftp-[server-name] + +# Prüfe Logs +docker-compose logs sftp-[server-name] + +# Teste Verbindung +sftp -P [SFTP-PORT] [USER]@[HOST] +``` + +### Problem: Plugins werden nicht geladen + +**Lösung:** +1. Prüfe ob Plugin kompatibel mit Minecraft Version ist +2. Checke Server Logs nach Fehlern: + ```bash + docker-compose logs minecraft-[server-name] | grep ERROR + ``` +3. Stelle sicher dass `.jar` Dateien im richtigen Ordner sind +4. Restart nach Plugin-Installation: + ```bash + docker-compose restart minecraft-[server-name] + ``` + +## 📚 Empfohlene Plugins + +### Essentials +- **LuckPerms** - Permission Management +- **EssentialsX** - Core Commands +- **Vault** - Economy API + +### Velocity Netzwerk +- **LiteBans** - Network-wide Bans +- **TAB** - Tablist & Scoreboard +- **AdvancedPortals** - Server Portale +- **ViaVersion** - Multi-Version Support + +### Performance & Optimization +- **Chunky** - Pre-generate Chunks +- **FarmControl** - Optimize Farms +- **ClearLag** - Remove Entity Lag + +### Fun & Features +- **Citizens** - NPCs +- **WorldEdit** - Building Tools +- **CoreProtect** - Rollback System +- **Geyser** - Bedrock Support (optional) + +## 🔄 Update Prozess + +### Server Software updaten + +```bash +# In docker-compose.yml VERSION ändern +VERSION: "1.21.1" + +# Neustart +docker-compose pull +docker-compose up -d +``` + +### Plugins updaten + +1. Via SFTP zu `/plugins` verbinden +2. Alte `.jar` löschen +3. Neue `.jar` hochladen +4. Server neustarten + +## 📞 Support & Community + +- **Paper Docs:** https://docs.papermc.io/ +- **Velocity Docs:** https://docs.papermc.io/velocity +- **Coolify Docs:** https://coolify.io/docs + +## 📝 Changelog + +### Version 1.0.0 (Initial Release) +- ✅ Automatische Server-Erstellung +- ✅ Velocity Integration +- ✅ SFTP Support +- ✅ Docker Compose Setup +- ✅ Coolify Kompatibilität +- ✅ Health Checks +- ✅ Persistent Volumes + +## 🙏 Credits + +Erstellt für einfaches Minecraft Server Management mit Coolify. + +**Verwendete Docker Images:** +- `itzg/minecraft-server` - Minecraft Server +- `atmoz/sftp` - SFTP Server + +--- + +**Made with ❤️ for the Minecraft Community** diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b40e191 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,126 @@ +version: '3.8' + +services: + minecraft: + image: itzg/minecraft-server:latest + container_name: minecraft-server + restart: unless-stopped + + environment: + # ===== BASIS KONFIGURATION ===== + EULA: "TRUE" + + # Server Software & Version + TYPE: ${SERVER_TYPE:-PAPER} + VERSION: ${MC_VERSION:-1.21} + + # ===== MEMORY EINSTELLUNGEN ===== + MEMORY: ${MAX_RAM:-4G} + INIT_MEMORY: ${MIN_RAM:-2G} + USE_AIKAR_FLAGS: "true" + + # ===== SERVER EINSTELLUNGEN ===== + SERVER_NAME: ${SERVER_NAME:-Minecraft Server} + MOTD: ${MOTD:-§6Minecraft Server §7- §bPowered by Coolify} + MAX_PLAYERS: ${MAX_PLAYERS:-100} + DIFFICULTY: ${DIFFICULTY:-normal} + MODE: ${GAMEMODE:-survival} + PVP: ${PVP:-true} + + # ===== WORLD EINSTELLUNGEN ===== + LEVEL: ${WORLD_NAME:-world} + SEED: ${WORLD_SEED:-} + MAX_WORLD_SIZE: ${MAX_WORLD_SIZE:-29999984} + VIEW_DISTANCE: ${VIEW_DISTANCE:-10} + SIMULATION_DISTANCE: ${SIMULATION_DISTANCE:-8} + + # ===== VELOCITY/BUNGEECORD ===== + ONLINE_MODE: ${ONLINE_MODE:-FALSE} + # Für Velocity Modern Forwarding + PAPER_PROXY_SECRET: ${VELOCITY_SECRET:-} + + # ===== PERFORMANCE ===== + ENABLE_ROLLING_LOGS: "true" + MAX_TICK_TIME: ${MAX_TICK_TIME:-60000} + + # ===== PLUGINS/MODS ===== + PLUGINS_SYNC_UPDATE: "true" + REMOVE_OLD_MODS: "false" + + # ===== FEATURES ===== + ENABLE_COMMAND_BLOCK: ${ENABLE_COMMAND_BLOCK:-true} + SPAWN_PROTECTION: ${SPAWN_PROTECTION:-16} + ALLOW_FLIGHT: ${ALLOW_FLIGHT:-false} + ENABLE_WHITELIST: ${ENABLE_WHITELIST:-false} + ENFORCE_WHITELIST: ${ENFORCE_WHITELIST:-false} + + # ===== RCON (für Console Zugriff) ===== + ENABLE_RCON: "true" + RCON_PASSWORD: ${RCON_PASSWORD:-minecraft} + RCON_PORT: 25575 + + # ===== TIMEZONE ===== + TZ: ${TIMEZONE:-Europe/Berlin} + + # ===== OPERATOR ===== + OPS: ${OPS:-} + + ports: + - "${SERVER_PORT:-25565}:25565" + - "${RCON_PORT:-25575}:25575" + + volumes: + - minecraft-data:/data + + networks: + - minecraft-network + + labels: + - "coolify.managed=true" + + healthcheck: + test: mc-health + interval: 30s + timeout: 10s + retries: 3 + start_period: 180s + + # ===== SFTP SERVER FÜR VOLLZUGRIFF AUF MC SERVER ===== + sftp: + image: atmoz/sftp:latest + container_name: minecraft-sftp + restart: unless-stopped + + ports: + - "${SFTP_PORT:-2222}:22" + + volumes: + - minecraft-data:/home/${SFTP_USER:-mcadmin}/minecraft + - sftp-ssh-keys:/home/${SFTP_USER:-mcadmin}/.ssh + + command: ${SFTP_USER:-mcadmin}:${SFTP_PASSWORD:-changeme123}:1000:1000:minecraft + + networks: + - minecraft-network + + labels: + - "coolify.managed=true" + + depends_on: + - minecraft + +volumes: + minecraft-data: + driver: local + labels: + - "coolify.managed=true" + sftp-ssh-keys: + driver: local + labels: + - "coolify.managed=true" + +networks: + minecraft-network: + driver: bridge + labels: + - "coolify.managed=true"