docker-compose.yml
Rama main · réplica de lectura del repositorio original.
# songbird — how to run it.
#
# songbird reads Scripture from Concord, a separate Scripture engine that runs on the
# network. songbird keeps only your notes; Concord provides the Bible text, the search
# and the maps. So there are two ways to start, and you only need one of them.
#
# A. You don't have Concord yet. Start both together — songbird plus a ready-made
# Concord it downloads for you:
#
# docker compose --profile bundled-concord up
#
# Then open http://localhost:8077. (The first run takes a few minutes while it
# downloads Concord and builds songbird.)
#
# The Concord it downloads carries the public-domain translations — KJV, ASV, WEB,
# BSB and a dozen more. That is everything most people need, and it is all a public
# download is allowed to include: translations like the ESV or the NKJV are licensed,
# so no public image can ship them.
#
# B. You already run your own Concord — on this machine or anywhere on your network,
# perhaps one you built with translations of your own. Tell songbird where it is by
# putting a line like this in a file called .env next to this one:
#
# CONCORD_BASE_URL=http://192.168.1.62:8000
#
# ...then just:
#
# docker compose up
#
# songbird talks to that Concord and nothing else is started. Whatever translations
# your Concord serves are the translations songbird shows.
#
# Not sure which Concord songbird ended up talking to? Open the app and click **Status**.
# It names the exact address and lists every translation it found there.
services:
# The Scripture engine, ready-made — only for path A above.
#
# This is behind a "profile", which is Docker's word for a part that stays switched off
# unless you ask for it. That's why path A passes `--profile bundled-concord` and path B
# doesn't: if you already have your own Concord, starting a second one would just sit
# there unused — and songbird would read the wrong one.
concord:
image: ghcr.io/kbennett2000/concord:v1.3.1
profiles: ["bundled-concord"]
restart: unless-stopped
# Concord is only used by songbird, on this private network.
# (We don't expose it to your whole computer — songbird talks to it internally.)
expose:
- "8000"
healthcheck:
# songbird waits until Concord is actually ready before it starts.
test: ["CMD", "python", "-c", "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8000/healthz').status==200 else 1)"]
interval: 10s
timeout: 5s
retries: 12
start_period: 40s
# The app you use. Built from this repo (quick — it's lightweight).
songbird:
build: .
restart: unless-stopped
ports:
# The port songbird is reachable on, in Docker and outside it — set PORT in .env to change
# it, then open http://localhost:<PORT>. Only the outside changes: the container keeps
# listening on 8077.
- "${PORT:-8077}:8077"
environment:
# Where songbird looks for Concord. Set CONCORD_BASE_URL in .env to point it at your
# own Concord (path B); leave it unset and songbird uses the ready-made one this file
# can start for you (path A). songbird makes no assumption that Concord is on this
# machine — it calls whatever address it is given.
CONCORD_BASE_URL: "${CONCORD_BASE_URL:-http://concord:8000}"
# Optional: a free key for YouTube's Data API. With one, songbird can look your sermon
# videos up on YouTube — starting with re-dating the sermon notes you already have, so
# each one carries the day the sermon was actually preached. Without a key that feature
# is simply switched off and nothing else changes.
# To use it, put the key in a file called .env next to this one, on a line reading
# YOUTUBE_API_KEY=your-key-here
# (docker compose reads that file automatically). Treat it like a password.
YOUTUBE_API_KEY: "${YOUTUBE_API_KEY:-}"
# How often songbird looks for new sermons on the channels you follow, in hours. 168 is
# once a week, which suits a church that posts on Sundays. Set it to 0 if you would rather
# it never went looking on its own — the "Check now" button on the page still works.
SERMON_CHECK_INTERVAL_HOURS: "${SERMON_CHECK_INTERVAL_HOURS:-168}"
# Videos shorter than this many minutes are skipped, which keeps clips, trailers and Shorts
# out of your notes. It is the starting point for every channel; a single channel can be
# given its own number on the Sermon sources page, and that one wins for that channel.
SERMON_MIN_MINUTES: "${SERMON_MIN_MINUTES:-10}"
volumes:
# Your notes live here, on your computer, so they survive restarts.
- songbird-data:/data
depends_on:
concord:
condition: service_healthy
# Only wait for the bundled Concord when it's actually being started (path A). On
# path B it isn't, and songbird must not refuse to boot over a part nobody asked for.
required: false
volumes:
songbird-data: