version: '3'
volumes:
  postgres_data: {}
  opensearch_data: {}
  app_cargo_data: {}
  app_build_data: {}
  app_deps_data: {}
  app_native_data: {}

services:
  app:
    build:
      context: .
      dockerfile: ./docker/app/Dockerfile
    environment:
      - MIX_ENV=dev
      - PGPASSWORD=postgres
      - ANONYMOUS_NAME_SALT=2fmJRo0OgMFe65kyAJBxPT0QtkVes/jnKDdtP21fexsRqiw8TlSY7yO+uFyMZycp
      - HCAPTCHA_SECRET_KEY=0x0000000000000000000000000000000000000000
      - HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001
      - PASSWORD_PEPPER=dn2e0EpZrvBLoxUM3gfQveBhjf0bG/6/bYhrOyq3L3hV9hdo/bimJ+irbDWsuXLP
      - TUMBLR_API_KEY=fuiKNFp9vQFvjLNvx4sUwti4Yb5yGutBN4Xh10LXZhhRKjWlV4
      - OTP_SECRET_KEY=Wn7O/8DD+qxL0X4X7bvT90wOkVGcA90bIHww4twR03Ci//zq7PnMw8ypqyyT/b/C
      - ADVERT_FILE_ROOT=adverts
      - AVATAR_FILE_ROOT=avatars
      - BADGE_FILE_ROOT=badges
      - IMAGE_FILE_ROOT=images
      - TAG_FILE_ROOT=tags
      - AVATAR_URL_ROOT=/avatars
      - ADVERT_URL_ROOT=/spns
      - IMAGE_URL_ROOT=/img
      - BADGE_URL_ROOT=/badge-img
      - TAG_URL_ROOT=/tag-img
      - OPENSEARCH_URL=http://opensearch:9200
      - REDIS_HOST=valkey
      - DATABASE_URL=ecto://postgres:postgres@postgres/philomena_dev
      - CDN_HOST=localhost
      - MAILER_ADDRESS=noreply@philomena.local
      - START_ENDPOINT=true
      - SITE_DOMAINS=localhost
      - S3_SCHEME=http
      - S3_HOST=files
      - S3_PORT=80
      - S3_BUCKET=philomena
      - AWS_ACCESS_KEY_ID=local-identity
      - AWS_SECRET_ACCESS_KEY=local-credential
    working_dir: /srv/philomena
    tty: true
    volumes:
      - .:/srv/philomena
      - app_cargo_data:/srv/philomena/.cargo
      - app_build_data:/srv/philomena/_build
      - app_deps_data:/srv/philomena/deps
      - app_native_data:/srv/philomena/priv/native
    depends_on:
      - postgres
      - opensearch
      - valkey
    ports:
      - '5173:5173'

  postgres:
    image: postgres:16.3-alpine
    environment:
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    logging:
      driver: "none"

  opensearch:
    image: opensearchproject/opensearch:2.14.0
    volumes:
      - opensearch_data:/usr/share/opensearch/data
      - ./docker/opensearch/opensearch.yml:/usr/share/opensearch/config/opensearch.yml
    logging:
      driver: "none"
    ulimits:
      nofile:
        soft: 65536
        hard: 65536

  valkey:
    image: valkey/valkey:7.2.5-alpine
    logging:
      driver: "none"

  files:
    image: andrewgaul/s3proxy:sha-4175022
    environment:
      - JCLOUDS_FILESYSTEM_BASEDIR=/srv/philomena/priv/s3
    volumes:
      - .:/srv/philomena

  web:
    build:
      context: .
      dockerfile: ./docker/web/Dockerfile
      args:
        - APP_DIR=/srv/philomena
        - S3_SCHEME=http
        - S3_HOST=files
        - S3_PORT=80
        - S3_BUCKET=philomena
    volumes:
      - .:/srv/philomena
    environment:
      - AWS_ACCESS_KEY_ID=local-identity
      - AWS_SECRET_ACCESS_KEY=local-credential
    logging:
      driver: "none"
    depends_on:
      - app
    ports:
      - '8080:80'