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
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>
52 lines
1.9 KiB
YAML
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}
|