Linkwarden in Portainer lokal hosten

illustrated using copilot

Linkwarden in Portainer lokal hosten


#selfhosted #deutsch #homelab #open source

Für die Organisation meiner Lesezeichen ist die Umsetzung der in die Browser integrierten Bookmark-Manager wenig zufriedenstellend. Bei der Suche nach einer passenden Lösung bin ich über Linkwarden gestolpert. Es verspricht einfaches zentrales sammeln, lesen und kommentieren von Lesezeichen. Das tool ist open source und kostenlos, wenn man es selbst hostet.

Die docker-compose.yaml aus dem Linkwarden repo auf github muss leicht angepasst werden, da dort die Installation per cli bzw Editor und nicht über die portainer Oberfläche beschrieben wird. Die genannten Environment Variablen können dem Stack beigefügt werden, müssen den Containern aber noch in der docker-compose.yaml übergeben werden.

Die Dokumentation beschreibt die für den start in docker notwendigen Umgebungsvariablen. Tatsächlich sind es bei der Installation im Homelab aber nur die beiden:

NEXTAUTH_SECRET=VERY_SENSITIVE_SECRET
POSTGRES_PASSWORD=CUSTOM_POSTGRES_PASSWORD

Diese Variablen müssen wir den einzelnen Containerumgebungen der compose-datei mitgeben. In Portainer ist dies über die Oberfläche möglich. Unterhalb des Editors für das compose file lässt sich ein Bereich ausklappen, indem man auf “Environment variables” klickt. Dort kann über den Button “Add an environment variable” eine neue Environment Variable angelegt werden.

Hier müssen jeweils name und Wert eingetragen werden. Für “NEXTAUTH_SECRET” und “POSTGRES_PASSWORD” müssen jeweils unterschiedliche sichere Schlüssel hinterlegt werden.

Anschließend müssen die Variablen in der docker-compose.yaml ergänzt werden. Die fertige yaml sieht dann so aus:

services:
postgres:
image: postgres:16-alpine
env_file: .env
restart: always
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
linkwarden:
env_file: .env
environment:
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres
restart: always
# build: . # uncomment to build from source
image: ghcr.io/linkwarden/linkwarden:latest # comment to build from source
ports:
- 3000:3000
volumes:
- ./data:/data/data
depends_on:
- postgres
- meilisearch
meilisearch:
image: getmeili/meilisearch:v1.12.8
restart: always
env_file:
- .env
volumes:
- ./meili_data:/meili_data