docker.recipes

Wallabag Read-It-Later

intermediate

Wallabag self-hosted read-it-later application for saving articles.

Overview

Wallabag is a self-hosted, open-source read-it-later application that serves as a privacy-focused alternative to commercial services like Pocket or Instapaper. Originally launched in 2013, Wallabag allows users to save articles, web pages, and content for offline reading while providing full control over their reading data. The application features a clean, responsive interface, content extraction capabilities, and cross-platform synchronization without relying on third-party services that monetize user reading habits. This deployment combines Wallabag with PostgreSQL for robust article metadata storage and Redis for high-performance session management and caching. PostgreSQL's full-text search capabilities enable fast article searching across saved content, while its JSONB support efficiently stores extracted article metadata and user annotations. Redis accelerates the application by caching frequently accessed articles, managing user sessions, and handling background job queues for content processing tasks like article extraction and thumbnail generation. This stack is ideal for privacy-conscious individuals, families, and small organizations who want to maintain their own reading archive without dependence on commercial platforms. The combination provides enterprise-grade reliability for personal use, making it perfect for power readers, researchers, journalists, and anyone building a permanent knowledge base from web content.

Key Features

  • Full-text article extraction with readability parsing that strips ads and formatting
  • PostgreSQL-backed tagging system with advanced search across article content and metadata
  • Redis-accelerated content processing queue for batch article imports and exports
  • Multi-format export capabilities including EPUB, PDF, and JSON for article portability
  • Annotation and highlighting system with PostgreSQL storage for permanent note-keeping
  • RSS feed generation for saved articles with Redis caching for performance
  • User management system with PostgreSQL-stored reading statistics and preferences
  • Mobile-responsive interface with Redis session storage for cross-device continuity

Common Use Cases

  • 1Personal reading archive for researchers collecting articles across multiple domains
  • 2Family sharing setup for homeschooling parents organizing educational content
  • 3Small newsroom or blog team collaborating on article research and fact-checking
  • 4Digital minimalist setup replacing multiple commercial read-later service subscriptions
  • 5Academic research environment for literature review and source material organization
  • 6Corporate knowledge management for teams tracking industry news and competitive intelligence
  • 7Self-hosted alternative for users concerned about reading habit privacy and data ownership

Prerequisites

  • Minimum 2GB RAM (1GB for PostgreSQL, 512MB for Redis, 512MB for Wallabag application)
  • Docker and Docker Compose installed with support for multi-container networking
  • Available ports 8080 for web interface access and internal PostgreSQL/Redis communication
  • Basic understanding of environment variables for database credentials and domain configuration
  • Familiarity with PostgreSQL backup procedures for article data protection
  • Knowledge of reverse proxy setup if exposing Wallabag to external network access

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 wallabag:
3 image: wallabag/wallabag:latest
4 container_name: wallabag
5 environment:
6 - SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
7 - SYMFONY__ENV__DATABASE_HOST=postgres
8 - SYMFONY__ENV__DATABASE_PORT=5432
9 - SYMFONY__ENV__DATABASE_NAME=wallabag
10 - SYMFONY__ENV__DATABASE_USER=${POSTGRES_USER}
11 - SYMFONY__ENV__DATABASE_PASSWORD=${POSTGRES_PASSWORD}
12 - SYMFONY__ENV__DOMAIN_NAME=${DOMAIN_NAME}
13 - SYMFONY__ENV__SERVER_NAME="Wallabag"
14 - SYMFONY__ENV__FOSUSER_REGISTRATION=false
15 - SYMFONY__ENV__REDIS_HOST=redis
16 volumes:
17 - wallabag_data:/var/www/wallabag/data
18 - wallabag_images:/var/www/wallabag/web/assets/images
19 ports:
20 - "8080:80"
21 depends_on:
22 - postgres
23 - redis
24 networks:
25 - wallabag-network
26
27 postgres:
28 image: postgres:16-alpine
29 container_name: wallabag-db
30 environment:
31 - POSTGRES_USER=${POSTGRES_USER}
32 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
33 - POSTGRES_DB=wallabag
34 volumes:
35 - postgres_data:/var/lib/postgresql/data
36 networks:
37 - wallabag-network
38
39 redis:
40 image: redis:7-alpine
41 container_name: wallabag-redis
42 networks:
43 - wallabag-network
44
45volumes:
46 wallabag_data:
47 wallabag_images:
48 postgres_data:
49
50networks:
51 wallabag-network:
52 driver: bridge

.env Template

.env
1# Wallabag
2POSTGRES_USER=wallabag
3POSTGRES_PASSWORD=wallabag_password
4DOMAIN_NAME=http://localhost:8080

