version: '3.7'

services:
  postgresd:
    image: postgres:14.2
    container_name: paralus_postgres_14
    ports:
      - "$DB_PORT:$DB_PORT"
    volumes:
      - paralus_db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: $DB_USER
      POSTGRES_DB: $DB_NAME
      POSTGRES_PASSWORD: $DB_PASSWORD

  kratos-migrate:
    image: oryd/kratos:v0.11.0
    environment:
      - DSN=postgres://$DB_USER:$DB_PASSWORD@postgresd:$DB_PORT/$DB_NAME?sslmode=disable&max_conns=20&max_idle_conns=4
    volumes:
      - type: bind
        source: ./_kratos
        target: /etc/config/kratos
    command: -c /etc/config/kratos/kratos.yml migrate sql -e --yes
    restart: on-failure

  migrate-admindb:
    depends_on:
      kratos-migrate:
        condition: service_completed_successfully
    image: migrate/migrate:v4.15.1
    restart: on-failure
    command: -path=/migrations/admindb -database postgres://$DB_USER:$DB_PASSWORD@postgresd:$DB_PORT/$DB_NAME?sslmode=disable up
    volumes:
      - type: bind
        source: ./persistence/migrations/admindb
        target: /migrations/admindb

  kratos:
    depends_on:
      - kratos-migrate
    image: oryd/kratos:v0.11.0
    ports:
      - '4433:4433' # public
      - '4434:4434' # admin
    environment:
      - DSN=postgres://$DB_USER:$DB_PASSWORD@postgresd:$DB_PORT/$DB_NAME?sslmode=disable&max_conns=20&max_idle_conns=4
      - LOG_LEVEL=trace
    command: serve -c /etc/config/kratos/kratos.yml --dev --watch-courier
    volumes:
      - type: bind
        source: ./_kratos
        target: /etc/config/kratos

  mailslurper:
    image: oryd/mailslurper:latest-smtps
    ports:
      - '4436:4436'
      - '4437:4437'

volumes:
  paralus_db_data:
