No description
Find a file
Tronax b8a99e6e9e
Initial commit: CTmine-client (ContainerMine Client)
Docker-WebApp, die einen echten Minecraft Java-Client (Prism Launcher)
in einem Container mit virtuellem Display betreibt und per noVNC im
Browser anzeigt. Gedacht, um Accounts AFK an Farmen zu stellen.

- Multi-Stage Dockerfile: Vite/Vue-Build + Ubuntu-Runtime (Xvfb, x11vnc,
  websockify, noVNC, openbox, nginx, Prism Launcher 11.0.3)
- Vue 3 + Vite + TypeScript Dashboard (noVNC-iframe, Start/Stop,
  Status-Anzeige, Schnellstart-Anleitung)
- Node-Status-API ohne externe Dependencies (/api/status, /api/mc/*)
- docker-compose.yml mit PUID/PGID, konfigurierbarer Auflösung, shm_size
- Persistente Accounts/Instanzen in /config (Volume)
2026-08-08 21:08:51 +02:00
docker Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
web Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
.dockerignore Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
.env.example Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
.gitignore Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
docker-compose.yml Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
Dockerfile Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00
README.md Initial commit: CTmine-client (ContainerMine Client) 2026-08-08 21:08:51 +02:00

⛏ CTmine-client · ContainerMine Client

Eine Docker-WebApp, die einen echten Minecraft Java-Client im Container laufen lässt und ihn per noVNC direkt im Browser anzeigt. Ideal, um einen Account AFK an eine Farm zu stellen — ohne lokalen Minecraft-Client oder Java-Installation.

Das Dashboard ist eine Vite + Vue 3-Anwendung, die im selben Container mit ausgeliefert wird.


Architektur

Browser  ──HTTP/WS──▶  nginx (:8080)
                        ├── /            → Vue-Dashboard (statisch)
                        ├── /api/*       → Node-Status-API (127.0.0.1:3000)
                        └── /websockify  → websockify (127.0.0.1:6080)
                                              │
                       supervisord verwaltet ▼
                        Xvfb :0  →  x11vnc  →  websockify  →  Browser
                          ▲
                     Prism Launcher + echter Minecraft-Client
                     (rendert per Software-OpenGL/llvmpipe auf Xvfb)

Warum Prism Launcher statt offiziellem Mojang-Launcher? Der Mojang-Launcher nutzt für den Microsoft-Login ein eingebettetes Webview, das in einem headlessen Container regelmäßig Probleme macht. Prism startet denselben Vanilla-Client, ist aber container-freundlich und nutzt den Device-Code-Flow für den Login: Code notieren → microsoft.com/link auf irgendeinem Gerät öffnen → fertig.


Voraussetzungen

  • Docker (mit BuildKit) und Docker Compose v2
  • ~2 GB freier Speicher für das Image
  • Einen gültigen Microsoft-Account mit Minecraft-Lizenz
  • Chromium/Firefox (für WebGL & WebSocket in noVNC)

Lokales Bauen ohne Docker ist nicht vorgesehen. Wenn du nur das Dashboard entwickeln willst, siehe Entwicklung.


Schnellstart

# 1. Env-Datei erzeugen und anpassen
cp .env.example .env
#    PUID/PGID mit `id -u` / `id -g` setzen, damit ./config dir gehört.

# 2. Image bauen und starten
docker compose up -d --build

# 3. Dashboard öffnen
#    http://localhost:8080

Erster Login (einmalig)

  1. Dashboard öffnenhttp://localhost:8080
  2. Auf „Instanz starten“ klicken. Prism Launcher öffnet sich im VNC-Fenster.
  3. In Prism oben rechts: Konto → Konto hinzufügen → Microsoft.
  4. Prism zeigt einen Code an. Auf irgendeinem Gerät https://microsoft.com/link öffnen, Code eingeben, mit Microsoft einloggen.
  5. Zurück in Prism: im Hauptfenster die gewünschte Instanz wählen und auf „Spielen“ klicken. Prism lädt die passende Minecraft-Version + Java automatisch herunter.
  6. Im Minecraft-Hauptmenü: Mehrspieler → Server hinzufügen → Adresse der Farm eingeben → Verbinden.

Ab jetzt ist der Account auf der Farm. Der Login liegt persistent in ./config/prism und bleibt auch nach docker compose down erhalten.

Tipp: Bevor du den Container Neustartest, kannst du in Minecraft über Optionen → Steuerelemente auch schon die korrekte Farm-Anbindung (z. B. eine Trade/Anti-AFK-Makro-Mod) konfigurieren — sie bleibt erhalten.


AFK-Farm-Setup

Die konkrete Einrichtung hängt von deiner Farm ab. Typische Schritte:

  • Anti-AFK: periodisch springen/bewegen, damit der Server dich nicht kickt. Du kannst die Vanilla-Funktion (z. B. Wasserstrom, der dich ständig leicht bewegt) nutzen oder eine Client-Mod wie Mouse Tweaks / Inventory Profiles installieren. Mods legst du über Prism in die jeweilige Instanz.
  • Auto-Reconnect: manche Server trennen nach Stunden. Nutze ggf. eine Reconnect-Mod.
  • Fenster offen lassen: Solange das Dashboard geöffnet ist, siehst du den Client live. Du kannst den Tab schließen — Minecraft läuft im Container weiter. Nur der Container muss laufen.

Konfiguration (.env)

Variable Standard Bedeutung
PUID / PGID 1000 UID/GID des Container-Benutzers. Mit id -u/id -g deines Host-Users setzen, damit ./config dir gehört.
TZ Europe/Berlin Zeitzone des Containers.
DISPLAY_WIDTH 1280 Breite des virtuellen Displays (MC-Auflösung).
DISPLAY_HEIGHT 720 Höhe des virtuellen Displays.
DISPLAY_DEPTH 24 Farbtiefe (24 = 8-bit RGB).
DISPLAY_REFRESH 60 Bildwiederholrate des virtuellen Displays.
WEB_PORT 8080 Browser-Port.
VNC_PASSWORD (leer) Optional. Leer = ohne Auth (nur lokales Netz!).

API

Methode Pfad Beschreibung
GET /api/status Status von Display, VNC und Minecraft.
POST /api/mc/start Startet Prism Launcher.
POST /api/mc/stop Beendet Prism + Minecraft.

Beispiel:

curl -X POST http://localhost:8080/api/mc/start

Dashboard entwickeln

Für die Vue-Entwicklung ohne jedes Mal neu zu bauen:

cd web
npm install
npm run dev    # → http://localhost:5173 (proxyt /api + /websockify nach :8080)

Damit das Dev-Dashboard funktioniert, muss der Container laufen (docker compose up -d), damit der VNC-Stream und die API erreichbar sind.


Performance-Hinweise

  • Minecraft rendert im Container per llvmpipe (CPU-Software-OpenGL). Für AFK-Farmen absolut ausreichend (~12 CPU-Kerne), aber kein flüssiges PVP.
  • shm_size: 1gb ist gesetzt, damit OpenGL genug Shared Memory hat.
  • Bei verfübarer GPU kannst du /dev/dri durchreichen (in docker-compose.yml auskommentiert). MC nutzt dann Hardware-Rendering.

Projektstruktur

CTmine-client/
├── Dockerfile                # Multi-Stage: Vue-Build + Runtime
├── docker-compose.yml
├── .env.example
├── docker/
│   ├── entrypoint.sh         # PUID/PGID, /config, Xvfb/x11vnc-Conf generieren
│   ├── supervisor.conf       # Prozess-Manager für alle Dienste
│   ├── nginx.conf            # Dashboard + /api + /websockify Proxy
│   └── mc-api/               # Node-Status-API (ohne externe Dependencies)
│       ├── server.js
│       └── package.json
└── web/                      # Vite + Vue 3 + TypeScript Dashboard
    ├── package.json · vite.config.ts · tsconfig.json
    └── src/
        ├── App.vue · main.ts · api.ts · types.ts
        ├── styles/main.css
        └── components/
            ├── VncViewer.vue     # noVNC-Integration
            ├── ControlPanel.vue  # MC Start/Stop, Schnellstart-Anleitung
            └── StatusBar.vue     # Status-Indikatoren

Bekannte Einschränkungen

  • Sound ist im MVP nicht konfiguriert (für AFK-Farmen irrelevant).
  • Erster Login interaktiv: der Microsoft-Login muss einmalig im VNC-Fenster per Device-Code durchgeführt werden. Danach persistent.
  • EULA/Nutzungsbedingungen: Dieses Projekt stellt nur die Infrastruktur bereit. Du bist selbst für die Einhaltung der Mojang/Minecraft-Nutzungs- bedingungen und der Regeln deines Zielservers verantwortlich.

Lizenz

MIT — siehe LICENSE falls beigefügt. Minecraft ist Eigentum von Mojang/Microsoft; dieses Projekt steht nicht in offizieller Verbindung.