Usage Notes

  1. 1UI at http://localhost:8080
  2. 2Default login: wallabag / wallabag
  3. 3Browser extensions available
  4. 4Mobile apps for iOS/Android
  5. 5API for integrations

Individual Services(3 services)

Copy individual services to mix and match with your existing compose files.

wallabag
wallabag:
  image: wallabag/wallabag:latest
  container_name: wallabag
  environment:
    - SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
    - SYMFONY__ENV__DATABASE_HOST=postgres
    - SYMFONY__ENV__DATABASE_PORT=5432
    - SYMFONY__ENV__DATABASE_NAME=wallabag
    - SYMFONY__ENV__DATABASE_USER=${POSTGRES_USER}
    - SYMFONY__ENV__DATABASE_PASSWORD=${POSTGRES_PASSWORD}
    - SYMFONY__ENV__DOMAIN_NAME=${DOMAIN_NAME}
    - SYMFONY__ENV__SERVER_NAME="Wallabag"
    - SYMFONY__ENV__FOSUSER_REGISTRATION=false
    - SYMFONY__ENV__REDIS_HOST=redis
  volumes:
    - wallabag_data:/var/www/wallabag/data
    - wallabag_images:/var/www/wallabag/web/assets/images
  ports:
    - "8080:80"
  depends_on:
    - postgres
    - redis
  networks:
    - wallabag-network
postgres
postgres:
  image: postgres:16-alpine
  container_name: wallabag-db
  environment:
    - POSTGRES_USER=${POSTGRES_USER}
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    - POSTGRES_DB=wallabag
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - wallabag-network
redis
redis:
  image: redis:7-alpine
  container_name: wallabag-redis
  networks:
    - wallabag-network

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 wallabag:
5 image: wallabag/wallabag:latest
6 container_name: wallabag
7 environment:
8 - SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
9 - SYMFONY__ENV__DATABASE_HOST=postgres
10 - SYMFONY__ENV__DATABASE_PORT=5432
11 - SYMFONY__ENV__DATABASE_NAME=wallabag
12 - SYMFONY__ENV__DATABASE_USER=${POSTGRES_USER}
13 - SYMFONY__ENV__DATABASE_PASSWORD=${POSTGRES_PASSWORD}
14 - SYMFONY__ENV__DOMAIN_NAME=${DOMAIN_NAME}
15 - SYMFONY__ENV__SERVER_NAME="Wallabag"
16 - SYMFONY__ENV__FOSUSER_REGISTRATION=false
17 - SYMFONY__ENV__REDIS_HOST=redis
18 volumes:
19 - wallabag_data:/var/www/wallabag/data
20 - wallabag_images:/var/www/wallabag/web/assets/images
21 ports:
22 - "8080:80"
23 depends_on:
24 - postgres
25 - redis
26 networks:
27 - wallabag-network
28
29 postgres:
30 image: postgres:16-alpine
31 container_name: wallabag-db
32 environment:
33 - POSTGRES_USER=${POSTGRES_USER}
34 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
35 - POSTGRES_DB=wallabag
36 volumes:
37 - postgres_data:/var/lib/postgresql/data
38 networks:
39 - wallabag-network
40
41 redis:
42 image: redis:7-alpine
43 container_name: wallabag-redis
44 networks:
45 - wallabag-network
46
47volumes:
48 wallabag_data:
49 wallabag_images:
50 postgres_data:
51
52networks:
53 wallabag-network:
54 driver: bridge
55EOF
56
57# 2. Create the .env file
58cat > .env << 'EOF'
59# Wallabag
60POSTGRES_USER=wallabag
61POSTGRES_PASSWORD=wallabag_password
62DOMAIN_NAME=http://localhost:8080
63EOF
64
65# 3. Start the services
66docker compose up -d
67
68# 4. View logs
69docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/wallabag-readlater/run | bash

Troubleshooting

  • Database connection failed errors: Verify POSTGRES_USER and POSTGRES_PASSWORD match between wallabag and postgres services
  • Articles not saving or extraction failing: Check Redis container health and network connectivity between wallabag and redis services
  • Slow article search performance: Increase PostgreSQL shared_buffers and work_mem settings, ensure full-text search indexes are built
  • Session timeouts or login issues: Restart Redis container and verify Redis host configuration in Wallabag environment variables
  • Import/export operations hanging: Monitor Redis memory usage and increase maxmemory setting if processing large article batches
  • 403 Forbidden on article access: Check DOMAIN_NAME environment variable matches your access URL and Wallabag base_url configuration

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space