今まで、RSSのセルフホストをFreshRSSで活用してきましたが、軽量やいろんな外部と連携できるとして、Minifluxへ移行しました。
今回もDockerで構築していきますが、下記の前提として記載します。
環境
- 独自ドメイン(Cloudflareにて登録済み)
- ネットワーク:
traefik-network(external) - CertResolver:
cloudflare - entryPoints:
web(80),websecure(443)
docker-compose.yml
services:
miniflux:
image: miniflux/miniflux:latest
container_name: miniflux
restart: always
depends_on:
db:
condition: service_healthy
environment:
- DATABASE_URL=postgres://miniflux:${DB_PASSWORD}@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- CREATE_ADMIN=1
- ADMIN_USERNAME=${ADMIN_USERNAME}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
- BASE_URL=https://${MINIFLUX_DOMAIN}
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-network"
- "traefik.http.routers.miniflux.rule=Host(`${MINIFLUX_DOMAIN}`)"
- "traefik.http.routers.miniflux.entrypoints=websecure"
- "traefik.http.routers.miniflux.tls=true"
- "traefik.http.routers.miniflux.tls.certresolver=cloudflare"
- "traefik.http.services.miniflux.loadbalancer.server.port=8080"
networks:
- traefik-network
- miniflux-internal
healthcheck:
test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
interval: 10s
start_period: 30s
db:
image: postgres:17
container_name: miniflux-db
restart: always
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=miniflux
volumes:
- miniflux-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
networks:
- miniflux-internal
networks:
traefik-network:
external: true
miniflux-internal:
driver: bridge
volumes:
miniflux-db:.env
DB_PASSWORD=your_secure_db_password
ADMIN_USERNAME=admin
ADMIN_PASSWORD=your_secure_admin_password
MINIFLUX_DOMAIN=rss.your-domain.com起動
docker compose up -dMiniflux を Traefik + Docker Compose で安全に構築する
- PostgreSQL: 公式ドキュメントではPostgres 18だが、まだbetaなので17を使用
- ネットワーク分離: DBは
miniflux-internalのみに接続し、外部からアクセス不可 - Traefik連携: minifluxコンテナは
traefik-networkに接続し、labelsでルーティング設定 - ポート: minifluxはデフォルトで8080で起動するため、ホストへのポート公開は不要(Traefikが処理)