Wallabag은 Pocket, Instapaper의 오픈소스 대안입니다. 웹 페이지를 저장하여 나중에 읽을 수 있으며, 원본 페이지가 삭제되어도 저장된 콘텐츠는 유지됩니다. 브라우저 확장, 모바일 앱, RSS 피드, ePub/PDF 내보내기까지 지원하며, 셀프호스팅으로 데이터를 완전히 소유할 수 있습니다. GitHub Stars 10K+로 검증된 프로젝트입니다.
Wallabag 주요 특징
Wallabag은 “나중에 읽기” 서비스의 완전한 기능을 제공합니다.
핵심 기능
- 웹 페이지 저장: 광고/레이아웃 제거 후 깨끗한 텍스트 저장
- 오프라인 읽기: 저장된 콘텐츠는 인터넷 없이도 접근 가능
- 태그 & 분류: 태그로 아티클 정리
- 검색: 전체 텍스트 검색
- 주석: 아티클에 하이라이트 및 주석 추가
- 내보내기: ePub, PDF, JSON, CSV, TXT 형식
통합 기능
- 브라우저 확장 (Chrome, Firefox, Safari)
- 모바일 앱 (Android, iOS)
- RSS 피드 출력
- Pocket/Instapaper 가져오기
- REST API
- 2FA 지원
사전 요구 사항
- Docker 및 Docker Compose 설치
- 최소 512MB RAM
- 2GB 이상 저장 공간
- 도메인 (외부 접근 시)
Docker Compose로 Wallabag 설치
기본 설치 (SQLite)
가장 간단한 설치 방법입니다.
# docker-compose.yml
services:
wallabag:
image: wallabag/wallabag:latest
container_name: wallabag
restart: unless-stopped
ports:
- "8080:80"
environment:
- SYMFONY__ENV__DOMAIN_NAME=${DOMAIN_NAME:-http://localhost:8080}
- SYMFONY__ENV__SERVER_NAME="My Wallabag"
- SYMFONY__ENV__FOSUSER_REGISTRATION=false
volumes:
- ./data:/var/www/wallabag/data
- ./images:/var/www/wallabag/web/assets/images
프로덕션 설치 (MariaDB + Redis)
# docker-compose.yml
services:
wallabag:
image: wallabag/wallabag:latest
container_name: wallabag
restart: unless-stopped
depends_on:
- db
- redis
ports:
- "8080:80"
environment:
# 도메인 설정 (필수!)
- SYMFONY__ENV__DOMAIN_NAME=${DOMAIN_NAME}
- SYMFONY__ENV__SERVER_NAME="Wallabag"
# 데이터베이스 설정
- 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=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
# Redis 설정
- SYMFONY__ENV__REDIS_HOST=redis
- SYMFONY__ENV__REDIS_PORT=6379
# 메일 설정 (선택)
- SYMFONY__ENV__MAILER_DSN=smtp://user:pass@smtp.example.com:587
- SYMFONY__ENV__FROM_EMAIL=wallabag@example.com
# 보안 설정
- SYMFONY__ENV__FOSUSER_REGISTRATION=false
- SYMFONY__ENV__FOSUSER_CONFIRMATION=true
volumes:
- wallabag-data:/var/www/wallabag/data
- wallabag-images:/var/www/wallabag/web/assets/images
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost"]
interval: 1m
timeout: 3s
db:
image: mariadb:10.11
container_name: wallabag-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=wallabag
- MYSQL_USER=wallabag
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- wallabag-db:/var/lib/mysql
redis:
image: redis:alpine
container_name: wallabag-redis
restart: unless-stopped
volumes:
wallabag-data:
wallabag-images:
wallabag-db:
환경 변수 파일
# .env
DOMAIN_NAME=https://wallabag.yourdomain.com
DB_PASSWORD=secure_db_password
MYSQL_ROOT_PASSWORD=secure_root_password
설치 및 실행
# 디렉토리 생성
mkdir wallabag && cd wallabag
# docker-compose.yml 및 .env 생성
# 컨테이너 실행
docker compose up -d
# 로그 확인
docker compose logs -f wallabag
# 브라우저에서 접속
# http://localhost:8080
# 기본 로그인: wallabag / wallabag
초기 설정
1. 기본 비밀번호 변경
http://localhost:8080접속wallabag/wallabag으로 로그인- 우측 상단 → Config → User Information
- 새 비밀번호 설정
2. 사용자 생성 (CLI)
# 새 사용자 생성
docker compose exec -it wallabag /var/www/wallabag/bin/console fos:user:create --env=prod
# 관리자 권한 부여
docker compose exec -it wallabag /var/www/wallabag/bin/console fos:user:promote --super --env=prod username
브라우저 확장 & 앱 설정
브라우저 확장 설치
- Chrome/Firefox/Safari 확장 스토어에서 “Wallabag” 검색
- 설치 후 확장 아이콘 클릭
- 설정:
- Wallabag URL:
https://wallabag.yourdomain.com - Client ID / Client Secret: Config → API clients management에서 생성
- Wallabag URL:
- “Save” 클릭
모바일 앱 설정
- Android/iOS 앱 스토어에서 “Wallabag” 설치
- 서버 URL 입력
- 로그인
고급 설정
PostgreSQL 사용
# docker-compose.yml
services:
wallabag:
environment:
- SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
- SYMFONY__ENV__DATABASE_DRIVER_CLASS=Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver
- SYMFONY__ENV__DATABASE_HOST=db
- SYMFONY__ENV__DATABASE_PORT=5432
- SYMFONY__ENV__DATABASE_NAME=wallabag
- SYMFONY__ENV__DATABASE_USER=wallabag
- SYMFONY__ENV__DATABASE_PASSWORD=${DB_PASSWORD}
db:
image: postgres:16-alpine
environment:
- POSTGRES_DB=wallabag
- POSTGRES_USER=wallabag
- POSTGRES_PASSWORD=${DB_PASSWORD}
volumes:
- wallabag-db:/var/lib/postgresql/data
Traefik 연동
# docker-compose.yml
services:
wallabag:
labels:
- "traefik.enable=true"
- "traefik.http.routers.wallabag.rule=Host(`wallabag.yourdomain.com`)"
- "traefik.http.routers.wallabag.entrypoints=websecure"
- "traefik.http.routers.wallabag.tls.certresolver=letsencrypt"
- "traefik.http.services.wallabag.loadbalancer.server.port=80"
networks:
- traefik-public
networks:
traefik-public:
external: true
Nginx 리버스 프록시
server {
listen 443 ssl http2;
server_name wallabag.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/wallabag.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wallabag.yourdomain.com/privkey.pem;
client_max_body_size 50M;
location / {
proxy_pass http://localhost: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 $scheme;
}
}
관리 명령어
# 로그 확인
docker compose logs -f wallabag
# Pocket에서 가져오기
docker compose exec wallabag /var/www/wallabag/bin/console wallabag:import:pocket --env=prod
# 캐시 클리어
docker compose exec wallabag /var/www/wallabag/bin/console cache:clear --env=prod
# 데이터베이스 백업
docker compose exec db mysqldump -u wallabag -p wallabag > backup_$(date +%Y%m%d).sql
# 업데이트
docker compose pull
docker compose up -d
주요 환경 변수
| 변수 | 설명 | 기본값 |
|---|---|---|
| SYMFONY__ENV__DOMAIN_NAME | 외부 접근 URL (필수) | – |
| SYMFONY__ENV__DATABASE_DRIVER | DB 드라이버 | pdo_sqlite |
| SYMFONY__ENV__FOSUSER_REGISTRATION | 회원가입 허용 | false |
| SYMFONY__ENV__FOSUSER_CONFIRMATION | 이메일 확인 | true |
| SYMFONY__ENV__FROM_EMAIL | 발신 이메일 | wallabag@example.com |
| SYMFONY__ENV__TWOFACTOR_SENDER | 2FA 발신 이메일 | no-reply@wallabag.org |
Pocket에서 마이그레이션
- Pocket에서 데이터 내보내기 (Settings → Export)
- Wallabag Config → Import → Pocket
- 또는 CLI:
docker compose exec wallabag /var/www/wallabag/bin/console wallabag:import:pocket --env=prod
문제 해결
CSS가 깨지는 경우
SYMFONY__ENV__DOMAIN_NAME이 실제 접근 URL과 일치해야 합니다.
이미지가 표시되지 않는 경우
# 이미지 권한 확인
docker compose exec wallabag chown -R www-data:www-data /var/www/wallabag/web/assets/images
데이터베이스 연결 오류
# 마이그레이션 실행
docker compose exec wallabag /var/www/wallabag/bin/console doctrine:migrations:migrate --env=prod --no-interaction
마무리
Wallabag은 Pocket/Instapaper의 완벽한 셀프호스팅 대안입니다. 웹 페이지를 깔끔하게 저장하고, 어디서든 오프라인으로 읽을 수 있습니다. 브라우저 확장과 모바일 앱으로 편리하게 아티클을 추가하고, ePub으로 내보내 e-리더에서 읽을 수도 있습니다. Docker를 통해 쉽게 배포하고 데이터를 완전히 소유하세요.
참고 링크
- 공식 사이트: https://wallabag.org
- GitHub: https://github.com/wallabag/wallabag
- Docker Hub: https://hub.docker.com/r/wallabag/wallabag
- 문서: https://doc.wallabag.org