guides/miniflux
RSS · Feed-aggregering · Self-hosting

Miniflux · Docker

Minimalistisk, hurtig RSS-reader skrevet i Go — én binær, ingen JavaScript-tunge frontend, lavt ressourceforbrug. Perfekt som feed-motor bag automatisering via dens REST- og Fever-API.

Open Source · Apache 2.0 Docker / Linux Frédéric Guillot
Goén lille binær
PostgreSQLeneste backend
REST + FeverAPI til integration

Hvorfor Miniflux

Bevidst minimalistisk: ingen sociale funktioner, ingen oppustet UI, ekstremt let at drive. Den læser feeds, gemmer dem i PostgreSQL og eksponerer et rent API — hvilket gør den ideel som datakilde for en threat intelligence-pipeline frem for blot en læser.

Til din pipeline: Miniflux fungerer som RSS-motoren der samler dine security-feeds; n8n trækker derefter nye artikler via API'et til screening/enrichment. Forudsætning: Docker installeret.

Compose-stack

PostgreSQL

Miniflux kræver PostgreSQL — der er ingen SQLite-mulighed. Stack med isoleret database og admin oprettet ved første start.

compose.yaml
services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: miniflux
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: miniflux
    volumes:
      - mf_db:/var/lib/postgresql/data
    networks: [ internal ]
    healthcheck:
      test: [ "CMD", "pg_isready", "-U", "miniflux" ]
      interval: 10s
      retries: 5

  miniflux:
    image: miniflux/miniflux:latest
    restart: unless-stopped
    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://rss.defencia.dk/
    ports:
      - "127.0.0.1:8080:8080"
    networks: [ internal, web ]

volumes:
  mf_db:

networks:
  internal:
    internal: true
  web:
RUN_MIGRATIONS opretter/opdaterer skemaet automatisk. CREATE_ADMIN laver admin-brugeren ved første opstart fra env-værdierne.
.env
DB_PASSWORD=# openssl rand -base64 24
ADMIN_USERNAME=lars
ADMIN_PASSWORD=# vælg et stærkt password

Første start

Start stacken
docker compose up -d
docker compose logs -f miniflux
Opret ekstra admin manuelt (valgfrit)
docker compose exec miniflux \
  miniflux -create-admin
Login: Når proxyen er på plads, gå til https://rss.defencia.dk og log ind med admin-brugeren. Tilføj feeds enkeltvis eller importér en hel OPML-fil under Settings → Import.

Reverse-proxy (Nginx)

/etc/nginx/sites-available/rss.defencia.dk
server {
    listen 443 ssl;
    server_name rss.defencia.dk;

    # ssl_certificate ... (Certbot indsætter)

    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 $scheme;
    }
}
Miniflux har ikke websockets — proxy-blokken er enklere end n8n's. BASE_URL i compose skal matche dette hostname.
Cert: sudo certbot --nginx -d rss.defencia.dk eller dit wildcard for *.defencia.dk.

API til automatisering

REST + Fever

Det er her Miniflux skinner som pipeline-komponent. Generér en API-token under Settings → API Keys og kald REST-API'et fra n8n.

EndpointFunktion
GET /v1/entries?status=unreadHent ulæste artikler (til screening i n8n)
GET /v1/feedsListe alle abonnerede feeds
POST /v1/feedsTilføj et nyt feed programmatisk
PUT /v1/entriesMarkér artikler som læst/ulæst i bulk
GET /v1/entries?search=TERMFuldtekst-søgning på tværs af feeds
GET /v1/meVerificér token / brugerinfo
Eksempel — hent ulæste via curl
curl -H "X-Auth-Token: DIN_TOKEN" \
  "https://rss.defencia.dk/v1/entries?status=unread&limit=50"
Pipeline-mønster: n8n schedule-trigger → kald /v1/entries?status=unread → screen med Mistral → enrich → markér som læst via PUT /v1/entries. Token sættes som n8n-credential, så den aldrig ligger i klartekst i workflowet.

Drift

Opdatér
docker compose pull
docker compose up -d
Migrations køres automatisk ved opstart pga. RUN_MIGRATIONS=1.
Backup database
docker compose exec db \
  pg_dump -U miniflux miniflux > mf_$(date +%F).sql
Eksportér feeds (OPML)
# i UI: Settings → Export → OPML
# eller via API: GET /v1/export
Tjek status
docker compose ps
docker compose logs --tail=50 miniflux
Til din backup-stack: Tag et OPML-eksport (dine ~71 kuraterede feeds, portabelt) plus et pg_dump (læste/ulæste states, stjernemarkeringer). OPML alene er nok til at genopbygge abonnementerne hvis databasen går tabt.

Hærdning

KontrolAnbefaling
EksponeringBind til 127.0.0.1:8080, kun via Nginx + HTTPS
DatabasePostgres på internal-netværk, ingen værts-port
API-tokenBrug token, ikke basic-auth, til automatisering; roter ved behov
LoginStærkt admin-password; Fail2ban-jail på login
Feed-proxyOvervej FETCH_*-timeouts mod langsomme/ondsindede feeds
BrugereOpret separat ikke-admin-bruger til API hvis muligt
OpdateringHold imaget opdateret — Go-binæren er lille, opgraderinger er hurtige
Husk Docker+UFW-fælden: Bind til 127.0.0.1:8080 — aldrig 0.0.0.0 for interne tjenester. Se Docker-guiden.