Wallabag Docker 설치 가이드: 나중에 읽기 앱 자체 호스팅




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. 기본 비밀번호 변경

  1. http://localhost:8080 접속
  2. wallabag / wallabag 으로 로그인
  3. 우측 상단 → Config → User Information
  4. 새 비밀번호 설정

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

브라우저 확장 & 앱 설정

브라우저 확장 설치

  1. Chrome/Firefox/Safari 확장 스토어에서 “Wallabag” 검색
  2. 설치 후 확장 아이콘 클릭
  3. 설정:
    • Wallabag URL: https://wallabag.yourdomain.com
    • Client ID / Client Secret: Config → API clients management에서 생성
  4. “Save” 클릭

모바일 앱 설정

  1. Android/iOS 앱 스토어에서 “Wallabag” 설치
  2. 서버 URL 입력
  3. 로그인

고급 설정

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_DRIVERDB 드라이버pdo_sqlite
SYMFONY__ENV__FOSUSER_REGISTRATION회원가입 허용false
SYMFONY__ENV__FOSUSER_CONFIRMATION이메일 확인true
SYMFONY__ENV__FROM_EMAIL발신 이메일wallabag@example.com
SYMFONY__ENV__TWOFACTOR_SENDER2FA 발신 이메일no-reply@wallabag.org

Pocket에서 마이그레이션

  1. Pocket에서 데이터 내보내기 (Settings → Export)
  2. Wallabag Config → Import → Pocket
  3. 또는 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



댓글 남기기