# [Anleitung] Linkwarden (Selbstgehosteter Bookmark- & Archiv-Manager) via Docker Compose
Hallo zusammen,
wer einen modernen, kollaborativen Lesezeichen-Manager sucht, der Webseiten nicht nur verlinkt, sondern auch als PDF, Screenshot oder lesbaren Text für immer lokal archiviert, sollte sich **Linkwarden** anschauen. Das Tool eignet sich perfekt, um nützliche Webseiten, Skripte oder Dokus plattformübergreifend zu sammeln und zu organisieren, ohne dass Links im Laufe der Zeit durch "Linkfäule" ungültig werden.
Hier ist das fertige Docker Compose Setup für euren eigenen Linkwarden-Server – komplett anonymisiert, sicher und für den produktiven Einsatz im Forum aufbereitet.
### ⚠️ Wichtige Vorbereitung vor dem Kopieren:
Für den reibungslosen Betrieb benötigt Linkwarden zwingend eine eindeutige Verschlüsselungskette bei
NEXTAUTH_SECRET (Generiert hier am besten eine lange, zufällige Zeichenfolge). **Wichtig bei den URLs:** Die Variable
NEXTAUTH_URL verlangt bei manchen Linkwarden-Versionen zwingend das Suffix
/api/v1/auth am Ende, falls der Login im Browser fehlschlägt. In diesem modernen Stack ist sie so konfiguriert, dass sie direkt auf eure Hauptdomain zeigt.
---
### Der Docker Compose Stack
yaml
version: '3.8'
services:
# 1. Das Linkwarden Web-Interface und die Archivierungs-Engine
linkwarden:
image: ghcr.io/linkwarden/linkwarden:latest
restart: always
depends_on:
- linkwarden_db
environment:
# Datenbank-Verbindungsstring (Muss mit dem Passwort unten übereinstimmen)
- DATABASE_URL=postgresql://linkwarden_user<img class='smiley' style='width:20px;height:20px;' src='../../images/smiley/grin.svg' alt='Grinsen'>EIN_SICHERES_DATENBANK_PASSWORT@linkwarden_db:5432/linkwarden_db
# Externe URLs für den produktiven Domain-Betrieb über euren Reverse Proxy
- NEXTAUTH_URL=https://deine-domain.de # <--- EURE SPÄTERE HTTPs-DOMAIN!
- BASE_URL=https://deine-domain.de
# Generiert hier einen langen, zufälligen String für die Absicherung der Sessions!
- NEXTAUTH_SECRET=HIER_EINEN_LANGEN_ZUFÄLLIGEN_STRING_EINTRAGEN
volumes:
- linkwarden_data:/data # Speicherort für Screenshots und PDF-Archive
networks:
backend:
lan_network:
ipv4_address: DEINE_FREIE_CONTAINER_IP # <--- FREIE IP AUS EUREM NETZWERK EINTRAGEN!
# 2. Die Datenbank (PostgreSQL 16)
linkwarden_db:
image: docker.io/library/postgres:16
restart: always
environment:
POSTGRES_DB: linkwarden_db
POSTGRES_USER: linkwarden_user
POSTGRES_PASSWORD: DEIN_SICHERES_DATENBANK_PASSWORT # <--- ANPASSEN!
volumes:
- linkwarden_pg_data:/var/lib/postgresql/data # Datenbank dauerhaft sichern
networks:
- backend
networks:
backend:
driver: bridge
lan_network:
name: NAME_EURES_EXISTIERENDEN_NETZWERKS # <--- NAME EURES EXISTIERENDEN EXTERNEN NETZWERKS!
external: true
volumes:
linkwarden_data:
linkwarden_pg_data:
---
### 🌐 Einrichtung im Nginx Proxy Manager (NPM)
Um Linkwarden verschlüsselt über eine Subdomain (z. B.
linkwarden.deine-domain.de) aufzurufen und auch die offiziellen Browser-Erweiterungen nutzen zu können, legt ihr im NPM einen neuen **Proxy Host** an:
1. **Domain Names:**
linkwarden.deine-domain.de
2. **Scheme:**
http
3. **Forward Hostname / IP:**
DEINE_FREIE_CONTAINER_IP *(Die oben vergebene IP des Linkwarden-Containers)*
4. **Forward Port:**
3000 *(Der interne Standard-Port von Linkwarden)*
5. **Websockets Support:** 🟩 **Häkchen setzen / Aktivieren!**
6. **SSL:** Ein neues Let's Encrypt Zertifikat anfordern und *Force SSL* aktivieren.
---
### 🛠️ Nginx-Erweiterung für große Webseiten-Snapshots (Advanced Settings)
Wenn Linkwarden große Webseiten als PDF oder Screenshot archiviert, werden teilweise größere Datenmengen über den Proxy geschoben. Um Timeouts bei komplexen Seiten zu verhindern, fügt im NPM im Reiter **Advanced** diesen Code hinzu:
nginx
# Maximale Upload-Größe für Archiv-Daten anheben
client_max_body_size 100M;
# Timeouts hochsetzen für die integrierte Screenshot-Engine
proxy_read_timeout 180s;
proxy_send_timeout 180s;