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)
This commit is contained in:
commit
b8a99e6e9e
25 changed files with 1766 additions and 0 deletions
198
README.md
Normal file
198
README.md
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
# ⛏ 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 (~1–2 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue