docs / getting-started / installation.md
Installation
Diese Anleitung bringt eine selbst gehostete entrytwo-Instanz zum Laufen.
entrytwo ist KI-native doppelte Buchführung mit Git-ähnlichem Datenmodell. Die KI bucht echte Journalbuchungen bei hoher Sicherheit. Vollständige Historie, Branches, Blame. Self-hosted.
Betrieb: Die meisten Produktions-Setups nutzen einen VPS mit Docker und HTTPS. Du kannst genauso lokal installieren und produktiv nutzen (z. B. auf dem Mac): dieselbe volle App, wie klassische Buchhaltungssoftware ohne Cloud. Läuft auf deinem VPS oder lokal.
Lass die KI die Installation machen
Kein Terminal-Mensch? Du kannst entrytwo trotzdem installieren. Gib einem KI-Coding-Agenten diese Seite (und das Repo) und bitte ihn, die Installation für dich zu erledigen — z. B. Claude Code, OpenClaw, Hermes, Cursor oder ein vergleichbares Tool, das Befehle auf deinem Rechner oder VPS ausführen kann. Sag ihm dein Ziel (lokal Mac vs. VPS + Domain), schick Fehlermeldungen zurück, wenn etwas scheitert, und teile Secrets (Passwörter, API-Keys) nicht in Chats, denen du nicht vertraust. Die Schritte unten bleiben die Quelle der Wahrheit; der Agent führt dich nur durch.
Voraussetzungen
- Node.js 20+
- PostgreSQL 14+ (oder das mitgelieferte Docker Compose)
- Git
- Docker & Docker Compose (für produktionsnahe Setups stark empfohlen)
Optional, aber nützlich:
- Domain + Reverse-Proxy (Caddy, Nginx, Traefik) für HTTPS
- SMTP für Magic-Link-Login (und Einladungs-E-Mails)
- Google- und/oder Microsoft-Entra-ID-OAuth-Apps für Mitarbeiter-Login
- LLM-API-Key (OpenAI, Anthropic, xAI usw.)
Schnellstart (empfohlen – Docker Compose)
- Klonen und Verzeichnis öffnen:
git clone https://github.com/felixkrusch/entrytwo.git
cd entrytwo/entrytwo_v1
- Beispiel-Umgebung kopieren:
cp .env.example .env
.envbearbeiten und mindestens setzen:
DATABASE_URL(oder Compose-Defaults nutzen)POSTGRES_PASSWORD(von Compose benötigt)AUTH_SECRET– erzeugen mit:openssl rand -base64 48(≥ 32 Zeichen)ENCRYPTION_KEY– erzeugen mit:openssl rand -hex 32(64 Hex-Zeichen; Bank-Feeds / Secrets)JOB_RUNNER_SECRET– erzeugen mit:openssl rand -base64 48UPDATER_TOKEN– erzeugen mit:openssl rand -base64 48(für den Updater-Sidecar)- Mindestens einen LLM-Key, wenn du KI/Chat willst (
OPENAI_API_KEY,ANTHROPIC_API_KEYusw.) NEXT_LLM_PROVIDERundNEXT_LLM_MODEL(Defaults reichen meist für die Entwicklung)
- Stack starten:
docker compose up -d
Das startet:
app(Next.js auf Port 3000)db(PostgreSQL)worker(Hintergrundjobs)updater(isolierter Sidecar für signierte Updates – siehe Self-Hosted Updates)redis
- Migrationen und Seed:
docker compose exec app npx prisma migrate deploy
docker compose exec app npm run db:seed
(Lokale Entwicklung ohne Docker kann npx prisma migrate dev statt deploy nutzen.)
- http://localhost:3000 öffnen
Beim ersten Besuch ohne Admin-Benutzer kannst du das initiale ADMIN-Konto anlegen.
Umgebungsvariablen (die wichtigsten)
.env.example kopieren und ausfüllen:
Erforderlich (lokal oder Produktion)
DATABASE_URLAUTH_SECRET(≥ 32 Zeichen)POSTGRES_PASSWORD(bei Compose)
In Produktion erforderlich (App startet nicht sauber / Health bleibt degraded ohne diese)
ENCRYPTION_KEY(64 Hex-Zeichen)JOB_RUNNER_SECRETAUTH_URL(öffentliche Origin, z. B.https://books.example.com)AUTH_TRUST_HOST=true(hinter nginx/caddy/traefik)- Mindestens eine echte Anmeldemethode:
- SMTP:
SMTP_HOST,SMTP_USER,SMTP_PASS(idealerweiseSMTP_FROM), und/oder - Google:
GOOGLE_CLIENT_ID+GOOGLE_CLIENT_SECRET, und/oder - Microsoft:
MICROSOFT_ENTRA_ID_ID+MICROSOFT_ENTRA_ID_SECRET(+ Issuer)
- SMTP:
Stark empfohlen
UPDATER_TOKEN– Shared Secret für den Updater-Sidecar- LLM-Key +
NEXT_LLM_PROVIDER/NEXT_LLM_MODEL
Für Produktion / Updates
UPDATE_MANIFEST_URL– zeigt auf dein signiertes Release-Manifest- Cosign-Einstellungen (
COSIGN_IDENTITY,COSIGN_PUBLIC_KEYusw.) STRIPE_WEBHOOK_SECRET/ PayPal-Secrets (bei Processor-Feeds)
Vollständige Liste in der App-.env.example. Auth-Go-Live: App-Repo docs/VPS-Auth-Install.md.
Manuelles Postgres (ohne Docker)
- Datenbank anlegen:
CREATE DATABASE entrytwo;
CREATE USER entrytwo WITH PASSWORD 'entrytwo_dev_password';
GRANT ALL PRIVILEGES ON DATABASE entrytwo TO entrytwo;
- In
.envsetzen:
DATABASE_URL="postgresql://entrytwo:entrytwo_dev_password@localhost:5432/entrytwo"
- Deps installieren, migrieren, seeden:
npm install
npx prisma migrate dev
npm run db:seed
npm run dev
Erster Admin (Bootstrap)
entrytwo ist so gebaut, dass der allererste Benutzer einer frischen Installation ADMIN wird.
- Existiert kein
ADMIN, erlaubt der Anmelde-/Onboarding-Flow die Erstellung (Firma, Sprache, Standard-Kontenplan). - Danach kommen weitere Benutzer nur per Einladung (Admin → Benutzer). Anmeldung mit genau der eingeladenen E-Mail über Google, Microsoft oder Magic Link.
- Rollen:
ADMIN,ACCOUNTANToderVIEWER. - In Produktion muss ADMIN TOTP (2FA) einrichten, bevor die App nutzbar ist.
Siehe Erste Schritte.
Authentifizierung (Kurzüberblick)
| Umgebung | Anmeldung |
|---|---|
| Lokale Entwicklung | Sofort-E-Mail („Weiter“) – kein SMTP nötig |
| Produktion | Magic Link (SMTP) und/oder Google-OAuth und/oder Microsoft Entra ID |
Sofort-E-Mail ist bei NODE_ENV=production deaktiviert. OAuth-Redirect-URIs: {AUTH_URL}/api/auth/callback/google und .../microsoft-entra-id.
Health und grundlegende Prüfung
- App-Health:
GET /api/health - Produktion sollte
"ready": trueundauth.productionReady: truemelden - Nach
docker compose up -dhat der App-Container einen Healthcheck auf diesem Endpoint
Produktion / VPS (kurz)
Vor dem ersten produktiven Start:
- Secrets —
AUTH_SECRET,ENCRYPTION_KEY,JOB_RUNNER_SECRET,POSTGRES_PASSWORD(pro Installation neu). - Anmeldung — volles SMTP (
SMTP_HOST+USER+PASS) und/oder Google/Microsoft-OAuth. Sofort-E-Mail ist in Produktion aus. - Öffentliche URL —
AUTH_URL=https://deine.domain,AUTH_TRUST_HOST=true. - DNS — A-Record auf die VPS-IP bevor HTTPS erwartet wird. Nach spät gesetztem DNS Reverse-Proxy neu starten (z. B. Caddy).
- Deploy —
docker compose up -d --build(Entrypoint führt Migrationen aus)./api/health→ready: true. - Erster Admin — Bootstrap, danach TOTP für ADMIN.
RAM: ≥ 2 GB für einen Stack; ~4 GB, wenn mehrere Installationen auf einem Host laufen.
Details: App-Repo docs/PRODUCTION.md und docs/VPS-Auth-Install.md.
Typische nächste Schritte
- Erste Schritte lesen
- Mindestens einen LLM-Key setzen und den Chat testen
- SMTP und/oder OAuth konfigurieren, damit Teammitglieder sich anmelden können
- (Produktion) HTTPS, starke Secrets und die VPS-Auth-Checkliste im App-Repo
- (Später) Bank-Feeds, Updates und Lizenzierung
Siehe auch: