daa56289ae
Initial deploy failed with 'Container cannot be connected to network endpoints: miniflux-net, traefik-net' — the docker engine balks at joining a brand-new internal network and an existing external network in one create step. Flattened both containers onto traefik-net only. The DB password still protects miniflux-db, and traefik-net is internal-LAN-only, so co-locating them is fine. Verify step updated to check for traefik-net membership instead of the (now-gone) miniflux-net.
86 lines
3.0 KiB
YAML
86 lines
3.0 KiB
YAML
# Miniflux — minimal self-hosted RSS reader (Go single-binary, ~30 MB image).
|
|
# Apache 2.0. https://miniflux.app/
|
|
#
|
|
# Use case: unified inbox across tech blogs, Hacker News, lobste.rs,
|
|
# and selected subreddits (Reddit serves an .rss feed for any sub at
|
|
# https://reddit.com/r/<sub>/.rss). Subreddits with score-spoiler
|
|
# headlines (e.g. r/nba) get a per-feed block-list rule — see README.
|
|
#
|
|
# Architecture: this stack bundles its own Postgres rather than using
|
|
# the shared pfi-postgres at 10.250.50.80. Single-user RSS DB is tiny
|
|
# (~MB scale per year) and the bundle reduces cross-host coupling.
|
|
# Backup: postgres data lives in the named volume miniflux-db-data;
|
|
# capture via `docker exec miniflux-db pg_dump -U miniflux miniflux`
|
|
# in restic's pre-backup hook (separate stack — TODO).
|
|
#
|
|
# All tunables live in .env — edit that, not this file.
|
|
|
|
services:
|
|
miniflux:
|
|
image: miniflux/miniflux:${MINIFLUX_VERSION}
|
|
container_name: miniflux
|
|
restart: unless-stopped
|
|
depends_on:
|
|
miniflux-db:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${MINIFLUX_BIND:-0.0.0.0}:${MINIFLUX_PORT}:8080"
|
|
environment:
|
|
- DATABASE_URL=postgres://miniflux:${MINIFLUX_DB_PASSWORD}@miniflux-db/miniflux?sslmode=disable
|
|
- RUN_MIGRATIONS=1
|
|
- CREATE_ADMIN=1
|
|
- ADMIN_USERNAME=${MINIFLUX_ADMIN_USERNAME}
|
|
- ADMIN_PASSWORD=${MINIFLUX_ADMIN_PASSWORD}
|
|
- LOG_LEVEL=${MINIFLUX_LOG_LEVEL:-info}
|
|
- HTTPS=0
|
|
- LISTEN_ADDR=0.0.0.0:8080
|
|
healthcheck:
|
|
# Miniflux ships with a built-in healthcheck command.
|
|
test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 30s
|
|
networks:
|
|
- tnet
|
|
labels:
|
|
- homepage.group=News
|
|
- homepage.name=Miniflux
|
|
- homepage.icon=mdi-rss
|
|
- homepage.description=RSS reader (subreddits, blogs, HN)
|
|
- homepage.href=http://10.250.50.70:${MINIFLUX_PORT}
|
|
|
|
miniflux-db:
|
|
image: postgres:16
|
|
container_name: miniflux-db
|
|
restart: unless-stopped
|
|
environment:
|
|
- POSTGRES_USER=miniflux
|
|
- POSTGRES_PASSWORD=${MINIFLUX_DB_PASSWORD}
|
|
- POSTGRES_DB=miniflux
|
|
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
|
|
volumes:
|
|
- miniflux-db-data:/var/lib/postgresql/data
|
|
networks:
|
|
- tnet
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U miniflux"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
volumes:
|
|
miniflux-db-data:
|
|
|
|
networks:
|
|
# Both containers share traefik-net. Earlier attempt to put the DB
|
|
# on a private internal network plus miniflux on both nets failed
|
|
# at create-time with "Container cannot be connected to network
|
|
# endpoints: miniflux-net, traefik-net" — the docker engine balks
|
|
# at joining multiple networks (one brand-new, one external) in a
|
|
# single create step. The DB password still protects miniflux-db,
|
|
# and traefik-net is internal-LAN-only, so co-locating is fine.
|
|
tnet:
|
|
name: traefik-net
|
|
external: true
|