개요
Miniflux는 “미니멀하고 독선적인(opinionated)” 철학을 가진 RSS 피드 리더입니다. Go 언어로 작성되어 매우 가볍고 빠르며, 단일 바이너리로 배포됩니다. 불필요한 기능을 배제하고 RSS 읽기의 본질에 충실한 것이 특징입니다.
| 항목 | 내용 |
|---|
| GitHub | https://github.com/miniflux/v2 |
| 공식 사이트 | https://miniflux.app |
| GitHub Stars | 7K+ |
| 라이선스 | Apache 2.0 |
| 개발 언어 | Go |
| 호스팅 서비스 | $15/년 (선택) |
Miniflux란?
Miniflux는 2013년 처음 출시되어 2017년 Go 언어로 완전히 재작성된 미니멀리스트 RSS 리더입니다. “기능이 적을수록 좋다”는 철학으로, 필요한 핵심 기능만 제공하고 나머지는 과감히 생략했습니다.
핵심 철학
"미니멀하고 독선적인(Minimalist and Opinionated)"
- 단순함이 곧 강점
- 필요한 기능만 제공
- 가볍고 빠른 성능
- 프라이버시 중시
왜 “독선적”인가?
| 결정 사항 | 이유 |
|---|
| PostgreSQL만 지원 | 최고의 성능과 전문 검색 |
| 플러그인 없음 | 단순함 유지, 보안 강화 |
| 테마 최소화 | 읽기에 집중 |
| JavaScript 최소 | 빠른 로딩, 프라이버시 |
주요 기능
피드 관리
| 기능 | 설명 |
|---|
| 다양한 피드 형식 | Atom 0.3/1.0, RSS 1.0/2.0, JSON Feed 1.0/1.1 |
| OPML 가져오기/내보내기 | 기존 피드 마이그레이션 |
| URL 가져오기 | 피드 URL 직접 입력 |
| 첨부 파일 지원 | 팟캐스트, 비디오, 이미지 |
| YouTube 내장 재생 | YouTube 비디오 앱 내 재생 |
| 카테고리 분류 | 피드 정리 |
| 북마크(스타) | 중요 아티클 저장 |
프라이버시 & 보안
| 기능 | 설명 |
|---|
| 픽셀 트래커 제거 | 추적 이미지 차단 |
| 추적 파라미터 제거 | utm_source, fbclid 등 자동 제거 |
| 외부 리소스 차단 | 이미지, 스크립트 선택적 차단 |
| HTTPS 강제 | 보안 연결 우선 |
| CSP 헤더 | 콘텐츠 보안 정책 |
연동 기능
| 기능 | 설명 |
|---|
| Google Reader API | Reeder, FeedMe 등 연동 |
| Fever API | Unread 등 연동 |
| Webhook | 외부 서비스 알림 |
| 제3자 서비스 저장 | Pocket, Instapaper, Wallabag 등 |
| 공유 링크 | 개별 아티클 공개 공유 |
성능
| 특징 | 설명 |
|---|
| 단일 바이너리 | 외부 의존성 없음 |
| 낮은 메모리 | ~30MB RAM |
| 빠른 응답 | Go 언어의 성능 |
| 전문 검색 | PostgreSQL 기반 |
RSS 리더 비교
| 기능 | Miniflux | FreshRSS | Tiny Tiny RSS |
|---|
| 철학 | 미니멀 | 풍부한 기능 | 파워 유저 |
| 개발 언어 | Go | PHP | PHP |
| 데이터베이스 | PostgreSQL만 | SQLite/MySQL/PgSQL | PostgreSQL/MySQL |
| 바이너리 크기 | ~20MB | – | – |
| RAM 사용 | ~30MB | ~100MB+ | ~200MB+ |
| 플러그인 | ❌ | ✅ | ✅ |
| 테마 | 기본 + 몇 개 | 다양 | 다양 |
| 설정 복잡도 | 매우 단순 | 중간 | 복잡 |
| 학습 곡선 | 낮음 | 중간 | 높음 |
| 모바일 앱 | 서드파티 | 서드파티 | 공식 앱 |
| 호스팅 서비스 | ✅ $15/년 | ❌ | ❌ |
선택 가이드
| 원하는 것 | 추천 |
|---|
| 가벼움, 단순함 | Miniflux |
| 풍부한 기능, 확장성 | FreshRSS |
| 고급 커스터마이징 | Tiny Tiny RSS |
| 관리 부담 최소화 | Miniflux 호스팅 |
시스템 요구 사항
최소 사양
| 항목 | 최소 | 권장 |
|---|
| CPU | 1 Core | 1 Core |
| RAM | 64MB | 128MB |
| 저장소 | 50MB + 데이터 | SSD 권장 |
| 데이터베이스 | PostgreSQL 11+ | PostgreSQL 15+ |
매우 가벼운 리소스
Miniflux는 Raspberry Pi에서도 원활하게 실행됩니다.
- Alpine 기반 이미지
- 단일 Go 바이너리
- 최소 메모리 사용
Docker 설치
방법 1: Docker Compose (권장)
# docker-compose.yml
services:
miniflux:
image: miniflux/miniflux:latest
container_name: miniflux
restart: unless-stopped
ports:
- "8080:8080"
depends_on:
db:
condition: service_healthy
environment:
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- CREATE_ADMIN=1
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=changeme123
db:
image: postgres:15-alpine
container_name: miniflux-db
restart: unless-stopped
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=miniflux
volumes:
- miniflux_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
volumes:
miniflux_db:
실행:
mkdir -p ~/miniflux && cd ~/miniflux
# docker-compose.yml 생성 후
docker compose up -d
# 로그 확인
docker compose logs -f miniflux
접속: http://localhost:8080
방법 2: 환경 변수 상세 설정
# docker-compose.yml
services:
miniflux:
image: miniflux/miniflux:latest
container_name: miniflux
restart: unless-stopped
ports:
- "8080:8080"
depends_on:
db:
condition: service_healthy
environment:
# 데이터베이스
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
# 관리자 계정 (첫 실행 시에만)
- CREATE_ADMIN=1
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=securepassword123
# 서버 설정
- LISTEN_ADDR=0.0.0.0:8080
- BASE_URL=https://rss.example.com
# 피드 업데이트
- POLLING_FREQUENCY=60
- BATCH_SIZE=100
- POLLING_SCHEDULER=entry_frequency
# 보안
- CLEANUP_ARCHIVE_UNREAD_DAYS=180
- CLEANUP_ARCHIVE_READ_DAYS=60
- CLEANUP_REMOVE_SESSIONS_DAYS=30
# 기능
- FETCH_YOUTUBE_WATCH_TIME=1
- YOUTUBE_EMBED_URL_OVERRIDE=https://www.youtube-nocookie.com/embed/
# 프록시 (선택)
# - HTTP_CLIENT_PROXY=http://proxy:8080
db:
image: postgres:15-alpine
container_name: miniflux-db
restart: unless-stopped
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=miniflux
volumes:
- miniflux_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
timeout: 5s
retries: 5
volumes:
miniflux_db:
방법 3: Traefik 연동
# docker-compose.yml
services:
miniflux:
image: miniflux/miniflux:latest
container_name: miniflux
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- CREATE_ADMIN=1
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=changeme123
- BASE_URL=https://rss.${DOMAIN}
networks:
- internal
- traefik_network
labels:
- "traefik.enable=true"
- "traefik.http.routers.miniflux.rule=Host(`rss.${DOMAIN}`)"
- "traefik.http.routers.miniflux.entrypoints=websecure"
- "traefik.http.routers.miniflux.tls.certresolver=letsencrypt"
- "traefik.http.services.miniflux.loadbalancer.server.port=8080"
db:
image: postgres:15-alpine
container_name: miniflux-db
restart: unless-stopped
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=miniflux
volumes:
- miniflux_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
timeout: 5s
retries: 5
networks:
- internal
volumes:
miniflux_db:
networks:
internal:
traefik_network:
external: true
환경 변수 가이드
필수 변수
| 변수 | 설명 | 예시 |
|---|
DATABASE_URL | PostgreSQL 연결 문자열 | postgres://user:pass@host/db |
RUN_MIGRATIONS | 자동 DB 마이그레이션 | 1 |
관리자 계정
| 변수 | 설명 | 예시 |
|---|
CREATE_ADMIN | 관리자 생성 여부 | 1 |
ADMIN_USERNAME | 관리자 사용자명 | admin |
ADMIN_PASSWORD | 관리자 비밀번호 | securepass |
서버 설정
| 변수 | 설명 | 기본값 |
|---|
LISTEN_ADDR | 바인딩 주소 | 127.0.0.1:8080 |
BASE_URL | 외부 접속 URL | http://localhost |
HTTPS | HTTPS 강제 | 0 |
DISABLE_HSTS | HSTS 비활성화 | 0 |
피드 업데이트
| 변수 | 설명 | 기본값 |
|---|
POLLING_FREQUENCY | 업데이트 간격 (분) | 60 |
BATCH_SIZE | 한 번에 업데이트할 피드 수 | 100 |
POLLING_SCHEDULER | 스케줄러 타입 | round_robin |
SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL | 최대 업데이트 간격 | 24h |
정리 설정
| 변수 | 설명 | 기본값 |
|---|
CLEANUP_ARCHIVE_UNREAD_DAYS | 안 읽은 글 보관 일수 | 180 |
CLEANUP_ARCHIVE_READ_DAYS | 읽은 글 보관 일수 | 60 |
CLEANUP_FREQUENCY_HOURS | 정리 실행 간격 | 24 |
프라이버시
| 변수 | 설명 | 기본값 |
|---|
PROXY_OPTION | 미디어 프록시 | http-only |
PROXY_MEDIA_TYPES | 프록시할 미디어 타입 | image |
FETCH_YOUTUBE_WATCH_TIME | YouTube 재생시간 가져오기 | 0 |
초기 설정
1) 로그인
URL: http://localhost:8080
사용자명: admin (또는 설정한 값)
비밀번호: changeme123 (또는 설정한 값)
2) 설정 변경
Settings → 기본 설정:
- 시간대: Asia/Seoul
- 언어: 한국어 (지원 시)
- 테마: Light/Dark/System
- 키보드 단축키: 활성화
Settings → 통합:
- Pocket/Instapaper 연동 (선택)
- Google Reader API: 활성화
- Fever API: 활성화
3) 피드 추가
- 상단 Feeds 메뉴
- Add Subscription 클릭
- URL 입력 (사이트 URL 또는 피드 URL)
- 카테고리 선택
- Save 클릭
키보드 단축키
Miniflux는 키보드 중심 탐색을 지원합니다.
| 단축키 | 기능 |
|---|
g u | 미읽은 목록 |
g b | 북마크 목록 |
g h | 히스토리 |
g f | 피드 목록 |
g c | 카테고리 목록 |
j / k | 다음/이전 아티클 |
o / Enter | 아티클 열기 |
v | 원본 링크 열기 |
m | 읽음/안읽음 토글 |
d | 북마크 토글 |
f | 전체 본문 가져오기 |
s | 저장 서비스로 보내기 |
/ | 검색 |
? | 단축키 도움말 |
모바일 앱 연동
Google Reader API
서버 URL: https://rss.example.com/v1/
사용자명: [Miniflux 사용자명]
비밀번호: [Miniflux 비밀번호]
Fever API
- Settings → Integrations → Fever 활성화
- Fever 비밀번호 설정
서버 URL: https://rss.example.com/fever/
사용자명: [Miniflux 사용자명]
비밀번호: [Fever 비밀번호]
호환 앱
| 플랫폼 | 앱 | API |
|---|
| iOS | Reeder | Google Reader |
| iOS | Unread | Fever |
| iOS | Fiery Feeds | Fever |
| Android | FeedMe | Google Reader |
| Android | Read You | Google Reader |
| Desktop | Fluent Reader | Google Reader |
Nextflux (대체 웹 UI)
Miniflux의 기본 UI가 너무 미니멀하다면 Nextflux를 사용할 수 있습니다.
# docker-compose.yml에 추가
nextflux:
image: ghcr.io/nextflux/nextflux:latest
container_name: nextflux
restart: unless-stopped
ports:
- "3000:3000"
environment:
- MINIFLUX_URL=http://miniflux:8080
Nextflux는 더 현대적인 UI를 제공하면서 Miniflux API를 사용합니다.
백업 및 복원
OPML 내보내기
Settings → Export → Download OPML
데이터베이스 백업
# PostgreSQL 덤프
docker exec miniflux-db pg_dump -U miniflux miniflux > miniflux-backup.sql
# 압축
docker exec miniflux-db pg_dump -U miniflux miniflux | gzip > miniflux-backup.sql.gz
복원
# OPML: Settings → Import → OPML 파일 업로드
# 데이터베이스 복원
docker exec -i miniflux-db psql -U miniflux miniflux < miniflux-backup.sql
자동 백업 스크립트
#!/bin/bash
# miniflux-backup.sh
BACKUP_DIR="/backup/miniflux"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# 데이터베이스 백업
docker exec miniflux-db pg_dump -U miniflux miniflux | gzip > $BACKUP_DIR/miniflux-$DATE.sql.gz
# 7일 이상 된 백업 삭제
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
echo "Backup completed: miniflux-$DATE.sql.gz"
업데이트
Docker Compose
cd ~/miniflux
# 최신 이미지
docker compose pull
# 재시작 (마이그레이션 자동 실행)
docker compose up -d
# 로그 확인
docker compose logs -f miniflux
버전 고정
안정성을 위해 특정 버전을 사용:
image: miniflux/miniflux:2.1.3
트러블슈팅
일반적인 문제
데이터베이스 연결 실패:
# PostgreSQL 상태 확인
docker exec miniflux-db pg_isready -U miniflux
# 연결 테스트
docker exec miniflux-db psql -U miniflux -c "SELECT 1"
마이그레이션 오류:
# 수동 마이그레이션
docker exec miniflux /usr/bin/miniflux -migrate
관리자 비밀번호 재설정:
docker exec miniflux /usr/bin/miniflux -reset-password
로그 확인
# Miniflux 로그
docker logs miniflux -f
# PostgreSQL 로그
docker logs miniflux-db -f
상태 확인
# 버전 확인
docker exec miniflux /usr/bin/miniflux -version
# 설정 확인
docker exec miniflux /usr/bin/miniflux -info
성능 최적화
PostgreSQL 튜닝
db:
image: postgres:15-alpine
command:
- "postgres"
- "-c"
- "shared_buffers=128MB"
- "-c"
- "effective_cache_size=384MB"
- "-c"
- "maintenance_work_mem=32MB"
피드 업데이트 최적화
environment:
- POLLING_FREQUENCY=60 # 1시간
- BATCH_SIZE=50 # 배치 크기
- POLLING_SCHEDULER=entry_frequency # 스마트 스케줄링
- SCHEDULER_ENTRY_FREQUENCY_MIN_INTERVAL=15m
- SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL=24h
Reddit 피드 추가
Reddit 서브레딧을 RSS로 구독할 수 있습니다:
https://www.reddit.com/r/selfhosted/.rss
https://www.reddit.com/r/homelab/.rss
https://www.reddit.com/r/docker/.rss
사용 사례
1. 프라이버시 중시 사용자
- 모든 추적 파라미터 자동 제거
- 이미지 프록시로 IP 보호
- 셀프호스팅으로 데이터 주권
2. 미니멀리스트
- 불필요한 기능 없음
- 빠르고 가벼운 인터페이스
- 키보드 중심 탐색
3. 저사양 서버
- Raspberry Pi에서도 실행
- 최소 리소스 사용
- 단일 바이너리 배포
마무리
Miniflux는 “적을수록 많다(Less is More)”는 철학을 완벽하게 구현한 RSS 리더입니다. 불필요한 기능을 과감히 배제하고 RSS 읽기의 본질에 충실하여, 빠르고 가벼우면서도 필요한 기능은 모두 갖추고 있습니다.
핵심 장점
| 장점 | 설명 |
|---|
| 미니멀 | 필요한 기능만 제공 |
| 가벼움 | ~30MB RAM |
| 빠름 | Go 언어 성능 |
| 프라이버시 | 트래커 제거, 프록시 |
| 단순 배포 | 단일 바이너리 |
이런 분께 추천
✅ 미니멀리스트
✅ 프라이버시 중시
✅ 저사양 서버 사용자
✅ 키보드 파워 유저
✅ 관리 부담 최소화 원하는 분