Ein Container, ein Ordner
nexcrate bringt seine Datenbank mit und braucht nichts daneben. Was du vorher entscheiden solltest, ist, wo die Daten liegen und wie nexcrate deine Medien sieht. Beides steht hier.
Starten
Du brauchst Docker mit Compose. Die Compose-Datei aus dem Repository zieht das fertige Abbild ghcr.io/derkezorm/nexcrate:latest.
mkdir nexcrate && cd nexcrate
curl -fsSL https://raw.githubusercontent.com/DerKezorm/nexcrate/main/docker-compose.yml -o docker-compose.yml
docker compose up -d
Bevor du startest, lohnt ein Blick in die Datei: Die Zeile für deine Medien ist noch auskommentiert, und ohne sie sieht nexcrate keinen einzigen Ordner. Wie du sie setzt, steht unten unter Medien und Hardlinks.
Danach steht nexcrate auf http://dein-host:8390. Der Container heißt nexcrate und startet mit restart: unless-stopped von selbst wieder; das braucht auch das Einspielen einer Sicherung, das mit einem Neustart endet.
Das Konto
Beim ersten Aufruf fragt nexcrate nach einem Benutzernamen und einem Kennwort. Das ist das einzige Konto, das es gibt. Wer Wünsche von anderen annehmen will, stellt Nexview davor.
Wer eine frische Installation zuerst erreicht, bekommt sie. Solange das Konto nicht angelegt ist, kann es jeder anlegen, der die Seite öffnen kann. Leg es direkt nach dem ersten Start an, bevor der Port aus anderen Netzen erreichbar ist. Danach ist der Weg zur Einrichtung für immer zu.
Unter dem Formular steht Aus einer Sicherung starten. Damit beginnt eine neue Installation mit dem Stand einer alten, statt leer.
Die Sprache, in der du das Konto anlegst, ist die Sprache der Oberfläche. Umschalten geht später jederzeit oben rechts.
Das Datenverzeichnis
Alles, was nexcrate selbst gehört, liegt in /data, also in ./data neben der Compose-Datei: die Datenbank, der Schlüssel secret.key, das Protokoll und die Sicherungen unter data/backups/.
/data gehört auf eine lokale Platte, nie auf eine SMB- oder NFS-Freigabe. Die Sperren von SQLite halten über ein Netzdateisystem nicht zuverlässig, und genau so gehen Daten verloren. Auf einer NAS nimm einen Pfad auf einem internen Volume, keine eingehängte Freigabe.
Sichere secret.key zusammen mit der Datenbank. Damit sind die abgelegten Zugangsdaten verschlüsselt, etwa die Schlüssel von Indexern und Download-Programmen. Ohne die Datei müssen sie neu eingetragen werden. Eine Sicherung, die du in nexcrate herunterlädst, enthält beides.
Medien und Hardlinks
nexcrate legt Dateien in Ordner, die es in seinem Container sieht, und du wählst sie aus einer Liste. Einen Pfad tippt niemand ein. Häng den Ordner ein, der deine Downloads und deine Medien enthält, zum Beispiel:
volumes:
- ./data:/data
- /srv/data:/media
/data gehört nexcrate selbst und wird nie als Medienordner angeboten. Nimm für die Medien also einen anderen Pfad im Container, etwa /media.
Hardlinks gehen nur innerhalb eines Mounts. Leg die Downloads deiner Download-Programme und deine Medienordner unter einen Ordner auf dem Host, etwa /srv/data/torrents, /srv/data/usenet und /srv/data/movies, und häng diesen einen Ordner ein. Mit zwei Mounts, selbst von derselben Platte, wird jeder Torrent kopiert und belegt seinen Platz doppelt.
Deine Download-Programme dürfen denselben Ordner unter einem anderen Pfad sehen, etwa /data statt /media. nexcrate bemerkt das beim ersten fertigen Download und fragt einmal nach, wie die Pfade zueinander gehören.
Nach einem neuen Mount braucht der Container einen Neustart, sonst sieht er den Ordner nicht.
Umgebungsvariablen
Alle sind freiwillig. Die Voreinstellungen stehen in .env.example und in der Compose-Datei.
| Variable | Voreinstellung | Wofür |
|---|---|---|
PUID, PGID | 1000 | Wem die Dateien im Datenverzeichnis gehören. Der Container setzt die Rechte selbst. |
NEXCRATE_SECRET_KEY | wird erzeugt | Schlüssel für die abgelegten Zugangsdaten. Leer heißt: nexcrate legt beim ersten Start data/secret.key an. |
NEXCRATE_COOKIE_SECURE | auto | auto folgt dem Schema jeder Anfrage, on für einen Reverse Proxy, der TLS beendet, off nie. |
NEXCRATE_LOG_LEVEL | leer | Legt die Stufe des Protokolls fest: quiet, normal, detailed, trace. Gedacht für den Fall, dass nexcrate gar nicht startet. |
NEXCRATE_URL_BASE | leer | nexcrate unter einem Unterpfad wie /nexcrate betreiben. /api/health antwortet zusätzlich an der Wurzel. |
NEXCRATE_PORT | 8390 | Port im Container. |
NEXCRATE_DATA_DIR | /data | Wo Datenbank, Schlüssel, Protokoll und Sicherungen liegen. Im Container gibt es selten einen Grund, das zu ändern. |
Reverse Proxy
nexcrate spricht innen einfaches HTTP. Hinter einem Proxy, der TLS beendet, setz NEXCRATE_COOKIE_SECURE=on, damit das Anmelde-Cookie nur über HTTPS reist.
Setz on nicht, wenn nexcrate auch über http:// geöffnet wird. Der Browser verwirft ein sicheres Cookie, das über HTTP kommt, und dann bleibt niemand angemeldet.
Unter einem Unterpfad statt einer eigenen Subdomain: NEXCRATE_URL_BASE=/nexcrate, und der Proxy reicht den Pfad unverändert durch.
Aktualisieren
docker compose pull
docker compose up -d
Ändert eine neue Fassung den Aufbau der Datenbank, legt nexcrate vorher selbst eine Sicherung an. Sie steht danach unter Einstellungen › System › Sicherungen als „Vor Änderung“.
Einmal am Tag fragt nexcrate bei GitHub nach der neuesten Veröffentlichung und zeigt sie an. Außer der Anfrage selbst geht dabei nichts hinaus, und abschalten lässt es sich unter Einstellungen › Über nexcrate.
Kennwort vergessen
Es gibt ein Konto und keinen anderen Weg hinein. Wer den Server bedienen kann, setzt ein neues Kennwort:
docker exec -it nexcrate python -m app.cli reset-password
Es fragt zweimal nach dem neuen Kennwort, ohne es anzuzeigen, und beendet jede Sitzung.
Weiter geht es mit der Einrichtung, oder mit dem Umstieg, wenn Radarr, Sonarr oder Lidarr schon laufen.