Now that Pocket is going away, it is time to host a read-it-later app myself. After looking at a few options, my eyes fell on Wallabag. Its not all that smooth, but it works reasonably well.
I run several services with docker compose for its ease of upgrading, and, more importantly, for the ease with which you can get rid of a service once you no longer need it.
Since it didn't work out of the box, here is how I installed Wallabag with Postgresql, using Docker compose.
Installation
Create the directory /srv/wallabag
. This is where wallabag will store the article images and its database.
Prepare the docker-compose.yaml
file with:
services:
wallabag:
image: wallabag/wallabag
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=***_random_string_1_***
- POSTGRES_USER=postgres
- 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=***_random_string_2_***
- SYMFONY__ENV__DOMAIN_NAME=https://wallabag.domain.com
- SYMFONY__ENV__SERVER_NAME="Wallabag"
- SYMFONY__ENV__LOCALE=en
ports:
- "8000:80"
volumes:
- /srv/wallabag/images:/var/www/wallabag/web/assets/images
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost/api/info"]
interval: 1m
timeout: 3s
depends_on:
- db
- redis
db:
image: postgres:17
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=***_random_string_1_***
- POSTGRES_USER=postgres
volumes:
- /srv/wallabag/data:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- 'pg_isready -U postgres'
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:alpine
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 3s
Replace the two secrets, change your DNS domain, and add more env variables as desired (see wallabag on docker hub for more information). Make sure you read the entire file.
Wallabag's auto initialization code doesn't really support postgresql that well. Howewer, with the following commands you should get it to work:
docker compose pull
docker compose up -d
docker compose exec db psql --user=postgres \
-c "GRANT ALL ON SCHEMA public TO wallabag; \
ALTER DATABASE wallabag OWNER TO wallabag;"
sleep 30
docker compose exec --no-TTY wallabag \
/var/www/wallabag/bin/console doctrine:migrations:migrate \
--env=prod --no-interaction
docker compose restart
What did we get?
You should now have a running Wallabag on port 8000
. Go configure Caddy, Ngix, or whatever as a proxy with HTTPS termination.
Create a user
What you don't have yet, is a way to login. For this you need to create a user. You can do this with the following command:
docker compose exec -ti wallabag \
/var/www/wallabag/bin/console fos:user:create --env=prod
More commands are documented on Wallabag console commands. Do not forget the mandatory --env=prod
argument.
start.sh
To make upgrades a bit easier, you can use the following script:
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
docker compose pull
docker compose up -d
sleep 2
docker compose exec --no-TTY wallabag /var/www/wallabag/bin/console doctrine:migrations:migrate --env=prod --no-interaction
docker image prune
Future stuff
Once I have figured out how, I will update this article with:
- Backup
- Fail2ban integration
No comments:
Post a Comment