CTmine-client/README.md
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

198 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ⛏ 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](#dashboard-entwickeln).
---
## Schnellstart
```bash
# 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 öffnen** → http://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:
```bash
curl -X POST http://localhost:8080/api/mc/start
```
---
## Dashboard entwickeln
Für die Vue-Entwicklung ohne jedes Mal neu zu bauen:
```bash
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.