Skip to content

Self-host Wallabag

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A self-hosted read-it-later app — saves a clean, readable copy of any article for offline reading, with apps and browser extensions. Your own Pocket.

Key facts

CategoryRead-it-later
LicenseMIT
StackPHP, Symfony
Min RAM512 MB
Official imageyes
Measured idle RAM58 MB
Difficulty
Our recommendation

Pick Wallabag when you want the article itself saved — a readable copy for offline reading with Android/iOS apps and browser extensions — rather than a link list, and you are the kind of person who reads the env-var table before `docker run`. It is MIT-licensed PHP/Symfony; the official image defaults to SQLite (`pdo_sqlite`) under `/var/www/wallabag/data` and can be pointed at MariaDB or PostgreSQL by environment variables. Release cadence is slow (the latest tag as of September 2026 is 2.6.14, from October 2025), which is fine for a read-later tool. If you only need bookmarks and tags, linkding is a smaller install.

What you need

  • Any VPS with at least 512 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Wallabag — official image README, SQLite with persistent storage (data + article images)
# SYMFONY__ENV__DOMAIN_NAME must be the URL you will open Wallabag on
docker run -d --name wallabag \
  -v /opt/wallabag/data:/var/www/wallabag/data \
  -v /opt/wallabag/images:/var/www/wallabag/web/assets/images \
  -p 80:80 -e "SYMFONY__ENV__DOMAIN_NAME=http://SERVER_IP" \
  wallabag/wallabag
# open http://SERVER_IP  (default login wallabag:wallabag — change it)

What you take on

Wallabag's Docker image works out of the box, and that is precisely the problem — its defaults are public:

non-negotiableSYMFONY__ENV__DOMAIN_NAME "defaults to https://your-wallabag-instance.wallabag.org" and must be set to the URL you will actually use (http://SERVER_IP:8080 for our snippet), or generated links point at the placeholder host. Our snippet's comment says to set it but the command does not — add -e SYMFONY__ENV__DOMAIN_NAME=....
non-negotiableThe default login is wallabag:wallabag, and SYMFONY__ENV__SECRET defaults to a value printed in the README (ovmpmAWXRCabNlMgzlzFXDYmCFfzGv). Change the password on first login and pass your own secret; public sign-up is off (SYMFONY__ENV__FOSUSER_REGISTRATION=false) unless you enable it.
non-negotiableSQLite lives in /var/www/wallabag/data, but saved article images go to /var/www/wallabag/web/assets/images. Our snippet mounts only the first, so images vanish whenever the container is recreated — mount both volumes as the README does.
non-negotiableA version upgrade may need a database migration, which the image does not run for you: use docker run ... wallabag/wallabag migrate or docker exec <container> /var/www/wallabag/bin/console doctrine:migrations:migrate --env=prod. The upgrade guide says to back up the database and configuration first, and our snippet pulls the untagged image, so pins are your job.
non-negotiablePHP's memory_limit in the image is 128M (PHP_MEMORY_LIMIT). The 512 MB floor is our estimate; wallabag's requirements page lists PHP >= 7.4 and its extensions but no hardware figure.

An alternative to

More self-hosted tools

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.