Bookmarkverwaltung mit Wallabag
Immer wieder stolpere ich über interessante Webseiten, habe aber in dem Moment nicht immer die Zeit, mich intersiver damit zu befassen. Lange Zeit habe ich mir dann einfach einen Bookmark im Browser gesetzt und ihn dann meist nie wieder aufgerufen. Zum einen weil die Bookmarks zwischen verschiedenen Geräten nicht synchronisiert wurden, zum andren weil ich oft gar nicht mehr wusste, was ich da eigentlich gebookmarked hatte.
Für das Sync-Problem gibt es mittlerweile natürlich jede Menge Tools und Services. Aber keiner davon hat mir bisher so wirklich gut gefallen. Entweder waren es Datenkraken und/oder total überladene Produkte.
Irgendwann bin ich dann über Wallabag1 gestolpert.
Es ist jetzt nicht so, dass Wallabag eine eierlegende Wollmilchsau wäre und viele Dinge finde ich mehr als unnötig umständlich umgesetzt. Aber - und das ist das Wichtige - ich nutze es und es ist nicht einfach nur ein Linkgrab. Besonders mag ich die Möglichkeit bestimmte Einträge als Favoriten zu markieren. Diese werden dann auch automatisch als RSS-Feed exportiert. Diesen nutze ich an verschieden Stellen, z.B. hier im Blog (unten Links im Kasten Bookmarks
).
Wallabag kann man als Service mieten2 oder selbst hosten. Die Einträge können einfach mit einem Browserplugin z.B. Wallabagger erzeugt werden, alternativ steht hierfür die Weboberfläche zur Verfügung. Links können mit Schlagwörtern und/oder Beschreibungen versehen werden. Wallabag speichert nicht nur den Link zur Webseite, sondern versucht auch eine möglichst vollständige Kopie der Seite zu erzeugen. So bleiben die Inhalte auch dann verfügbar, wenn die verlinkte Seite einmal nicht mehr existieren sollte.
Die Installation/Inbetriebnahme mittels Docker ist schnell und einfach erledigt:
version: '3'
services:
wallabag:
image: wallabag/wallabag
environment:
- MYSQL_ROOT_PASSWORD=wallaroot
- SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql
- SYMFONY__ENV__DATABASE_HOST=db
- SYMFONY__ENV__DATABASE_PORT=3306
- SYMFONY__ENV__DATABASE_NAME=wallabag
- SYMFONY__ENV__DATABASE_USER=wallabag
- SYMFONY__ENV__DATABASE_PASSWORD=changeme
- SYMFONY__ENV__DATABASE_CHARSET=utf8mb4
- SYMFONY__ENV__DATABASE_TABLE_PREFIX="wallabag_"
- SYMFONY__ENV__MAILER_HOST=172.17.0.1
- SYMFONY__ENV__MAILER_USER=~
- SYMFONY__ENV__MAILER_PASSWORD=~
- SYMFONY__ENV__FROM_EMAIL=wallabag@example.org
- SYMFONY__ENV__DOMAIN_NAME=https://wallabag.example.org
- SYMFONY__ENV__SERVER_NAME="wallabag"
- SYMFONY__ENV__FOSUSER_REGISTRATION=false
ports:
- "8000:80"
volumes:
- /docker/wallabag/images:/var/www/wallabag/web/assets/images
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost"]
interval: 1m
timeout: 3s
depends_on:
- db
- redis
db:
image: mariadb:lts
environment:
- MYSQL_ROOT_PASSWORD=changeme
volumes:
- /docker/wallabag/db:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 20s
timeout: 3s
redis:
image: redis:alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 3s
Die Werte für MYSQL_ROOT_PASSWORD
, SYMFONY__ENV__DATABASE_PASSWORD
, SYMFONY__ENV__DOMAIN_NAME
, SYMFONY__ENV__FROM_EMAIL
, sowie Volume-Pfade und Port sind natürlich entsprechend anzupassen.
Beim ersten docker-compose up
wird die Datenbank erzeugt. Es dauert einen Moment, bis die Seite erreichbar ist und es werden währenddessen auch ein paar Fehlermeldungen angezeigt. Insbesondere [Warning] Access denied for user 'root'@'localhost' (using password: NO)
irritiert dabei sehr. Die Meldung bleibt auch beim späteren Betrieb erhalten, ich habe aber bisher keine negativen Auswirkungen feststellen können.
Wichtig ist es, nach dem ersten Start das Kennwort des Default-Users wallabag
zu ändern.
Die entsprechende nginx-Konfiguration sieht wie folgt aus:
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443;
server_name wallabag.example.org;
ssl_certificate /var/lib/dehydrated/certs/wallabag.example.org/fullchain.pem;
ssl_certificate_key /var/lib/dehydrated/certs/wallabag.example.org/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_dhparam /etc/ssl/dhparams.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
gzip off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_trusted_certificate /var/lib/dehydrated/certs/wallabag.example.org/fullchain.pem;
ssl_stapling on;
ssl_stapling_verify on;
resolver 127.0.0.1;
# for letsencrypt
location /.well-known/acme-challenge/ {
root /var/www/html/;
try_files $uri $uri/ =404;
}
location ^~ /register {
deny all;
return 403;
}
location / {
proxy_pass http://localhost:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Der Abschnitt
location ^~ /register {
deny all;
return 403;
}
dient nur zur Sicherheit, da SYMFONY__ENV__FOSUSER_REGISTRATION
bereits auf false
gesetzt ist, ist er eigentlich unnötig.