# /srv/app/production/docker-compose.yml # Secrets: cp .env.production.example .env.production and fill in values # Start: docker compose up -d # Logs UI: https:///logs/ (nginx proxies it; loopback only otherwise) services: db: image: postgres:17-alpine shm_size: 1g user: postgres restart: unless-stopped healthcheck: test: "pg_isready -U ${POSTGRES_USER} --dbname=${POSTGRES_DB}" interval: 10s timeout: 5s retries: 5 # No ports exposed: only reachable inside the Docker network environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_DB: ${POSTGRES_DB} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - db_data:/var/lib/postgresql/data logging: &default-logging driver: json-file options: max-size: "${LOG_MAX_SIZE:-10m}" max-file: "${LOG_MAX_FILE:-3}" valkey: image: valkey/valkey:9.0-alpine restart: unless-stopped # No ports exposed volumes: - valkey_data:/data - ./valkey.conf:/etc/valkey/valkey.conf command: valkey-server /etc/valkey/valkey.conf logging: *default-logging api: image: ghcr.io/${GITHUB_REPOSITORY}:${IMAGE_TAG:-latest} restart: unless-stopped ports: # Only bind on localhost: Nginx proxies to this - "127.0.0.1:3000:3000" env_file: - .env.production depends_on: valkey: condition: service_started db: condition: service_healthy logging: *default-logging # Logs store — UI at http://127.0.0.1:9428/logs/select/vmui/ (loopback only) victorialogs: image: victoriametrics/victoria-logs:${VICTORIALOGS_TAG:-v1.53.0} command: - "-storageDataPath=/vlogs" - "-http.pathPrefix=/logs" - "-retentionPeriod=${VICTORIALOGS_RETENTION:-14d}" - "-retention.maxDiskSpaceUsageBytes=${VICTORIALOGS_MAX_DISK:-2GiB}" volumes: - vlogs_data:/vlogs ports: - "127.0.0.1:${VICTORIALOGS_PORT:-9428}:9428" restart: unless-stopped logging: *default-logging # Reads container logs through the Docker API and ships them to VictoriaLogs # `docker compose logs` keeps working: this does not replace the log driver vector: image: timberio/vector:${VECTOR_TAG:-0.59.X-distroless-libc} user: root volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./vector.yaml:/etc/vector/vector.yaml:ro depends_on: - victorialogs restart: unless-stopped logging: *default-logging volumes: db_data: valkey_data: vlogs_data: