Files
kleiax 904d14b64c
CI / test (push) Canceled after 0s
Initial commit
2026-09-12 22:22:17 +02:00

95 lines
3.4 KiB
YAML

services:
postgres:
image: docker.io/library/postgres:16-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "${POSTGRES_PORT:-5432}:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 2s
timeout: 5s
retries: 15
volumes:
- gardomatic-postgres-data:/var/lib/postgresql/data
migrate:
image: docker.io/migrate/migrate:v4.19.1
command:
- -path=/migrations
- -database=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable
- up
depends_on:
postgres:
condition: service_healthy
volumes:
- ./internal/storage/postgres/migrations:/migrations:ro
restart: "no"
api:
build:
context: .
target: api
environment:
GARDOMATIC_API_PORT: 4000
GARDOMATIC_DB_DSN: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable
GARDOMATIC_DB_MAX_OPEN_CONNS: ${GARDOMATIC_DB_MAX_OPEN_CONNS:-25}
GARDOMATIC_DB_MAX_IDLE_CONNS: ${GARDOMATIC_DB_MAX_IDLE_CONNS:-25}
GARDOMATIC_DB_MAX_IDLE_TIME: ${GARDOMATIC_DB_MAX_IDLE_TIME:-15m}
GARDOMATIC_ENV: ${GARDOMATIC_ENV:-development}
GARDOMATIC_WEB_BASE_URL: ${GARDOMATIC_WEB_BASE_URL:-http://localhost:4040}
GARDOMATIC_SESSION_COOKIE_NAME: ${GARDOMATIC_SESSION_COOKIE_NAME:-gardomatic_session}
GARDOMATIC_SESSION_LIFETIME: ${GARDOMATIC_SESSION_LIFETIME:-12h}
GARDOMATIC_SESSION_IDLE_TIMEOUT: ${GARDOMATIC_SESSION_IDLE_TIMEOUT:-30m}
GARDOMATIC_COOKIE_SECURE: ${GARDOMATIC_COOKIE_SECURE:-false}
GARDOMATIC_RATE_LIMIT_ENABLED: ${GARDOMATIC_RATE_LIMIT_ENABLED:-true}
GARDOMATIC_RATE_LIMIT_RPS: ${GARDOMATIC_RATE_LIMIT_RPS:-10}
GARDOMATIC_RATE_LIMIT_BURST: ${GARDOMATIC_RATE_LIMIT_BURST:-40}
GARDOMATIC_CORS_TRUSTED_ORIGINS: ${GARDOMATIC_CORS_TRUSTED_ORIGINS:-http://localhost:4040}
GARDOMATIC_SMTP_MODE: ${GARDOMATIC_SMTP_MODE:-file}
GARDOMATIC_SMTP_HOST: ${GARDOMATIC_SMTP_HOST:-}
GARDOMATIC_SMTP_PORT: ${GARDOMATIC_SMTP_PORT:-25}
GARDOMATIC_SMTP_USERNAME: ${GARDOMATIC_SMTP_USERNAME:-}
GARDOMATIC_SMTP_PASSWORD: ${GARDOMATIC_SMTP_PASSWORD:-}
GARDOMATIC_SMTP_SENDER: ${GARDOMATIC_SMTP_SENDER:-gardomatic@localhost}
GARDOMATIC_SMTP_FILE_PATH: ${GARDOMATIC_SMTP_FILE_PATH:-/tmp/gardomatic-mails.log}
ports:
- "${API_PORT:-4000}:4000"
depends_on:
migrate:
condition: service_completed_successfully
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:4000/v1/healthcheck"]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
web:
build:
context: .
target: web
environment:
GARDOMATIC_API_BASE_URL: http://api:4000
GARDOMATIC_ENV: ${GARDOMATIC_ENV:-development}
GARDOMATIC_WEB_PORT: 4040
GARDOMATIC_SESSION_COOKIE_NAME: ${GARDOMATIC_SESSION_COOKIE_NAME:-gardomatic_session}
GARDOMATIC_COOKIE_SECURE: ${GARDOMATIC_COOKIE_SECURE:-false}
ports:
- "${WEB_PORT:-4040}:4040"
depends_on:
api:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:4040/ping"]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
volumes:
gardomatic-postgres-data:
driver: local