Skip to content

Repository files navigation

Rosso Reader

A self-hosted RSS feed reader. Periodically fetches RSS/Atom feeds on a configurable schedule, stores articles in PostgreSQL, and provides a clean web UI for browsing, searching, and managing your subscriptions.

screenshot

Quick start (dev setup)

Docker and docker-compose are needed to run Rosso Reader. To try Rosso Reader locally, the development server can be started with docker compose. This setup is not recommended for real use, see the Production section below.

docker compose up

Rosso Reader will now be available on http://localhost:5173/.

Production

Use docker-compose.prod.yml to deploy and installation of Rosso Reader.

# Set database credentialsexport POSTGRES_USER=rssreader
export POSTGRES_PASSWORD=your-secure-password
export DOMAIN=yourdomain.com
export LETSENCRYPT_EMAIL=you@email.com
# Start all services
docker compose -f docker-compose.prod.yml up -d

Access Rosso Reader on https://yourdomain.com/.

Environment Variables

Backend (Go application)

VariableDefaultDescription
DATABASE_URLpostgres://postgres:postgres@localhost:5433/rssreader?sslmode=disablePostgreSQL connection string
SERVER_PORT8080Backend HTTP listen port
FETCH_INTERVAL_MINUTES30RSS feed fetch interval
CORS_ORIGINhttp://localhost:5173Allowed CORS origin
RP_IDlocalhostWebAuthn RP ID
RP_ORIGINhttp://localhost:5173WebAuthn RP origin
SESSION_MAX_AGE_DAYS30Session max age in days
SESSION_COOKIE_NAMEsessionSession cookie name
COOKIE_SECUREfalseSet cookie Secure flag

Frontend (Vite build-time)

VariableDefaultDescription
VITE_API_URLhttp://localhost:8080Backend URL for API calls

Docker Compose host port mappings

VariableDefaultDescription
DB_PORT5433 (dev)Host port mapped to PostgreSQL
API_PORT8081 (dev)Host port mapped to the Go API
WEB_PORT5173 (dev)Host port mapped to the frontend

Production (docker-compose.prod.yml)

VariableDefaultRequiredDescription
POSTGRES_USERpostgresNoPostgreSQL user
POSTGRES_PASSWORDpostgresYesPostgreSQL password
POSTGRES_DBrssreaderNoPostgreSQL database name
DOMAINYesDomain for Traefik routing & TLS
RP_ORIGINhttps://${DOMAIN}:443NoWebAuthn RP origin
LETSENCRYPT_EMAILYesEmail for Let's Encrypt ACME
FETCH_INTERVAL_MINUTES30NoRSS feed fetch interval
CORS_ORIGINNoAllowed CORS origin
SESSION_MAX_AGE_DAYS30NoSession max age in days
SESSION_COOKIE_NAMEsessionNoSession cookie name
COOKIE_SECUREtrueNoSet cookie Secure flag

Development Setup

Starting the development containers

# Start PostgreSQL and run the app stack
docker compose up -d

Running tests

# Backend unit testscd backend && go test -short ./...
# Backend integration tests (requires Docker)cd backend && go test ./internal/store/pgstore/
# Backend all testscd backend && go test ./...
# Frontend testscd frontend && pnpm testcd frontend && pnpm test:watch # watch mode

Code generation

# Regenerate sqlc code after changing queriescd backend && sqlc generate -f sql/sqlc.yaml

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages