DATETIME of last agent review: 27/11/2025 16:45 GMT
Self-hosted Miniflux RSS reader backed by PostgreSQL, running behind Apache/Virtualmin at https://rss.pinescore.com.
- Prereqs: Go 1.25.x from
/usr/local/go(Debiangolang-go1.19 is installed but must not be used) and PostgreSQL 15+. - Setup:
PATH=/usr/local/go/bin:$PATH make miniflux(builds theminifluxbinary from the repo root with the correct Go toolchain). - Run (local dev):
PATH=/usr/local/go/bin:$PATH DATABASE_URL=postgres://miniflux:<password>@localhost/miniflux?sslmode=disable RUN_MIGRATIONS=1 go run main.go.
- Test:
PATH=/usr/local/go/bin:$PATH make test(runs Go tests with the correct Go version and race detection). - Lint/format:
PATH=/usr/local/go/bin:$PATH make lint(go vet + gofmt + golangci-lint if installed). - Useful:
PATH=/usr/local/go/bin:$PATH make integration-test(starts a temporary instance and runs API integration tests against PostgreSQL).
main.goandinternal/cli— CLI entrypoint that parses flags, loads configuration, and starts the HTTP server and background workers.internal/http— HTTP handlers, routing, authentication, and UI endpoints.internal/databaseandinternal/storage— PostgreSQL access and persistence helpers.internal/reader,internal/worker,internal/mediaproxy— feed fetching, background jobs, and media proxying.clientandinternal/template/templates— front-end assets and HTML templates bundled into the binary.
DATABASE_URL(required) — PostgreSQL connection string (postgres://miniflux:<password>@localhost/miniflux?sslmode=disableon this host).RUN_MIGRATIONS(recommended on first run) — when1, applies database migrations automatically.LISTEN_ADDR— bind address for the HTTP server (production uses127.0.0.1:8180behind Apache).BASE_URL— external URL Miniflux should use when generating links (https://rss.pinescore.comhere).CREATE_ADMIN,ADMIN_USERNAME,ADMIN_PASSWORD— optional one-time bootstrap of the initial admin account.- Feed polling on this instance is configured for an aggressive near-real-time cadence with
POLLING_FREQUENCY=10(seconds),SCHEDULER_ROUND_ROBIN_MIN_INTERVAL=1(minute),POLLING_LIMIT_PER_HOST=2, andPOLLING_RESPECT_FEED_TTL=0. With this configuration the background scheduler wakes up roughly every 10 seconds and refreshes feeds on an approximately one-minute cadence in practice.
- HTTP server fails with “bind: address already in use” → update
LISTEN_ADDRto a free port or stop the conflicting service, then restart Miniflux. - Login keeps failing for the admin user → reset the password via the UI and ensure
CREATE_ADMIN=0so the environment is not overwriting it. - Service will not start under systemd → run
sudo systemctl status minifluxandsudo journalctl -u minifluxto inspect logs and check for database or config errors. - Database-related errors (e.g. “database does not exist” or auth failures) → confirm
DATABASE_URLmatches an existing PostgreSQL database and user.
- This host runs Miniflux as a
minifluxsystemd service behind Apache/Virtualmin; seeops/deployment.mdfor PostgreSQL, systemd, and vhost configuration used onrss.pinescore.com.
- Miniflux upstream documentation — https://miniflux.app/docs/