Selbst hosten
In ein paar Minuten dein eigenes Board.
nexcanvas läuft als ein einziger Container. Du brauchst einen Rechner mit Docker, etwa einen kleinen Heimserver oder eine NAS, und eine kurze Compose-Datei. Ein Konto bei uns brauchst du nicht, und es gibt auch keins.
Starten in drei Schritten
Das Abbild gibt es für amd64 und arm64, also auch für einen Raspberry Pi oder eine NAS mit ARM-Prozessor.
- Die Compose-Datei anlegen
Leg einen Ordner an, etwa
nexcanvas, und darin diese Datei.docker-compose.ymlservices: nexcanvas: image: ghcr.io/derkezorm/nexcanvas:latest container_name: nexcanvas restart: unless-stopped ports: - "8500:8000" volumes: - ./data:/data environment: PUID: 1000 PGID: 1000 TZ: Europe/Berlin
- StartenShell
docker compose up -d - Das erste Konto anlegen
Öffne
http://dein-server:8500im Browser. nexcanvas führt dich zur Einrichtung und fragt nach dem Einrichtungscode. Den schreibt es bei jedem Start in sein Log, bis es eingerichtet ist. Du findest ihn mitdocker logs nexcanvasin der Zeile „The setup code is …“, oder du gibst mitNEXCANVAS_SETUP_TOKENeinen eigenen vor. So übernimmt niemand dein frisches nexcanvas, nur weil er es zuerst gefunden hat. Wer das erste Konto anlegt, wird Betreiber. Das Passwort braucht mindestens zwölf Zeichen.
Cora sagtLieber aus dem Quelltext bauen? Klon das Repository, schreib build: . statt der Zeile mit image: und starte mit docker compose up -d --build. Die docker-compose.yml im Repository erklärt jede Einstellung.
Hinter einem Reverse Proxy
Sobald du nexcanvas von irgendwo anders als von deinem Schreibtisch aus benutzt, gehört es hinter einen Reverse Proxy mit TLS, zum Beispiel Caddy, Traefik oder nginx.
WebSockets durchlassen
Boards werden live über eine WebSocket-Verbindung bearbeitet, unter /api/boards/<id>/live. Der Proxy muss sie durchlassen, sonst steht oben im Board „Offline“, und Änderungen der anderen kommen nicht an. Caddy und Traefik tun das von sich aus, bei nginx braucht es die üblichen Zeilen für Upgrade und Connection.
nexcanvas vom Proxy erzählen
Mit NEXCANVAS_PUBLIC_URL nennst du die Adresse, unter der andere nexcanvas erreichen, für Einladungslinks, öffentliche Seiten und die Rückkehr von deinem Anmeldedienst. NEXCANVAS_TRUSTED_PROXIES nennt die Adresse oder das Netz des Proxys. Ohne diese Angabe scheint jede Anmeldung vom Proxy zu kommen, und die Bremse gegen das Raten von Passwörtern kann die Leute nicht auseinanderhalten.
nexcanvas im Internet
nexcanvas ist dafür gebaut, von draußen erreichbar zu sein, für dich unterwegs oder für ein kleines Team. Bevor du es öffnest, geh diese Liste durch.
- Erst einrichten, dann freigeben
Leg das erste Konto aus deinem eigenen Netz an, mit dem Code aus dem Log. Erst danach leitest du einen Port weiter.
- TLS am Proxy, nexcanvas nur über ihn
Veröffentliche den Port als
127.0.0.1:8500:8000, wenn der Proxy auf demselben Rechner läuft, oder halte beide in einem Docker-Netz ohne veröffentlichten Port. Lass WebSockets durch und schick HSTS vom Proxy aus. - Proxy und Adresse nennen
NEXCANVAS_PUBLIC_URL,NEXCANVAS_TRUSTED_PROXIESundNEXCANVAS_COOKIE_SECURE: "on". - Ein zweiter Faktor
Richte für dein eigenes Konto unter Mein Konto, Sicherheit einen zweiten Faktor ein, oder melde dich über deinen Anbieter für OpenID Connect an. Auf Wunsch verlangt nexcanvas den zweiten Faktor von allen.
- Zu lassen, was du nicht brauchst
Öffentliche Seiten und API-Token sind ab Werk aus. Schalte sie nur ein, wenn du sie brauchst.
- Betreiber-Einstellungen zu Hause lassen
Mit
NEXCANVAS_OPERATOR_NETWORKS: "192.168.0.0/16"nimmt nexcanvas Änderungen an den Betreiber-Einstellungen nur aus diesem Netz an, hinter einem Proxy zusammen mitNEXCANVAS_TRUSTED_PROXIES. - Sicherungen woanders
Eine Sicherung enthält alles, auch jedes Foto. Kopier ab und zu eine vom Rechner weg, so sorgfältig wie den Datenordner, und probier das Zurückspielen mit „Prüfen“ aus.
- Eine Fassung festhalten
Nimm statt
latesteine feste Fassung wie0.1.0, aktualisiere mit Absicht und sichere vorher.
Konten und Anmeldung
Konten gibt es nur per Einladung. Wer sich lieber über einen Anmeldedienst anmeldet, bekommt das mit OpenID Connect.
authentik in einem Schritt
Unter Einstellungen, Server, Anmeldung trägst du deinen Anbieter für OpenID Connect ein: Issuer, Client-ID und Geheimnis, dazu den Namen für den Knopf auf der Anmeldeseite. Die Weiterleitungsadresse für den Anbieter zeigt nexcanvas dir zum Kopieren an.
Wer authentik benutzt, hat es leichter: Adresse von authentik und ein API-Token eintragen, „Einrichten“ drücken, und nexcanvas legt Provider und Anwendung dort selbst an. Das Token wird nur dafür benutzt und nicht gespeichert. Alternativ lädst du eine Blueprint-Datei herunter und spielst sie in authentik ein.
- Anmeldung mit Passwort abschalten: Dann kommen Mitglieder nur noch über den Anbieter herein. Du als Betreiber kannst dein Passwort immer benutzen.
- Neue Personen: Ab Werk kommen über den Anbieter nur Eingeladene oder schon verknüpfte Konten herein. Auf Wunsch bekommt jede neue Person dort ein Konto.
- Mail für Einladungen: Mit einem Mailserver verschickt nexcanvas Einladungslinks selbst. Ohne genügt der Link zum Kopieren.
Wo alles liegt
Alles liegt in /data: die Datenbank nexcanvas.db mit Konten, Bereichen, Boards und ihren Versionen, der Ordner media/ mit Fotos und Dateien samt kleineren Vorschauen, dazu secret.key, backups/, logs/ und locales/ für eigene Sprachen.
Cora sagtHäng den Datenordner von einer lokalen Platte ein, nie von einer SMB- oder NFS-Freigabe. SQLite sperrt über Netzwerkdateisysteme nicht zuverlässig, und dann geht im schlimmsten Fall etwas kaputt.
Sichern und zurückspielen
Unter Einstellungen, Server, Sicherung legt nexcanvas ab Werk jede Nacht ein Archiv an und behält die letzten sieben. Statt jeder Nacht geht auch jede Woche, und mit „Jetzt sichern“ machst du eine von Hand. Ein Archiv ist eine gewöhnliche ZIP-Datei mit der Datenbank, die nexcanvas im laufenden Betrieb sauber kopiert, mit allen Fotos und Dateien und mit dem Schlüssel.
„Prüfen“ öffnet ein Archiv und sagt, ob es vollständig ist und was ein Zurückspielen hinzufügen und entfernen würde. Beim Zurückspielen sichert nexcanvas zuerst den aktuellen Stand und startet danach neu. Herunterladen, Zurückspielen und Löschen verlangen noch einmal dein Passwort.
Cora sagtWer ein Archiv hat, hat alles. Bewahr heruntergeladene Sicherungen so sorgfältig auf wie den Datenordner selbst, denn verschlüsselt sind sie nicht.
Updaten
docker compose pull
docker compose up -dWas der Datenbank fehlt, ergänzt nexcanvas beim Start selbst, von Hand ist nichts zu tun. Vor einem großen Sprung lohnt sich trotzdem eine Sicherung. Einmal am Tag fragt nexcanvas bei GitHub nach einer neueren Fassung und zeigt sie unter „Über nexcanvas“ an. Nach einem Update erklärt es jedem Konto einmal, was neu ist und wo man es findet.
Alle Umgebungsvariablen
| Variable | Ab Werk | Wofür |
|---|---|---|
NEXCANVAS_DATA_DIR | /data | Datenbank, Fotos und Dateien, Logs, Sicherungen, Sprachen |
NEXCANVAS_MEDIA_DIR | <data>/media | Fotos und Dateien der Boards |
NEXCANVAS_LOCALES_DIR | <data>/locales | Weitere Sprachen, je eine JSON-Datei |
NEXCANVAS_SECRET_KEY | beim ersten Start erzeugt | Schützt Geheimnisse auf dem Server; gesetzt gewinnt er gegen secret.key |
NEXCANVAS_PUBLIC_URL | aus der Anfrage | Die Adresse, unter der andere nexcanvas erreichen; die Einstellung in der Oberfläche gewinnt, wenn sie gesetzt ist |
NEXCANVAS_TRUSTED_PROXIES | keine | Adressen oder Netze von Proxys, deren X-Forwarded-For geglaubt wird |
NEXCANVAS_SETUP_TOKEN | beim Start erzeugt | Der Code für das erste Konto |
NEXCANVAS_OPERATOR_NETWORKS | keine | Netze, aus denen die Betreiber-Einstellungen geändert werden dürfen |
NEXCANVAS_UPLOAD_MAX_MB | 50 | Die größte Datei; der Betreiber kann den Wert in den Einstellungen senken |
NEXCANVAS_SESSION_DAYS | 30 | Nach so vielen Tagen endet eine Sitzung im Browser |
NEXCANVAS_LOG_LEVEL | Einstellung | quiet, normal, detailed oder trace; überstimmt die Einstellung |
NEXCANVAS_COOKIE_SECURE | auto | on, off oder auto |
NEXCANVAS_API_DOCS | false | Zeigt /api/docs und /api/openapi.json |
PUID, PGID | 1000 | Wem die Dateien im Datenordner gehören |