Files
inkwell/docker-compose.yml
T
bvandeusenandClaude Opus 5.5 5556bb2136
CI & Build / Build now, or wait for Android? (push) Successful in 2s
Android / Build, or is the channel already serving this? (push) Successful in 2s
Android / Core and FFI clippy and tests (push) Skipped
Android / Kotlin + Rust (APK) (push) Skipped
Android / Build the server image (push) Skipped
CI & Build / Python lint (push) Successful in 2s
CI & Build / Web typecheck and unit tests (push) Successful in 10s
Desktop (Tauri) / Build, or is the channel already serving this? (push) Successful in 2s
Desktop (Tauri) / Web tests, clippy, Rust tests and rustfmt (push) Skipped
Desktop (Tauri) / Tauri desktop (Linux) (push) Skipped
Desktop (Tauri) / Windows installer (cross-compiled) (push) Skipped
Desktop (Tauri) / Update manifest (push) Skipped
CI & Build / Python tests (push) Successful in 13s
CI & Build / integration (push) Successful in 1m34s
CI & Build / Build & push image (push) Successful in 29s
Compose files run on the orchestrator's defaults (#6220)
Shipped stacks drop every healthcheck and the depends_on
service_healthy wait, per rule 198 "Shipped compose files run on the
orchestrator's defaults: no healthcheck, no restart policy". A
pg_isready healthcheck turns slow storage into a killed database. The
app needs neither: inkwell.dbwait waits up to 60s for Postgres at
start, and the engine's pool_pre_ping retries per request.

- docker-compose.yml: db and app healthchecks removed; depends_on is
  a plain start order. Comments cut to one or two lines per setting
  under rule 32 "Comments describe the product to a stranger": the
  family/rule references are gone, and the three-way port explanation
  points at docs/public-hosting.md, which already holds it.
- docker-compose.dev.yml: db healthcheck and service_healthy removed;
  header shortened.
- README: the copy-paste stack loses the same two blocks.

restart: unless-stopped stays: plain Compose defaults to no restart,
and Swarm ignores the key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:45:46 -04:00

52 lines
1.9 KiB
YAML

# Inkwell: the app and its Postgres database, from the published image.
#
# cp .env.example .env # then set POSTGRES_PASSWORD
# docker compose up -d
#
# Upgrade: `docker compose pull && docker compose up -d`. Migrations run at start.
# Back up first from Settings → Backups; a bare pg_dump misses the attachments,
# which live in the inkwell-data volume.
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-inkwell}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env — see .env.example}
POSTGRES_DB: ${POSTGRES_DB:-inkwell}
volumes:
- inkwell-db:/var/lib/postgresql/data
# Not published to the host; `docker compose exec db psql -U inkwell` reaches it.
logging: &logging
driver: json-file
options:
max-size: "10m"
max-file: "3"
app:
# latest follows main, dev follows dev, a commit sha pins one build.
image: git.fabledsword.com/bvandeusen/inkwell:${INKWELL_TAG:-latest}
restart: unless-stopped
depends_on:
- db
environment:
INKWELL_DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-inkwell}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-inkwell}
volumes:
# Uploaded attachments; without this mount they are lost when the container is recreated.
- inkwell-data:/var/inkwell
# Optional: the folder scheduled backups are written to (Settings → Backups).
# - /mnt/backups/inkwell:/backups
# Behind a reverse proxy in Docker, delete `ports:`; behind one on the host, set
# INKWELL_BIND=127.0.0.1. See docs/public-hosting.md.
ports:
- "${INKWELL_BIND:-0.0.0.0}:${INKWELL_PORT:-5000}:5000"
logging: *logging
volumes:
# Overridable so an install from before the rename keeps its volumes (.env.example).
inkwell-db:
name: ${INKWELL_DB_VOLUME:-inkwell-db}
inkwell-data:
name: ${INKWELL_DATA_VOLUME:-inkwell-data}