# Installation mit Docker Compose

Der schnellste Weg zu einer laufenden Instanz führt über `docker compose`.

## Repository klonen

```bash
git clone https://github.com/lalabase/lalabase.git
cd lalabase
cp .env.example .env
```

## Stack starten

Passe die `.env` an (siehe [Umgebungsvariablen](https://lalabase.com/docs/de/self-hosting/configuration/environment))
und starte anschließend alle Dienste:

```bash
docker compose up -d
```

Prüfe, dass alle Container laufen:

```bash
docker compose ps
```

<div class="docs-callout docs-callout--info">
  <div class="docs-callout__title">Hinweis</div>
  <p>Die erste Migration kann einige Minuten dauern, da die <code>vector</code>-Extension ihre Indizes aufbaut.</p>
</div>

## Datenbank vorbereiten

Beim ersten Start werden die Migrationen automatisch ausgeführt. Danach lädst du die Seeds:

```bash
docker compose exec web bin/rails db:seed
```

Auf einem Server laden die Seeds nur Stammdaten, nämlich die globalen **Chat-Personas**. Sie
legen keine Konten an und löschen nichts. Beispielkonten gibt es nur in der
Entwicklungsumgebung, nie auf einem Server.

<div class="docs-callout docs-callout--warning">
  <div class="docs-callout__title">Achtung</div>
  <p>Ein erneuter Lauf von <code>db:seed</code> setzt die globalen Chat-Personas auf den Auslieferungszustand zurück. Hast du sie im Adminbereich geändert, lass die Seeds danach weg.</p>
</div>

## Ersten Admin anlegen

Eine frische Instanz hat noch keinen Admin. Den ersten legst du mit diesem Befehl an:

```bash
docker compose exec web bin/rails lalabase:setup
```

Der Befehl fragt im Terminal nach E-Mail-Adresse und Passwort. Ohne Terminal, etwa in einem
Skript, übergibst du beides als Umgebungsvariablen:

```bash
docker compose exec \
  -e LALABASE_ADMIN_EMAIL=admin@example.org \
  -e LALABASE_ADMIN_PASSWORD='ein-langes-passwort' \
  web bin/rails lalabase:setup
```

- Das Passwort braucht mindestens 12 Zeichen.
- Fehlen die Angaben und es gibt kein Terminal, bricht der Befehl mit einer Meldung ab.
- Gibt es schon einen Admin, verweigert der Befehl. Weitere Admins verwaltest du im
  Adminbereich.

Danach meldest du dich unter `/admin` an. Das erste Nutzerkonto legst du über die
Registrierung unter `/users/sign_up` an. Der Befehl legt selbst keine Organisation und kein
Nutzerkonto an.
