Swap a SaaS bill for a compose file you can read.
OpenLogs will be a directory of open-source tools that replace paid SaaS. Each entry will give you a docker-compose file, a difficulty rating with the reason, and a plain note on the license and business model.
No entries are published yet. The example file shows the format.
services:
wiki:
image: example/wiki:2.4
restart: unless-stopped
ports:
- "8080:3000"
environment:
DATABASE_URL: postgres://wiki:${DB_PASSWORD}@db/wiki
SMTP_HOST: ${SMTP_HOST}
depends_on:
- db
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: wiki
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: wiki
volumes:
- wiki-db:/var/lib/postgresql/data
volumes:
wiki-db:
Rated Medium
- Easy
- Medium
- Hard
- Lines 2 and 13Two services to run and update: the app and a Postgres database.
- Line 21One volume holds the database. You own its backups.
- Line 9It needs an outside mail server to send email.
What every entry will include
- A compose file, checked
- Before an entry goes live, we will run
docker compose configon its file. That check catches YAML and schema errors before you run it. - A difficulty rating, with the reason
- Easy, Medium or Hard. The reason names what drives it: how many services you run, what data you must back up, and what outside services it needs, such as a mail server.
- The license and business model
- Fully open source, open-core, or source-available. If a feature is only in an enterprise plan, the entry will name it.
Example entries
Three real tools, shown in the entry format. The ratings, reasons and compose files here are illustrative and not verified. None of them is a published entry.
Showing 3 of 3 examples
-
Uptime Kuma
Difficulty: EasyReplaces a hosted uptime monitor.
One container and one data volume. No outside services to set up.
Example. Not a published entry.
# Illustrative example. Not a published or verified entry. services: uptime-kuma: image: louislam/uptime-kuma:1 restart: unless-stopped ports: - "3001:3001" volumes: - kuma-data:/app/data volumes: kuma-data: -
ntfy
Difficulty: EasyReplaces a paid push-notification service.
One container with a cache volume and a config folder.
Example. Not a published entry.
# Illustrative example. Not a published or verified entry. services: ntfy: image: binwiederhier/ntfy command: serve restart: unless-stopped environment: TZ: UTC ports: - "8080:80" volumes: - ntfy-cache:/var/cache/ntfy - ./config:/etc/ntfy volumes: ntfy-cache: -
Umami
Difficulty: MediumReplaces hosted web analytics.
Two services: the app and a Postgres database that you back up yourself.
Example. Not a published entry.
# Illustrative example. Not a published or verified entry. services: umami: image: ghcr.io/umami-software/umami:postgresql-latest restart: unless-stopped ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:${DB_PASSWORD}@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: ${APP_SECRET} depends_on: db: condition: service_healthy db: image: postgres:15-alpine restart: unless-stopped environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - umami-db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U umami -d umami"] interval: 5s timeout: 5s retries: 5 volumes: umami-db:
Get the first entries by email
Emails start with the first published entries.