version: "3.8"

services:
  db:
    image: postgres:12-alpine
    restart: always
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: plane
      POSTGRES_DB: plane
      POSTGRES_PASSWORD: plane
    command: postgres -c 'max_connections=1000'
    ports:
      - "5432:5432"

  redis:
    image: redis:6.2.7-alpine
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - redisdata:/data

  plane-web:
    image: plane-web
    container_name: plane-frontend
    build:
      context: .
      dockerfile: ./apps/app/Dockerfile.web
    restart: always
    environment:
      NEXT_PUBLIC_GITHUB_ID: $NEXT_PUBLIC_GITHUB_ID
      NEXT_PUBLIC_GOOGLE_CLIENTID: $NEXT_PUBLIC_GOOGLE_CLIENTID
      NEXT_PUBLIC_API_BASE_URL: $NEXT_PUBLIC_API_BASE_URL
    ports:
      - 3000:3000


  plane-api:
    image: plane-api
    container_name: plane-backend
    build:
      context: ./apiserver
      dockerfile: Dockerfile.api
    restart: always
    ports:
      - 8000:8000
    environment:
      SENTRY_DSN: $SENTRY_DSN
      WEB_URL: $WEB_URL
      PGUSER: plane
      PGPASSWORD: plane
      PGHOST: db
      REDIS_URL: 'redis://redis:6379/'
      REDIS_HOST: redis
      REDIS_PORT: 6379
      SECRET_KEY: $SECRET_KEY
      AWS_REGION: $AWS_REGION
      AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
      AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
      AWS_S3_BUCKET_NAME: $AWS_S3_BUCKET_NAME
      EMAIL_HOST: $EMAIL_HOST
      EMAIL_HOST_USER: $EMAIL_HOST_USER
      EMAIL_HOST_PASSWORD: $EMAIL_HOST_PASSWORD

    depends_on:
      - db
      - redis
    command: ./bin/takeoff
    links:
      - db:db
      - redis:redis

  plane-worker:
    image: plane-api
    container_name: plane-rqworker
    depends_on:
        - redis
        - db
        - plane-api
    command: ./bin/worker
    links:
        - redis:redis
        - db:db
    environment:
      SENTRY_DSN: $SENTRY_DSN
      WEB_URL: $WEB_URL
      PGUSER: plane
      PGPASSWORD: plane
      PGHOST: db
      REDIS_URL: 'redis://redis:6379/'
      REDIS_HOST: redis
      REDIS_PORT: 6379
      SECRET_KEY: $SECRET_KEY
      AWS_REGION: $AWS_REGION
      AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
      AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
      AWS_S3_BUCKET_NAME: $AWS_S3_BUCKET_NAME
      EMAIL_HOST: $EMAIL_HOST
      EMAIL_HOST_USER: $EMAIL_HOST_USER
      EMAIL_HOST_PASSWORD: $EMAIL_HOST_PASSWORD


volumes:
  pgdata:
  redisdata: