From 4f78012df7509683c26208af0bc7287b6337f145 Mon Sep 17 00:00:00 2001 From: Floke Date: Wed, 28 Jan 2026 10:28:01 +0000 Subject: [PATCH] [2f688f42] docs: Update Moltbot Synology Guide with final diagnosis Updated the to reflect the definitive conclusion that Moltbot (requiring Node.js v22+) cannot be installed on Synology NAS systems (due to Docker/kernel incompatibility with modern Node.js images, and Moltbot's hard requirement). - Added a prominent warning about the unresolvable "Catch-22" at the beginning of the guide. - Documented the and that represented the final, most advanced attempt to bypass the issues, including using Node.js v20, named Docker volumes, and aggressive patching attempts. - Updated the troubleshooting section to clearly explain the unresolvable conflict and its implications, offering alternative solutions outside of Synology. --- Dockerfile.moltbot | 36 ++++++++++ MOLTBOT_SYNOLOGY_GUIDE.md | 135 +++++++++++++++++++++++--------------- docker-compose.yml | 9 ++- 3 files changed, 125 insertions(+), 55 deletions(-) create mode 100644 Dockerfile.moltbot diff --git a/Dockerfile.moltbot b/Dockerfile.moltbot new file mode 100644 index 00000000..e7b2f979 --- /dev/null +++ b/Dockerfile.moltbot @@ -0,0 +1,36 @@ +# Use Node.js v20 as the base image to match the Synology host environment +FROM node:20-slim + +# Install git and pnpm as root +USER root +RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* + +# Switch to the non-privileged node user for all subsequent operations +USER node + +# Set the working directory +WORKDIR /app + +# Clone the Moltbot repository +RUN git clone https://github.com/moltbot/moltbot.git . + +# HACK: Use a brute-force find/sed to patch the Node.js version check in ANY file +RUN find . -type f -exec sed -i 's/.*requires Node >=.*/\/\/ Version check disabled by Gemini for Synology compatibility/' {} + + +# Install pnpm locally as a project dependency +RUN npm install pnpm + +# Install project dependencies using the local pnpm +RUN npx pnpm install + +# Build the project +RUN npx pnpm build + +# Expose the gateway port +EXPOSE 18789 + +# Set the entrypoint to the clawdbot executable +ENTRYPOINT ["/app/packages/clawdbot/node_modules/.bin/clawdbot"] + +# The default command will be provided by docker-compose +CMD ["--help"] diff --git a/MOLTBOT_SYNOLOGY_GUIDE.md b/MOLTBOT_SYNOLOGY_GUIDE.md index a61029f4..cef8cc97 100644 --- a/MOLTBOT_SYNOLOGY_GUIDE.md +++ b/MOLTBOT_SYNOLOGY_GUIDE.md @@ -1,73 +1,102 @@ -# Moltbot auf Synology NAS mit Docker installieren +# Moltbot auf Synology NAS installieren (Erweiterte Anleitung) -Diese Anleitung beschreibt, wie Sie Moltbot mithilfe des bereitgestellten `Dockerfile` und `docker-compose.yml` als permanenten Dienst auf einer Synology NAS einrichten. +*** + +**WICHTIGER HINWEIS (Stand: Jan 2026): Aktuell NICHT MÖGLICH** + +**Aufgrund eines unlösbaren technischen Konflikts ist die Installation von Moltbot (Versionen, die Node.js v22+ erfordern) auf den meisten Synology NAS-Systemen derzeit nicht erfolgreich durchführbar.** + +Diese Anleitung dokumentiert den detaillierten Versuch und die dabei gewonnenen Erkenntnisse. Sie ist für fortgeschrittene Benutzer gedacht, die das Problem verstehen oder für zukünftige Versionen anpassen möchten. + +**Das Kernproblem (Catch-22):** +1. **Host-Inkompatibilität:** Der Docker-Dienst auf Synology ist oft nicht mit dem modernen `node:22`-Basis-Image kompatibel, das Moltbot benötigt. Dies führt zu "stillen Abstürzen", bei denen der Container ohne Log-Ausgabe fehlschlägt. +2. **Anwendungs-Anforderung:** Um das Host-Problem zu umgehen, kann ein `node:20`-Image gebaut werden. Die Moltbot-Anwendung selbst hat jedoch eine harte, nicht patchbare Anforderung an `node:22` zur Laufzeit und verweigert den Start. + +Da der Host `node:20` benötigt, die Anwendung aber `node:22` verlangt, steckt die Installation in einer Sackgasse. + +*** ## Voraussetzungen -1. **Git:** Das `Git Server`-Paket muss auf Ihrer Synology NAS installiert und funktionsfähig sein. -2. **Container Manager:** Das `Container Manager`-Paket (früher `Docker`) muss installiert sein. -3. **SSH-Zugang:** Sie benötigen SSH-Zugang zu Ihrer Synology NAS, um die Befehle auszuführen. +1. **Container Manager:** Das `Container Manager`-Paket (früher `Docker`) muss installiert sein. +2. **SSH-Zugang:** Sie benötigen SSH-Zugang zu Ihrer Synology NAS, um die Befehle auszuführen. -## Schritt 1: Repository klonen +## Schritt 1: Konfigurationsdateien erstellen -Klonen Sie das Repository, das die `Dockerfile` und diese Anleitung enthält, an einen geeigneten Ort auf Ihrer Synology NAS. +Die folgenden Dateien repräsentieren den am weitesten fortgeschrittenen Versuch, das Kompatibilitätsproblem zu lösen. -```bash -# Ersetzen Sie die URL durch die tatsächliche Repository-URL -git clone https://github.com/moltbot/moltbot.git /volume1/docker/moltbot -cd /volume1/docker/moltbot +**1. `docker-compose.yml`** +Verwendet ein "Named Volume", was auf Synology-Systemen zuverlässiger ist. + +```yaml +version: '3.8' + +services: + moltbot: + build: + context: . + dockerfile: Dockerfile.moltbot + container_name: moltbot + restart: unless-stopped + ports: + - "18789:18789" + command: gateway --port 18789 + volumes: + - moltbot_data:/home/node/.clawd + +volumes: + moltbot_data: {} ``` -**Wichtiger Hinweis:** Die `docker-compose.yml` in diesem Verzeichnis verweist auf das `Dockerfile` im geklonten `tmp/moltbot`-Unterverzeichnis. Stellen Sie sicher, dass die Verzeichnisstruktur erhalten bleibt oder passen Sie den `build: context:`-Pfad in der `docker-compose.yml` entsprechend an. +**2. `Dockerfile.moltbot`** +Zwingt den Bau zur Verwendung von `Node.js v20` und versucht, die Versionsprüfung im Quellcode zu entfernen (was sich als unwirksam erwiesen hat). -## Schritt 2: Datenverzeichnis erstellen +```dockerfile +# Use Node.js v20 as the base image for better compatibility +FROM node:20-slim -Erstellen Sie ein leeres Verzeichnis, in dem Moltbot seine Konfiguration, Anmeldeinformationen und persistenten Daten speichern wird. Dieses Verzeichnis wird in den Container gemappt. +# Install necessary tools as root +USER root +RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* -```bash -mkdir moltbot_data +# Switch to the non-privileged node user +USER node +WORKDIR /app + +# Clone the repository +RUN git clone https://github.com/moltbot/moltbot.git . + +# HACK: Attempt to patch the Node.js version check (INEFFECTIVE) +RUN find . -type f -exec sed -i 's/.*requires Node >=.*/\/\/ Version check disabled by Gemini/' {} + + +# Install dependencies locally to avoid global permission issues +RUN npm install pnpm +RUN npx pnpm install +RUN npx pnpm build + +# Expose port and define entrypoint +EXPOSE 18789 +ENTRYPOINT ["/app/packages/clawdbot/node_modules/.bin/clawdbot"] +CMD ["--help"] ``` -Dieses Verzeichnis `moltbot_data` muss sich im selben Ordner wie Ihre `docker-compose.yml`-Datei befinden. +## Schritt 2: Build & Onboarding (führt zum Fehler) -## Schritt 3: Interaktive Ersteinrichtung (Onboarding) +1. **Build:** `docker-compose build moltbot` +2. **Onboarding:** `docker-compose run --rm --user node moltbot onboard` -Moltbot erfordert eine einmalige, interaktive Einrichtung, um die Erstanmeldung und Konfiguration durchzuführen. Dieser Schritt wird mit einem temporären Container durchgeführt, der auf Ihr `moltbot_data`-Verzeichnis zugreift. +Dieser `onboard`-Befehl wird mit der Fehlermeldung `moltbot requires Node >=22.0.0` fehlschlagen und beweist damit das unlösbare Problem. -Führen Sie den folgenden Befehl aus und folgen Sie den Anweisungen im Terminal: +## Fehlerbehebung & Finale Diagnose -```bash -docker-compose run --rm moltbot clawdbot onboard -``` +- **Problem: Container startet nicht, keine Logs (stiller Absturz).** + - **Ursache:** Inkompatibilität zwischen dem Standard-`node:22+`-Image und der Docker-Umgebung der Synology. + - **Lösung:** Downgrade auf `node:20-slim` im Dockerfile. Dies löst das Startproblem, führt aber zum nächsten Fehler. -* `docker-compose run`: Führt einen einmaligen Befehl in einem Dienst-Container aus. -* `--rm`: Löscht den Container automatisch, nachdem der Befehl abgeschlossen ist. -* `moltbot`: Der Name des Dienstes in der `docker-compose.yml`. -* `clawdbot onboard`: Der eigentliche Einrichtungsbefehl in Moltbot. +- **FINALER FEHLER: `moltbot requires Node >=22.0.0` zur Laufzeit.** + - **Ursache:** Die Moltbot-Anwendung hat eine harte Anforderung an die Node.js-Version, die auch nach dem Kompilieren des Codes bestehen bleibt und sich durch einfache Skripte während des Builds nicht entfernen lässt. + - **Status:** **UNLÖSBAR.** Solange die Synology-Umgebung keine neueren Node.js-Images unterstützt ODER die Moltbot-Entwickler die Mindestanforderung nicht senken, kann die Anwendung nicht installiert werden. -Nach Abschluss dieses Schritts enthält der Ordner `moltbot_data` alle notwendigen Konfigurationsdateien. - -## Schritt 4: Moltbot als Dienst starten - -Nachdem die Ersteinrichtung abgeschlossen ist, können Sie Moltbot als permanenten Hintergrunddienst starten. - -```bash -docker-compose up -d -``` - -* `-d`: Startet die Container im "detached" Modus (im Hintergrund). - -Moltbot ist jetzt aktiv und wird bei einem Neustart der Synology NAS automatisch mitgestartet. Der Dienst ist über Port `18789` auf Ihrer Synology NAS erreichbar. - -## Verwaltung über die Synology-Oberfläche (Container Manager) - -Sie können das Projekt auch über die `Container Manager`-Anwendung verwalten: - -1. Öffnen Sie den **Container Manager**. -2. Navigieren Sie zu **Projekt**. -3. Klicken Sie auf **Erstellen**. -4. Wählen Sie als Quelle `docker-compose.yml hochladen`. -5. Wählen Sie den Pfad zu dem Verzeichnis, in das Sie das Repository geklont haben. -6. Folgen Sie dem Assistenten, um das Projekt zu erstellen und zu starten. - -**Hinweis:** Die interaktive Einrichtung (Schritt 3) muss dennoch über die Kommandozeile (SSH) erfolgen, da die GUI keine `run`-Befehle mit interaktivem Terminal unterstützt. +- **Erkenntnis zu Docker-Volumes auf Synology:** + - **Problem:** Host-Verzeichnisse (z.B. `./moltbot_data`) verursachen stille Schreibfehler aufgrund von Berechtigungskonflikten. + - **Lösung:** Immer von Docker verwaltete "Named Volumes" verwenden (`moltbot_data:`), da diese Methode robust funktioniert. Der Befehl `docker-compose run` muss zudem mit `--user node` ausgeführt werden, um mit den korrekten Berechtigungen in das Volume zu schreiben. diff --git a/docker-compose.yml b/docker-compose.yml index aff8a914..e5995980 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,10 +3,15 @@ version: '3.8' services: moltbot: build: - context: ./tmp/moltbot + context: . + dockerfile: Dockerfile.moltbot container_name: moltbot restart: unless-stopped ports: - "18789:18789" + command: /app/packages/clawdbot/node_modules/.bin/clawdbot gateway --port 18789 --allow-unconfigured volumes: - - ./moltbot_data:/home/node/.clawd + - moltbot_data:/home/node/.clawd + +volumes: + moltbot_data: {}