Self-hosting quick start
This guide gets Rosella Rhythm running on your own machine with Docker. No programming knowledge needed — you will copy two small files, run one command, and open the app in your browser.
What you need
-
A machine that is on when you want to use the app: a home server, a NAS that can run containers, a Raspberry Pi–class box, or a small VPS.
-
Docker with the Compose plugin (
docker compose versionshould print a version). Most NAS container managers and any fresh Docker install already include it.
That’s it. The app ships as a single container image and brings its own database (PostgreSQL) alongside it.
Step 1 — create a folder with two files
Make a folder for the app (for example rosella/) and put these two files in
it.
docker-compose.yml — describes the two containers (the app and its
database):
# Rosella Rhythm — self-host stack: the app + its own PostgreSQL.
# Put a DB_PASSWORD in a .env file next to this, then: docker compose up -d
name: rosella
services:
app:
image: ghcr.io/ofbirds/thosedaysapp:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
DB_HOST: postgres
DB_PORT: "5432"
DB_NAME: thosedays
DB_USER: thosedays
DB_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD in .env}
ports:
- "8080:8080"
postgres:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_USER: thosedays
POSTGRES_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD in .env}
POSTGRES_DB: thosedays
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U thosedays -d thosedays"]
interval: 10s
timeout: 5s
retries: 5
volumes:
pgdata:
.env — holds the one secret you must choose yourself, the database password:
DB_PASSWORD=pick-a-long-random-password
The password is only used between the app and its own database container. You
won’t have to type it again — but keep the .env file around, the database
needs the same password every start.
|
Step 2 — start it
From inside the folder, run:
docker compose up -d
The first start downloads the images (a minute or two on a normal connection). Check that both containers are up:
docker compose ps
You should see app and postgres with status running / healthy.
Step 3 — open the app
In a browser on the same network, open:
http://<address-of-your-machine>:8080
You should see the Rosella Rhythm login screen. Register an account, log some period dates, and the calendar and predictions light up from there.
The app is now reachable on your local network only. If you want to use it
from anywhere (e.g. on your phone away from home), put it behind a reverse
proxy with HTTPS — any of the usual suspects (Caddy, nginx proxy manager,
Traefik) works; point it at port 8080.
|
Optional: email reminders
Rosella Rhythm can email you before a predicted period and when a new version
ships. Both are opt-in and need an SMTP account (a Gmail address with an
app password works). Add
the SMTP settings to your .env and environment — see the
configuration reference for the exact variables.
Updating
New releases are announced on the GitHub releases page (and by email, if you opted in). To update:
docker compose pull
docker compose up -d
Your data lives in a Docker volume, not in the container, so updates never touch it. Database schema changes are applied automatically on startup.
Backing up
Everything worth keeping is in the PostgreSQL volume. A simple backup is one command (run it from the app folder):
docker compose exec postgres pg_dump -U thosedays thosedays > rosella-backup.sql
Run that on a schedule (cron, Task Scheduler, your NAS’s backup tool) and copy the file somewhere safe. To restore onto a fresh install:
docker compose exec -T postgres psql -U thosedays thosedays < rosella-backup.sql