Linkwarden Self-Hosted on Proxmox – Installation, Features, Alternatives and Real-World Tips

What is Linkwarden

Linkwarden is a self-hosted, collaborative bookmark manager and read-it-later service. You save web pages, organize them in collections with subfolders and assign tags. The standout feature is per-link archiving. For every saved URL, Linkwarden automatically stores a screenshot, a PDF and a single-file HTML copy. That keeps content readable even if the original page disappears. On top you get a distraction-free reader view, a fast full-text search and browser extensions for Firefox and Chromium-based browsers. Teams can share links, curate together and assign permissions per collection. Power users get API keys, RSS feeds per collection, import and export and an installable PWA for phones.

Optionally Linkwarden can work with local AI. With Ollama you can auto-tag new entries based on the page content. A small model like phi3:mini-4k is often enough. If you do not want to run AI locally you can disable auto-tagging or use an external provider.

If you prefer to start without your own server there is a cloud plan. This article focuses on self-hosting because it gives you full control over data, storage and updates.

My Environment – Proxmox Host and LXC

I run Linkwarden on Proxmox VE 8.4.1 on an HP ProDesk 400 G7 SFF.

  • Host: Intel Core i5-10500, 48 GB RAM
  • LXC container: Ubuntu 22.04, 2 vCPU, 2 GB RAM, 4 GB swap, 96 GB disk
  • Start at boot: yes
  • LXC features: nesting enabled

The setup is intentionally small. Linkwarden is modest in day-to-day use. Most load appears while archiving larger batches and during indexing and search. If your collection grows you can scale RAM and CPU cores later.

Everyday Features That Matter

  • Automatic per-link archiving as screenshot, PDF and single HTML
  • Reader view for comfortable reading including highlights and notes
  • Collections with subfolders, tags, descriptions and pinning on the dashboard
  • Sharing and collaboration with granular permissions
  • Full-text search with filters and operators, optionally powered by Meilisearch
  • Browser extensions for Chrome and Firefox to save with one click
  • PWA, light and dark themes, mobile friendly
  • RSS import for collections, API keys, bulk actions, user administration
  • Import and export of your existing bookmarks

Alternatives to Linkwarden

Different tools focus on different needs. A quick orientation:

  • Raindrop – cloud bookmarking with great UX and strong collection features
  • Instapaper – classic read-it-later with a clean reader, less focused on archival copies
  • Pocket – discontinued, sometimes still visible as a brand
  • Karakeep – modern self-hosted alternative with full text and optional AI
  • linkding – very lean, fast and minimalist
  • Wallabag – read-it-later focus with a strong article view
  • ArchiveBox – large scale web archiving, a great complement for long-term snapshots
  • Readeck – self-hosted read-it-later with e-reader oriented features
  • Hoarder – bookmark-everything with AI tagging
  • Shiori – resource friendly, written in Go and ideal for tiny systems

If you value collaboration, archival copies and a modern UI, Linkwarden is a very balanced choice. For ultra-minimal bookmarking linkding is lovely. For massive long-term archives combine Linkwarden with ArchiveBox.

Install Linkwarden on Proxmox with LXC and Docker – Step by Step

The installation runs cleanly inside an Ubuntu 22.04 LXC using Docker Compose. Here is the process I use to self-host Linkwarden on Proxmox.

1) Create the LXC Container

  • Template: Ubuntu 22.04
  • CPU: 2 cores, RAM: 2 GB, Swap: 4 GB, Disk: 96 GB
  • Network: static IP or DHCP
  • Important: enable nesting in LXC options
  • Optional for Docker in LXC: a privileged container is simpler. Unprivileged works too – keep nesting on and avoid tweaking security profiles unless you must.

proxmox-linkwarden-installation-02

proxmox-linkwarden-installation-02

proxmox-linkwarden-installation-03

proxmox-linkwarden-installation-03

proxmox-linkwarden-installation-04

proxmox-linkwarden-installation-04

proxmox-linkwarden-installation-06

proxmox-linkwarden-installation-06

proxmox-linkwarden-installation-07

proxmox-linkwarden-installation-07

proxmox-linkwarden-installation-10

proxmox-linkwarden-installation-10

proxmox-linkwarden-installation-11

proxmox-linkwarden-installation-11

proxmox-linkwarden-installation-12

proxmox-linkwarden-installation-12

proxmox-linkwarden-installation-14

proxmox-linkwarden-installation-14

proxmox-linkwarden-installation-18

proxmox-linkwarden-installation-18

2) Update the Base System

sudo apt update
sudo apt upgrade -y
sudo apt install -y zip bzip2 gzip unzip htop git wget curl nano

Optional: enable a colored prompt and bash completion in ~/.bashrc for convenience.

3) Install Docker inside LXC

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# add your user to the docker group if you are not using root
# sudo usermod -aG docker $USER
# newgrp docker

Tip: I do not disable AppArmor by default. Only adjust security profiles when they are the proven cause of an issue. In almost all cases nesting is enough for Docker in LXC.

4) Deploy Linkwarden with Docker Compose

Create a working folder and fetch the files:

proxmox-linkwarden-installation-24

proxmox-linkwarden-installation-24

proxmox-linkwarden-installation-25

proxmox-linkwarden-installation-25

proxmox-linkwarden-installation-30

proxmox-linkwarden-installation-30

proxmox-linkwarden-installation-36

proxmox-linkwarden-installation-36

Create a working folder and fetch the files:

mkdir ~/linkwarden && cd ~/linkwarden
curl -O https://raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml
curl -L https://raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o .env

Set the important variables in .env:

# security
NEXTAUTH_SECRET=VERY_STRONG_SECRET
POSTGRES_PASSWORD=STRONG_DB_PASSWORD
MEILI_MASTER_KEY=VERY_STRONG_MEILI_KEY

# base URL when using a reverse proxy
# NEXTAUTH_URL=https://links.yourdomain.tld
# NEXT_PUBLIC_APP_URL=https://links.yourdomain.tld

# close registration after creating your first account
# NEXT_PUBLIC_DISABLE_REGISTRATION=true

# optional local AI tagging
# NEXT_PUBLIC_OLLAMA_ENDPOINT_URL=http://ollama:11434
# OLLAMA_MODEL=phi3:mini-4k

Start the stack:

docker compose up -d

Open the container or reverse proxy URL, register the first user and then disable registration if the instance should remain private.

5) Reverse Proxy and HTTPS

Linkwarden works very well behind Nginx Proxy Manager, Caddy or Traefik. Make sure NEXTAUTH_URL and NEXT_PUBLIC_APP_URL point to the public HTTPS URL exactly. Issue certificates and enable HSTS if you want strict transport security.

6) Backups

Back up two things regularly:

  1. The data directory with archives
  2. The PostgreSQL database

Example cron-friendly database dump:

docker exec -t linkwarden-postgres pg_dump -U postgres postgres \
  | gzip > /backup/linkwarden_$(date +%F).sql.gz

Also back up the volume that stores screenshots, PDFs and HTML. If storage grows fast you can switch the Compose configuration to an S3 compatible backend or object storage, or increase the LXC disk. Alternatively, back up the entire LXC periodically with Proxmox – manual or via cron.

Practical Tips and Troubleshooting

  • Import performance – large bookmark imports need time to generate screenshots and PDFs. Let the container work and avoid restarts during the first pass.
  • Search shows no results – verify that Meilisearch is running and that MEILI_HOST and MEILI_MASTER_KEY are set correctly. Restart the stack so the index gets built.
  • Login issues behind a proxy – usually NEXTAUTH_URL and NEXT_PUBLIC_APP_URL are missing or point to HTTP instead of HTTPS.
  • Growing storage – screenshots and PDFs add up. Define which collections really need full archival and move old archives to object storage.
  • Security – disable open registration when private, use strong passwords, enable 2FA on your reverse proxy, do not reuse your admin account for daily work, encrypt offsite backups.
  • Updates – take a quick backup, then docker compose pull and docker compose up -d. If you change a lot, keep a small personal changelog. The simplest safety net is a fresh Proxmox LXC backup before upgrading.

Pros and Cons of Self-Hosting Linkwarden

Pros

  • Full data ownership and control
  • Built-in archiving protects against link rot
  • Modern UI, strong search, convenient browser extensions
  • Team features and an API for automation
  • Optional AI tagging locally with Ollama or via external services

Cons

  • Storage needs grow with every link due to screenshots and PDFs
  • The stack of Docker, Postgres and Meilisearch needs clean backups
  • First mass imports can be CPU and time intensive
  • Docker in LXC requires nesting and sometimes minor tuning

Glossary

  • Proxmox VE – virtualization platform for running VMs and LXC containers
  • LXC – lightweight Linux containers that share the host kernel
  • Docker – container runtime for packaging and running applications
  • Docker Compose – YAML based tool to define and run multi-container stacks
  • Meilisearch – fast search engine used for Linkwarden’s advanced search
  • Ollama – local LLM runtime that can power AI tagging
  • PWA – progressive web app that installs like a native app
  • RSS – syndication format that lets you subscribe to updates and feeds
  • API key – token used to authenticate scripts or external tools against Linkwarden
  • Reverse proxy – gateway like Nginx Proxy Manager, Caddy or Traefik that terminates HTTPS and forwards traffic to containers
  • HSTS – strict transport security to enforce HTTPS in browsers
  • Object storage – S3 compatible storage for large amounts of files and archives
  • Swap – disk space used as overflow when RAM is full
  • Index – data structure built by Meilisearch for fast full-text search

Durchschnittliche Bewertung 0 / 5. Bewertungen: 0

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top