Wallabag is a self-hosted webapp which allows you to save URLs to "read later", similar to Instapaper or Pocket. Like Instapaper (but not Pocket, sadly), Wallabag allows you to annotate any pages you grab for your own reference.
All saved data (pages, annotations, images, tags, etc) are stored on your own server, and can be shared/exported in a variety of formats, including ePub and PDF.
There are plugins for Chrome and Firefox, as well as apps for iOS, Android, etc. Wallabag will also integrate nicely with my favorite RSS reader, Miniflux (for which there is an existing recipe).
DNS entry for the hostname you intend to use (or a wildcard), pointed to your keepalived IP
Related:
Traefik Forward Auth or Authelia to secure your Traefik-exposed services with an additional layer of authentication
Preparation
Setup data locations
We need a filesystem location to store images that Wallabag downloads from the original sources, to re-display when you read your articles, as well as nightly database dumps (which you should backup), so create something like this:
Create /var/data/config/wallabag/wallabag.env, and populate with the following variables. The only variable you have to change is SYMFONY__ENV__DOMAIN_NAME - this must be the URL that your Wallabag instance will be available at (else you'll have no CSS)
# For the DB containerPOSTGRES_PASSWORD=wallabagPOSTGRES_USER=wallabag# For the wallabag containerSYMFONY__ENV__DATABASE_DRIVER=pdo_pgsqlSYMFONY__ENV__DATABASE_HOST=dbSYMFONY__ENV__DATABASE_PORT=5432SYMFONY__ENV__DATABASE_NAME=wallabagSYMFONY__ENV__DATABASE_USER=wallabagSYMFONY__ENV__DATABASE_PASSWORD=wallabagSYMFONY__ENV__DOMAIN_NAME=https://wallabag.example.comSYMFONY__ENV__DATABASE_DRIVER_CLASS=Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriverSYMFONY__ENV__MAILER_HOST=127.0.0.1SYMFONY__ENV__MAILER_USER=~SYMFONY__ENV__MAILER_PASSWORD=~SYMFONY__ENV__FROM_EMAIL=wallabag@example.comSYMFONY__ENV__FOSUSER_REGISTRATION=false
Now create wallabag-/var/data/config/wallabag/backup.env with the following contents. (This is necessary to prevent environment variables required for backup from breaking the DB container)
# For database backupsPGUSER=wallabagPGPASSWORD=wallabagPGHOST=dbBACKUP_NUM_KEEP=7BACKUP_FREQUENCY=1d
Wallabag Docker Swarm config
Create a docker swarm config file in docker-compose syntax (v3), something like the example below:
Fast-track with premix! 🚀
"Premix" is a git repository which includes necessary docker-compose and env files for all published recipes. This means that you can launch any recipe with just a git pull and a docker stack deploy 👍.
🚀 Update: Premix now includes an ansible playbook, enabling you to deploy an entire stack + recipes, with a single ansible command! (more here)
Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See my list here.
Serving
Launch Wallabag stack
Launch the Wallabag stack by running docker stack deploy wallabag -c <path -to-docker-compose.yml>
Log into your new instance at https://YOUR-FQDN, with user "wallabag" and default password "wallabag".
Enable asynchronous imports
You'll have noticed redis, plus the pocket/instapaper-importing containers included in the .yml above. Redis is there to allow asynchronous imports, and pocket and instapaper are there since they're likely the most popular platform you'd want to import from. Other possibilities (you'll need to adjust the .yml) are readability, firefox, chrome, and wallabag_v1 and wallabag_v2.
Even with all these elements in place, you still need to enable Redis under Internal Settings -> Import, via the admin user in the webUI. Here's a screenshot to help you find it:
Chef's notes 📓
If you wanted to expose the Wekan UI directly, you could remove the traefik-forward-auth from the design. I found the iOS app to be unreliable and clunky, so elected to leave my traefik-forward-auth enabled, and to simply use the webUI on my mobile devices instead. YMMMV. ↩
I've not tested the email integration, but you'd need an SMTP server listening on port 25 (since we can't change the port) to use it ↩
Tip your waiter (sponsor) 👏
Did you receive excellent service? Want to compliment the chef? (..and support development of current and future recipes!) Sponsor me on Github / Ko-Fi / Patreon, or see the contribute page for more (free or paid) ways to say thank you! 👏
Employ your chef (engage) 🤝
Is this too much of a geeky PITA? Do you just want results, stat? I do this for a living - I'm a full-time Kubernetes contractor, providing consulting and engineering expertise to businesses needing short-term, short-notice support in the cloud-native space, including AWS/Azure/GKE, Kubernetes, CI/CD and automation.
Want to know now when this recipe gets updated, or when future recipes are added? Subscribe to the RSS feed, or leave your email address below, and we'll keep you updated.