Det här sätter du upp
Linkwarden sparar dina bokmärken och behåller en egen kopia av varje sida: en skärmdump, en PDF, en läsvänlig textversion och en kopia av själva sidan i en enda fil. När en sida ändras eller försvinner finns din kopia kvar. Du sorterar länkar i samlingar, taggar dem, delar samlingar med andra och söker i texten på varje sida du har sparat.
Här körs den som en pod under en egen användare som heter linkwarden, bakom Caddy från Podman-guiden: Linkwarden själv, PostgreSQL för dess data och Meilisearch för dess sökning.
Varje steg nedan har körts på en server hos Melonslab med Debian 13:
- Linkwarden 2.16.3 sparade en sida och gjorde inom en minut alla fyra kopiorna av den.
- En sökning efter ett ord som bara fanns i sidans text hittade den.
- När registreringen hade stängts gick det inte att skapa ett nytt konto.
- Allt startade igen av sig självt efter en omstart av servern.
Podden använde omkring 500 MB minne, och en kort stund mer varje gång den sparade en sida, eftersom den öppnar sidan i en webbläsare.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång;
- en A-post och en AAAA-post för
links.example.comsom pekar på din server.
Byt genomgående ut links.example.com mot ditt eget namn.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash linkwarden
loginctl enable-linger linkwarden
machinectl shell linkwarden@
Allt fram till steg 4 körs som linkwarden.
2. Skapa hemligheterna
pw=$(openssl rand -hex 24)
printf %s "$pw" | podman secret create linkwarden-db-password -
printf 'postgresql://postgres:%s@127.0.0.1:5432/postgres' "$pw" | podman secret create linkwarden-database-url -
unset pw
openssl rand -hex 32 | tr -d '\n' | podman secret create linkwarden-nextauth-secret -
openssl rand -hex 32 | tr -d '\n' | podman secret create linkwarden-meili-key -
De två första innehåller databaslösenordet, en gång för PostgreSQL och en gång i adressen Linkwarden ansluter till. Den tredje signerar Linkwardens inloggningar, och den fjärde skyddar Meilisearch.
3. Definiera podden
mkdir -p ~/.config/containers/systemd
cd ~/.config/containers/systemd
Skapa linkwarden.pod:
[Pod]
PodName=linkwarden
# Only Caddy, on this server, can reach Linkwarden: the port is not open to the internet.
PublishPort=127.0.0.1:8096:3000
[Install]
WantedBy=default.target
Skapa linkwarden-db.container:
[Container]
ContainerName=linkwarden-db
Image=docker.io/library/postgres:16-alpine
Pod=linkwarden.pod
Volume=linkwarden-db:/var/lib/postgresql/data
Secret=linkwarden-db-password,type=env,target=POSTGRES_PASSWORD
AutoUpdate=registry
[Service]
Restart=always
Skapa linkwarden-search.container:
[Container]
ContainerName=linkwarden-search
Image=docker.io/getmeili/meilisearch:v1.13.3
Pod=linkwarden.pod
Volume=linkwarden-search:/meili_data
Environment=MEILI_ENV=production MEILI_NO_ANALYTICS=true
Secret=linkwarden-meili-key,type=env,target=MEILI_MASTER_KEY
[Service]
Restart=always
Och linkwarden-app.container:
[Unit]
After=linkwarden-db.service linkwarden-search.service
[Container]
ContainerName=linkwarden-app
Image=ghcr.io/linkwarden/linkwarden:latest
Pod=linkwarden.pod
Volume=linkwarden-data:/data/data
Environment=NEXTAUTH_URL=https://links.example.com/api/v1/auth MEILI_HOST=http://127.0.0.1:7700
Secret=linkwarden-database-url,type=env,target=DATABASE_URL
Secret=linkwarden-nextauth-secret,type=env,target=NEXTAUTH_SECRET
Secret=linkwarden-meili-key,type=env,target=MEILI_MASTER_KEY
AutoUpdate=registry
[Service]
Restart=always
De sparade kopiorna av dina sidor hamnar i volymen linkwarden-data. Meilisearch ligger kvar på den version som Linkwardens egen installation använder, eftersom en ny version av Meilisearch kräver att dess data migreras, medan Linkwarden och PostgreSQL uppdateras när nya versioner släpps. Linkwarden uppdaterar sin databas själv när den startar.
Starta den:
systemctl --user daemon-reload
systemctl --user start linkwarden-pod
systemctl --user enable --now podman-auto-update.timer
Vid första starten laddas avbilderna ner. De upptar omkring 2,2 GB på disken, och det tar ett par minuter.
4. Sätt Caddy framför
Gå tillbaka till root med exit, byt till Caddys användare med machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile:
links.example.com {
reverse_proxy 127.0.0.1:8096
}
Starta om Caddy med systemctl --user restart caddy.
5. Skapa ditt konto och stäng registreringen
Öppna https://links.example.com/register och skapa ditt konto med Display Name, Username och Password. Logga sedan in. Skapa på samma sätt konton åt alla andra som ska använda den.
Vem som helst som hittar adressen kan registrera sig tills du stänger registreringen. Som linkwarden lägger du till den här raden i linkwarden-app.container, under raden Environment=NEXTAUTH_URL:
Environment=NEXT_PUBLIC_DISABLE_REGISTRATION=true
Starta sedan om Linkwarden:
systemctl --user daemon-reload
systemctl --user restart linkwarden-app
Den som försöker registrera sig efter det får svaret Registration is disabled.
6. Spara länkar
Välj New Link, klistra in en adress och välj en samling och taggar om du vill. Inom en minut visar länken sin förhandsbild, och i dess meny finns skärmdumpen, PDF:en, den läsvänliga versionen och kopian av sidan. Sökningen högst upp letar i namn, adresser, taggar och texten på varje sparad sida.
Linkwarden har också tillägg för webbläsare och mobilappar, som loggar in med serverns adress, https://links.example.com, och ditt konto.
7. Säkerhetskopiera
Som linkwarden:
mkdir -p ~/backup
podman exec linkwarden-db pg_dump -U postgres postgres > ~/backup/linkwarden-db.sql
systemctl --user stop linkwarden-app linkwarden-search
podman volume export linkwarden-data --output ~/backup/linkwarden-data.tar
podman volume export linkwarden-search --output ~/backup/linkwarden-search.tar
systemctl --user start linkwarden-search linkwarden-app
Det sparar dina konton, länkar och samlingar, de sparade kopiorna av sidorna och sökindexet. Kopiera ~/backup till en annan maskin och förvara den säkert.
Felsökning
Länkarna får aldrig någon förhandsbild eller kopior. Linkwardens worker gör dem och loggar varje länk den arbetar med: podman logs linkwarden-app | grep worker visar vad som hände.
Det går fortfarande att registrera sig efter steg 5. Raden NEXT_PUBLIC_DISABLE_REGISTRATION saknas, eller så startades Linkwarden inte om efter daemon-reload.