- NEW: services/hermes/service.init — wartet auf Hermes-API, konfiguriert Provider aus shared.env (OpenRouter bevorzugt), gibt Dashboard-URL aus - NEW: services/paperclip/service.init — extrahiert PaperClip-Setup aus main() in eigenständiges Skript (Patch, Onboarding, Bootstrap-URL) - NEW: run_service_inits() in deploy_script.sh — ruft automatisch alle service.init-Skripte nach dem Start auf - CLEANUP: main() in deploy_script.sh ist jetzt schlank und generisch
PaperClip
PaperClip ist eine Plattform zur Orchestrierung von KI-Agenten, die über Docker und Caddy betrieben wird.
Dieses Repository enthält die Infrastruktur, um PaperClip inklusive Caddy (Reverse-Proxy) und einer Postgres-Datenbank auf einem neuen Server auszurollen.
Architektur
- Reverse Proxy: Caddy
- Datenbank: Postgres 17
- Anwendung: PaperClip (via
ghcr.io/paperclipai/paperclip:latest) - Agent-Runtime: Hermes Agent (via
nousresearch/hermes-agent:latest) — Dashboard:hermes.paperclip.orfel.de
Alle Volumes werden als lokale Mounts unter /opt/PaperClip-Data/ auf dem Host abgelegt.
Installation & Deployment
Um das System auf einem neuen Server (z. B. Hetzner CX23) aufzusetzen, klone das Repository nach /opt/PaperClip und führe das Master-Deployment-Skript als root aus.
# Repository klonen
sudo mkdir -p /opt/PaperClip
sudo git clone https://git.orfel.de/Jannik/PaperClip.git /opt/PaperClip
# Setup & Deploy
sudo bash /opt/PaperClip/deploy_script.sh
Das Skript ist idempotent und kümmert sich um:
- Die Installation von Docker, age und fail2ban.
- Das Einrichten des Swaps und der Cronjobs (für automatische Updates).
- Das Entschlüsseln der
.env-Dateien mit age. - Das Starten von Caddy, Postgres und PaperClip.
Umgebungsvariablen hinzufügen oder ändern
Es gibt zwei Arten von .env-Dateien:
| Datei | Inhalt | Gilt für |
|---|---|---|
services/shared.env(.age) |
API Keys (OpenRouter, Mistral, etc.) | Alle Services |
services/<name>/.env(.age) |
Service-spezifische Secrets (DB-Passwort, Auth-Secret) | Nur dieser Service |
Da .env-Dateien per .gitignore ausgeschlossen sind, wird stattdessen jeweils die .age-Variante ins Repository gepusht. Nach Änderungen neu verschlüsseln:
# Geteilte API Keys (alle Services)
age -r <AGE_PUBLIC_KEY> -o services/shared.env.age services/shared.env
# Service-spezifisch (z. B. PaperClip)
age -r <AGE_PUBLIC_KEY> -o services/paperclip/.env.age services/paperclip/.env
LLM Konfiguration & Onboarding Workaround
Paperclip ist in seiner Benutzeroberfläche bei der Erstinstallation stark auf offizielle OpenAI- oder Anthropic (Claude)-Accounts fokussiert. Wenn du stattdessen alternative Provider wie OpenRouter oder Mistral nutzen möchtest, greift ein Workaround im Deployment-Prozess:
-
API Keys in der
.envhinterlegen: Trage deine gewünschten API-Keys in dieservices/paperclip/.envein (z. B.OPENROUTER_API_KEY=sk-or-v1-...). -
Automatischer Patch durch das Deploy-Skript: Das
deploy_script.sherkennt automatisch, wenn einOPENROUTER_API_KEY(oderMISTRAL_API_KEY) vorhanden ist, aber kein nativer OpenAI/Claude-Key. Es führt dann folgende Schritte aus:- Setzt
OPENAI_API_KEYauf deinen OpenRouter/Mistral-Key. - Setzt
OPENAI_BASE_URLauf die entsprechende API-URL (z. B.https://openrouter.ai/api/v1). - WICHTIG: Das Skript patcht den Paperclip-Container (die Datei
ai-connections.js) direkt nach dem Start. Dadurch wird sichergestellt, dass die strenge UI-Validierung beim Onboarding deine alternative URL (OPENAI_BASE_URL) verwendet und nicht hartcodiert bei OpenAI anfragt.
- Setzt
-
Das Onboarding in der UI abschließen:
- Sobald du deinen CEO-Account über den Invite-Link erstellst, landest du im Schritt "Connect a model".
- Klicke hier auf die Schaltfläche OpenAI (API).
- Füge exakt deinen OpenRouter- oder Mistral-Key in das Textfeld ein und klicke auf "Connect".
- Paperclip testet den Key nun erfolgreich gegen deinen Provider und lässt dich ins Dashboard!
Hermes Agent
Hermes Agent ist ein Open-Source-KI-Agent von Nous Research, der als eigenständiger Docker-Service läuft und von PaperClip als "Mitarbeiter" eingestellt werden kann.
Architektur
- Container:
hermes(Image:nousresearch/hermes-agent:latest) - Netz: Im selben
paperclip-net— PaperClip erreicht Hermes intern überhttp://hermes:8642 - Web-Dashboard:
https://hermes.paperclip.orfel.de(Port 9119) - Daten:
/opt/PaperClip-Data/hermes/auf dem Host
Hermes in PaperClip einbinden
Nachdem der Service gestartet ist, kann PaperClip Hermes als Agenten einstellen:
- Im PaperClip-Dashboard → "Hire Agent"
- Adapter wählen:
hermes_gateway - Gateway-URL eintragen:
http://hermes:8642 - Hermes-Agent konfigurieren und Tasks zuweisen
Umgebungsvariablen ändern
Die .env für Hermes liegt unter services/hermes/.env (nicht committed). Nach Änderungen neu verschlüsseln:
age -r <DEIN_AGE_PUBLIC_KEY> -o services/hermes/.env.age services/hermes/.env