# Production setup: the app plus PostgreSQL. # cp .env.example .env # set POSTGRES_PASSWORD (and PUBLIC_URL if not localhost) # docker compose up -d # Then open http://localhost:3000 and complete first-run setup. services: db: image: postgres:18-alpine environment: POSTGRES_USER: safetylog POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} POSTGRES_DB: safetylog volumes: - db-data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U safetylog -d safetylog"] interval: 5s retries: 10 restart: unless-stopped app: build: . depends_on: db: condition: service_healthy environment: DATABASE_URL: postgres://safetylog:${POSTGRES_PASSWORD}@db:5432/safetylog PUBLIC_URL: ${PUBLIC_URL:-http://localhost:3000} ports: - "${PORT:-3000}:3000" restart: unless-stopped volumes: db-data: