--- name: tracker-tracker # ╔══════════════════════════════════════════════════════════╗ # ║ ║ # ║ Tracker Tracker ║ # ║ ║ # ╚══════════════════════════════════════════════════════════╝ # # Documentation: https://github.com/jordanlambrecht/tracker-tracker services: tracker-tracker-app: image: ghcr.io/jordanlambrecht/tracker-tracker:latest restart: unless-stopped container_name: tracker-tracker-app ports: - "${PORT:-3000}:3000" # Smokey the Bear says: "Remember friends, you don't need to expose your port if it sits behind a reverse proxy!" environment: POSTGRES_HOST: tracker-tracker-db # POSTGRES_PORT: ${POSTGRES_PORT} uncomment if you change the default port in the db service POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} SESSION_SECRET: ${SESSION_SECRET} TZ: ${TZ} # LOG_LEVEL: ${LOG_LEVEL} # optional, defaults to 'info' # LOG_FILE: /data/logs/tracker-tracker.log # optional BASE_URL: ${BASE_URL:-} # optional, i.e https://trackertracker.example.com # SECURE_COOKIES: ${SECURE_COOKIES:-} # set to 'true' if serving over HTTPS volumes: - ./data:/data depends_on: tracker-tracker-db: condition: service_healthy tracker-tracker-db: image: postgres:18-alpine restart: unless-stopped container_name: tracker-tracker-db environment: POSTGRES_DB: tracker_tracker POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # POSTGRES_PORT: ${POSTGRES_PORT} uncomment if you want to customize volumes: - pgdata:/var/lib/postgresql # Don't ever put a database on a network drive - ./postgres/postgresql.conf:/etc/postgresql/postgresql.conf:ro # Needed for loading fancy PG18-specific optimizations command: ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"] # ^Same healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"] interval: 5s timeout: 3s retries: 5 volumes: pgdata: