# Local PostgreSQL 18 for MikrotikManager (dev / ETL dry-run). # copy env.postgres.example → deploy/.env.postgres # docker compose -f deploy/docker-compose.postgres.yml --env-file deploy/.env.postgres up -d services: postgres: image: ${POSTGRES_IMAGE_TAG:-postgres:18-alpine} container_name: mmapp-postgres restart: unless-stopped shm_size: "256mb" environment: POSTGRES_USER: mmapp POSTGRES_DB: mmapp POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env} POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C.UTF-8 --data-checksums" TZ: UTC PGTZ: UTC command: - postgres - -c - timezone=UTC - -c - listen_addresses=* - -c - max_connections=100 - -c - shared_buffers=256MB - -c - work_mem=16MB - -c - maintenance_work_mem=128MB - -c - wal_compression=on volumes: - mmapp-pgdata:/var/lib/postgresql/data ports: - "127.0.0.1:${POSTGRES_PORT:-5432}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U mmapp -d mmapp"] interval: 5s timeout: 5s retries: 10 logging: driver: json-file options: max-size: "10m" max-file: "3" volumes: mmapp-pgdata: