Files
codeandClaude Fable 5 8ab413804a normalize all stacks to conventions
- VOL_PATH always defaults to /data; vscode/opencode VOL_PROJECTS nests it
- TZ defaults to America/Vancouver (was UTC in etherpad, ntfy, redis)
- compose section order fixed (volumes before environment, command after networks)
- all default secrets are the literal ChangeThisPassword (grep-friendly,
  users must change them); removed a real key from ollama sample.env
- sample.env synced with compose: missing vars added with defaults, dead vars removed
- invoiceninja_dev/openarchiver_dev: app services had no environment block,
  wired all sample.env vars through so the stacks actually work
- opencode: sample.env OLLAMA_HOST renamed to OLLAMA_HOST_URL to match compose
- TZ values unquoted consistently

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 06:24:54 +00:00

88 lines
3.0 KiB
YAML

services:
mysql:
image: ${MYSQL_IMAGE:-mysql:8}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/invoiceninja/mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=${DB_DATABASE:-ninja}
- MYSQL_USER=${DB_USERNAME:-ninja}
- MYSQL_PASSWORD=${DB_PASSWORD:-ChangeThisPassword}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-ChangeThisPassword}
networks:
- internal
redis:
image: ${REDIS_IMAGE:-redis:alpine}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
networks:
- internal
app:
image: ${INVOICENINJA_IMAGE:-invoiceninja/invoiceninja-debian:latest}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/invoiceninja/public:/var/www/html/public
- ${VOL_PATH:-/data}/invoiceninja/storage:/var/www/html/storage
environment:
- APP_URL=${APP_URL:-http://localhost:8000}
- APP_KEY=${APP_KEY:-ChangeThisPassword}
- APP_ENV=${APP_ENV:-production}
- APP_DEBUG=${APP_DEBUG:-false}
- REQUIRE_HTTPS=${REQUIRE_HTTPS:-false}
- PHANTOMJS_PDF_GENERATION=${PHANTOMJS_PDF_GENERATION:-false}
- PDF_GENERATOR=${PDF_GENERATOR:-snappdf}
- TRUSTED_PROXIES=${TRUSTED_PROXIES:-*}
- CACHE_DRIVER=${CACHE_DRIVER:-redis}
- QUEUE_CONNECTION=${QUEUE_CONNECTION:-redis}
- SESSION_DRIVER=${SESSION_DRIVER:-redis}
- REDIS_HOST=${REDIS_HOST:-redis}
- REDIS_PASSWORD=${REDIS_PASSWORD:-null}
- REDIS_PORT=${REDIS_PORT:-6379}
- FILESYSTEM_DISK=${FILESYSTEM_DISK:-debian_docker}
- DB_CONNECTION=${DB_CONNECTION:-mysql}
- DB_HOST=${DB_HOST:-mysql}
- DB_PORT=${DB_PORT:-3306}
- DB_DATABASE=${DB_DATABASE:-ninja}
- DB_USERNAME=${DB_USERNAME:-ninja}
- DB_PASSWORD=${DB_PASSWORD:-ChangeThisPassword}
- IN_USER_EMAIL=${IN_USER_EMAIL:-admin@example.com}
- IN_PASSWORD=${IN_PASSWORD:-ChangeThisPassword}
- MAIL_MAILER=${MAIL_MAILER:-log}
- MAIL_HOST=${MAIL_HOST:-smtp.mailtrap.io}
- MAIL_PORT=${MAIL_PORT:-2525}
- MAIL_USERNAME=${MAIL_USERNAME:-null}
- MAIL_PASSWORD=${MAIL_PASSWORD:-null}
- MAIL_ENCRYPTION=${MAIL_ENCRYPTION:-null}
- MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS:-user@example.com}
- MAIL_FROM_NAME=${MAIL_FROM_NAME:-Self Hosted User}
- NORDIGEN_SECRET_ID=${NORDIGEN_SECRET_ID:-}
- NORDIGEN_SECRET_KEY=${NORDIGEN_SECRET_KEY:-}
- IS_DOCKER=${IS_DOCKER:-true}
- SCOUT_DRIVER=${SCOUT_DRIVER:-null}
networks:
- internal
depends_on:
- mysql
- redis
nginx:
image: ${NGINX_IMAGE:-nginx:alpine}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/invoiceninja/nginx:/etc/nginx/conf.d:ro
- ${VOL_PATH:-/data}/invoiceninja/public:/var/www/html/public:ro
- ${VOL_PATH:-/data}/invoiceninja/storage:/var/www/html/storage:ro
ports:
- "${INVOICENINJA_PORT:-8000}:80"
networks:
- proxy
- internal
depends_on:
- app
networks:
proxy:
external: true
internal: