Instalación de Wallabag: Leer Más Tarde Self-Hosted
Wallabag es una aplicación de guardado de artículos para leer más tarde que funciona como alternativa self-hosted a Pocket, Instapaper o Readwise. Con extensiones de navegador, aplicaciones móviles nativas, anotaciones, etiquetas, importación desde otros servicios y soporte para RSS, Wallabag te permite archivar contenido web sin depender de servicios externos. Esta guía cubre la instalación completa de Wallabag en Linux.
Requisitos Previos
- Ubuntu 20.04+, Debian 11+ o CentOS 8+
- PHP 8.1+ con extensiones curl, gd, intl, mbstring, xml, tidy, bcmath, zip
- MySQL/MariaDB o PostgreSQL (recomendado para producción)
- Composer para instalación manual
- Mínimo 512 MB de RAM
- Docker para instalación containerizada
Instalación con Docker
# Crear directorio de instalación
mkdir -p ~/wallabag && cd ~/wallabag
# Crear docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3'
services:
wallabag:
image: wallabag/wallabag:latest
container_name: wallabag
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=contrasena-root
- 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=contrasena-db
- SYMFONY__ENV__DATABASE_CHARSET=utf8mb4
- SYMFONY__ENV__MAILER_HOST=127.0.0.1
- SYMFONY__ENV__MAILER_USER=~
- SYMFONY__ENV__MAILER_PASSWORD=~
- [email protected]
- SYMFONY__ENV__DOMAIN_NAME=https://leer.tu-dominio.com
- SYMFONY__ENV__SERVER_NAME="Wallabag - Mis artículos"
ports:
- 8080:80
volumes:
- ./data:/var/www/wallabag/data
- ./images:/var/www/wallabag/web/assets/images
depends_on:
- db
db:
image: mariadb:10.11
container_name: wallabag-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=contrasena-root
- MYSQL_DATABASE=wallabag
- MYSQL_USER=wallabag
- MYSQL_PASSWORD=contrasena-db
volumes:
- ./mysql:/var/lib/mysql
EOF
# Crear directorios necesarios
mkdir -p ~/wallabag/{data,images,mysql}
# Iniciar los servicios
docker compose up -d
# Esperar a que Wallabag inicialice (puede tardar varios minutos la primera vez)
docker compose logs -f wallabag
Crear el usuario administrador inicial:
# Crear usuario administrador dentro del contenedor
docker exec -it wallabag /var/www/wallabag/bin/console wallabag:install --env=prod
# O crear usuario adicional directamente
docker exec -it wallabag /var/www/wallabag/bin/console fos:user:create \
--env=prod admin [email protected] contrasena-segura
# Promover a superadmin
docker exec -it wallabag /var/www/wallabag/bin/console fos:user:promote \
--env=prod admin --super
Instalación Manual con PHP
# Instalar dependencias del sistema
sudo apt install -y \
php php-fpm php-mysql php-curl php-gd php-intl \
php-mbstring php-xml php-tidy php-bcmath php-zip \
composer nginx git
# Descargar Wallabag
cd /var/www
sudo git clone https://github.com/wallabag/wallabag.git
cd wallabag
# Instalar dependencias de PHP
sudo composer install --no-dev --optimize-autoloader
# Configurar Wallabag
sudo cp app/config/parameters.yml.dist app/config/parameters.yml
sudo nano app/config/parameters.yml
# Parámetros básicos en parameters.yml
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: 3306
database_name: wallabag
database_user: wallabag
database_password: contrasena-db
database_charset: utf8mb4
mailer_transport: smtp
mailer_host: localhost
mailer_user: null
mailer_password: null
locale: es
secret: CLAVE_SECRETA_ALEATORIA
domain_name: https://leer.tu-dominio.com
# Crear la base de datos y las tablas
sudo -u www-data php bin/console wallabag:install --env=prod
# Ajustar permisos
sudo chown -R www-data:www-data /var/www/wallabag/
sudo chmod -R 755 /var/www/wallabag/
sudo chmod -R 777 /var/www/wallabag/var/cache /var/www/wallabag/var/logs
Configuración de la Aplicación
Acceder a http://TU-SERVIDOR:8080 y configurar las opciones principales:
Panel > Configuración > RSS:
- Activar feeds RSS personales
- Configurar el número de artículos por feed
Panel > Configuración > Usuario:
- Idioma: Español
- Zona horaria: Europe/Madrid
- Descargar imágenes: Sí (para lectura offline)
Configurar SMTP para emails:
# Editar el docker-compose.yml con los datos SMTP reales
environment:
- SYMFONY__ENV__MAILER_HOST=smtp.tu-proveedor.com
- SYMFONY__ENV__MAILER_PORT=587
- [email protected]
- SYMFONY__ENV__MAILER_PASSWORD=contrasena-smtp
- SYMFONY__ENV__MAILER_ENCRYPTION=tls
# Reiniciar para aplicar cambios
docker compose down && docker compose up -d
Extensión de Navegador
Instalar la extensión oficial de Wallabag:
- Chrome/Chromium: Wallabagger en Chrome Web Store
- Firefox: Wallabagger en Firefox Add-ons
Configuración de la extensión:
- Clic derecho en la extensión > Opciones
- URL de Wallabag:
https://leer.tu-dominio.com - Usuario y contraseña de Wallabag
- Guardar y probar la conexión
# La extensión usa la API de Wallabag
# Verificar que la API está funcionando
curl -X POST https://leer.tu-dominio.com/oauth/v2/token \
-d "grant_type=password" \
-d "client_id=1_TU_CLIENT_ID" \
-d "client_secret=TU_CLIENT_SECRET" \
-d "username=admin" \
-d "password=contrasena"
# Las credenciales OAuth se crean en:
# Panel > Configuración de API > Crear nuevo cliente
Aplicaciones Móviles
Wallabag tiene aplicaciones oficiales y de terceros:
- Android: Wallabag (oficial), Lire para Android
- iOS: Wallabag (oficial, en App Store)
- Kindle: Exportar artículos en formato EPUB/MOBI
Configuración de la app:
- URL del servidor:
https://leer.tu-dominio.com - Usuario y contraseña
- La app descarga artículos para lectura offline
Etiquetas y Anotaciones
# Crear etiquetas via API
# Primero obtener un token de acceso
ACCESS_TOKEN=$(curl -s -X POST https://leer.tu-dominio.com/oauth/v2/token \
-d "grant_type=password&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&username=admin&password=pass" | \
python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
# Listar entradas guardadas
curl -s "https://leer.tu-dominio.com/api/entries.json" \
-H "Authorization: Bearer $ACCESS_TOKEN" | python3 -m json.tool | head -50
# Agregar etiqueta a una entrada
curl -s -X POST "https://leer.tu-dominio.com/api/entries/1/tags.json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tags": "tecnologia, linux"}'
# Agregar una anotación (destacado de texto)
curl -s -X POST "https://leer.tu-dominio.com/api/annotations/1.json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"text": "Este párrafo es importante para recordar",
"quote": "Texto citado del artículo original"
}'
Feeds RSS de Wallabag
Wallabag genera feeds RSS personales para acceder a los artículos guardados:
# URLs de feeds RSS disponibles:
# Todos los artículos sin leer:
# https://leer.tu-dominio.com/feed/admin/TOKEN/unread
# Artículos con estrella:
# https://leer.tu-dominio.com/feed/admin/TOKEN/starred
# Artículos con etiqueta específica:
# https://leer.tu-dominio.com/feed/admin/TOKEN/tags/tecnologia
# Obtener el token RSS desde el panel:
# Configuración > RSS > Ver el token RSS
Importación y Exportación
# Importar desde Pocket
# Panel > Importar > Pocket > Descargar datos de Pocket primero
# (https://getpocket.com/export)
# Importar desde Instapaper
# Panel > Importar > Instapaper
# Importar desde Pinboard
# Panel > Importar > Pinboard
# Exportar en diferentes formatos
# Panel > Exportar artículos > EPUB / PDF / CSV / JSON
# Exportar via API
curl -s "https://leer.tu-dominio.com/api/entries/export.json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-o wallabag-export-$(date +%Y%m%d).json
# Importar desde archivo JSON de otra instancia
curl -s -X POST "https://leer.tu-dominio.com/api/entries/lists.json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @wallabag-export.json
Proxy Inverso con Nginx
# Obtener certificado SSL
sudo certbot --nginx -d leer.tu-dominio.com
# Configuración de Nginx para Wallabag
sudo tee /etc/nginx/sites-available/wallabag << 'EOF'
server {
listen 443 ssl http2;
server_name leer.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/leer.tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/leer.tu-dominio.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 60s;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/wallabag /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Solución de Problemas
Error al guardar artículos:
# Ver logs del servidor
docker compose logs wallabag --tail 50
# Probar que el artículo es accesible desde el servidor
docker exec wallabag curl -I https://ejemplo.com/articulo-de-prueba
# El problema puede ser de accesibilidad de la URL o de parsing HTML
# Wallabag usa mercury-parser o readability para extraer el contenido
La extensión del navegador no conecta:
# Verificar que la API está habilitada
curl https://leer.tu-dominio.com/api/version
# Debe devolver la versión de Wallabag en JSON
# Regenerar las credenciales de API en el panel:
# Configuración > API > Crear nuevo cliente > Copiar client_id y client_secret
Error 500 en la instalación manual:
# Ver logs de PHP-FPM y Nginx
sudo journalctl -u php8.1-fpm -f
sudo tail -f /var/log/nginx/error.log
# Limpiar caché de Symfony
sudo -u www-data php /var/www/wallabag/bin/console cache:clear --env=prod
# Verificar permisos de escritura
ls -la /var/www/wallabag/var/cache/
ls -la /var/www/wallabag/var/logs/
Conclusión
Wallabag es una solución completa y madura para guardar artículos y leerlos más tarde, sin anuncios ni seguimiento. Su API REST bien documentada y la variedad de aplicaciones cliente disponibles garantizan una experiencia fluida en todos los dispositivos, mientras que las funciones de anotación y etiquetado facilitan construir una biblioteca de conocimiento organizada y privada.


