95 lines
3.4 KiB
YAML
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
|