Migrating from Omnivore to Wallabag
Self-hosted setup using docker-compose and importing of articles from Omnivore
The read-it-later app which I had been using, Omnivore, recently announced that it was being acquired by EvenLabs and would shut down on 30 November 2024.1
Although Omnivore is technically open source (which was one of the reasons I selected it), the project is not mature. It does not actually support self-hosted installations at the moment and the mobile apps will in any case need to be republished with a developer account.
I figured that this was a good lesson and an opportune time to migrate to a well-established, open source, self-hostable read-it-later service, Wallabag. This was in fact one of the options recommended by the Omnivore team and appears to be a fairly common choice amongst many former Omnivore users.
Wallabag very helpfully includes support for importing articles from Omnivore.
Export from Omnivore
First, you have to export your data from Omnivore, which you can do by navigating to https://omnivore.app/settings/account and clicking the "Export Data" button:
You should do this before 30 November 2024 because Omnivore may not be accessible after that date.
Wallabag setup
Next, if you have not already done so, you should set up your Wallabag installation (or using the hosted Wallabag server).
The process is quite similar to other self-hosted apps. I used docker-compose
and my docker-compose
file looks something like this:
services:
app:
image: wallabag/wallabag
env_file: .env
ports:
- 80:80
volumes:
- ./data:/var/www/wallabag/data
- ./config:/var/www/wallabag/config
- ./images:/var/www/wallabag/web/assets/images
depends_on:
- wallabag-db
- wallabag-redis
db:
image: postgres:17-alpine
env_file: .env
volumes:
- ./postgresql_data:/var/lib/postgresql/data
redis:
image: redis:alpine
The .env
file looks like this:
SYMFONY__ENV__DOMAIN_NAME=https://your-url.com
SYMFONY__ENV__SECRET=supersecure
SYMFONY__ENV__SERVER_NAME="Your Wallabag Server"
TZ=Asia/Singapore
PUID=[INSERT]
PGID=[INSERT]
SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
SYMFONY__ENV__DATABASE_HOST=db
SYMFONY__ENV__DATABASE_PORT=5432
SYMFONY__ENV__DATABASE_NAME=wallabag
SYMFONY__ENV__DATABASE_USER=wallabag
SYMFONY__ENV__DATABASE_PASSWORD=wallabager
POSTGRES_USER=wallabag
POSTGRES_PASSWORD=wallabager
POPULATE_DATABASE=true
SYMFONY__ENV__FOSUSER_REGISTRATION=false
SYMFONY__ENV__REDIS_HOST=redis
You will obviously need to fill in the placeholders and replace the dummy values as appropriate.
One issue I ran into was that the initial database migrations do not appear to run automatically when the docker containers are created, resulting in errors to the effect that database tables are not found or do not exist:
no such table: wallabag_internal_setting
Table 'wallabag_db.wallabag_craue_config_setting' doesn't exist
An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1 no such table: wallabag_internal_setting
This seems to be a known issue. A pull request which should fix this is pending, but in the meantime this can easily be resolved by running the migrations manually. docker exec
into the app container and run the following:
bin/console doctrine:migrations:migrate --env=prod --no-interaction
Separately, the default credentials for the initial user created by the setup process don't appear to be documented in the Wallabag documentation site. The default credentials are set out in the README for the docker image but just to save you the trouble of looking it up:
Username: wallabag
Password: wallabag
Importing Omnivore articles into Wallabag
After you have successfully logged into Wallabag, you will find that on the import page, there is an option to upload and import your Omnivore JSON export files:
Keen-eyed readers will however, have noticed, that the importer purports to require the JSON export files to be uploaded "one by one". For me, this was a highly unsatisfactory state of affairs because I had more than 1,000 articles to import, and each JSON file contained about 20 articles.
Fortunately, it seems that the constraint is with the number of files that can be uploaded at once and not the number of items imported.
I aggregated all my JSON exports into a single file with the handy jq
CLI utility:
cd ~/omnivore_export_directory
jq -s '[.[][]]' *.json > omnivore.json
After uploading this to Wallabag, Wallabag appeared to freeze for several minutes whilst processing the files, but the import ultimately succeeded and I am now a satisfied Wallabag user.