d8558eca89
Introduce timetracker/config.py with a single config() helper that resolves settings from a fixed priority chain: NAME__FILE (opt-in secret) -> env var -> .env -> settings.ini -> in-code default. Supports type casting (bool/list/int/Path), file-based secrets with .strip(), and required_in_prod validation. Migrate settings.py off the previous ad-hoc idioms: - DEBUG via config() (PROD kept as deprecated alias) - SECRET_KEY required in prod, supports SECRET_KEY__FILE - APP_URL derives ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS (kept separate, each independently overridable); ALLOWED_HOSTS is now configurable - TZ and DATA_DIR via config() Fix DATA_DIR inconsistency: entrypoint.sh now reads DATA_DIR (was hardcoded) so the bash bootstrap and Django agree on the database directory. Document the container/entrypoint-only flags (PUID/PGID/ CREATE_DEFAULT_SUPERUSER/STAGING/LOAD_SAMPLE_DATA) as bash concerns. Update deployment configs to set APP_URL (and DEBUG), add docs/configuration.md, settings.ini.example, regrouped .env.example, CLAUDE.md, and tests. https://claude.ai/code/session_01FFn8BiGrQpEJarC8xGse8s
25 lines
814 B
YAML
25 lines
814 B
YAML
---
|
|
services:
|
|
timetracker:
|
|
image: ${REGISTRY_URL:-registry.kucharczyk.xyz}/timetracker:1.7.0
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: timetracker
|
|
environment:
|
|
- DEBUG=false
|
|
- TZ=${TZ:-Europe/Prague}
|
|
# APP_URL drives ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS unless overridden.
|
|
- APP_URL=https://tracker.kucharczyk.xyz
|
|
- PUID=${PUID:-1000}
|
|
- PGID=${PGID:-100}
|
|
- DATA_DIR=${DATA_DIR:-/home/timetracker/app/data}
|
|
- CREATE_DEFAULT_SUPERUSER=${CREATE_DEFAULT_SUPERUSER:-false}
|
|
ports:
|
|
- "${TIMETRACKER_EXTERNAL_PORT:-8000}:8000"
|
|
volumes:
|
|
- "./data:/home/timetracker/app/data"
|
|
- "${DOCKER_STORAGE_PATH:-/tmp}/timetracker/backups:/home/timetracker/app/games/fixtures/backups"
|
|
restart: unless-stopped
|
|
|