version: "3.8"

services:
  nginx:
    container_name: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    depends_on:
      - plane-web
      - plane-api
  db:
    image: postgres:15.2-alpine
    container_name: db
    restart: always
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: plane
      POSTGRES_DB: plane
      POSTGRES_PASSWORD: xyzzyspoon
      PGDATA: /var/lib/postgresql/data
    command: postgres -c 'max_connections=1000'
    ports:
      - 5432:5432
  redis:
    image: redis:6.2.7-alpine
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - redisdata:/data
  plane-web:
    container_name: planefrontend
    build:
      context: .
      dockerfile: ./apps/app/Dockerfile.web
      args:
        NEXT_PUBLIC_API_BASE_URL: http://localhost:8000
    command: [ "/usr/local/bin/start.sh" ]
    ports:
      - 3000:3000
    environment:
      NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
      NEXT_PUBLIC_GOOGLE_CLIENTID: "0"
      NEXT_PUBLIC_GITHUB_APP_NAME: "0"
      NEXT_PUBLIC_GITHUB_ID: "0"
      NEXT_PUBLIC_SENTRY_DSN: "0"
      NEXT_PUBLIC_ENABLE_OAUTH: "0"
      NEXT_PUBLIC_ENABLE_SENTRY: "0"
      NEXT_PUBLIC_ENABLE_SESSION_RECORDER: "0"
      NEXT_PUBLIC_TRACK_EVENTS: "0"
  plane-api:
    container_name: planebackend
    build:
      context: ./apiserver
      dockerfile: Dockerfile.api
    restart: always
    ports:
      - 8000:8000
    environment:
      DJANGO_SETTINGS_MODULE: plane.settings.production
      DATABASE_URL: postgres://plane:xyzzyspoon@db:5432/plane
      REDIS_URL: redis://redis:6379/
      EMAIL_HOST: ${EMAIL_HOST}
      EMAIL_HOST_USER: ${EMAIL_HOST_USER}
      EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
      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}
      WEB_URL: localhost/
      GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
      DISABLE_COLLECTSTATIC: 1
      DOCKERIZED: 1
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      GPT_ENGINE: ${GPT_ENGINE}
      SECRET_KEY: ${SECRET_KEY}
    depends_on:
      - db
      - redis
    command: ./bin/takeoff
    links:
      - db:db
      - redis:redis
  plane-worker:
    container_name: planebgworker
    build:
      context: ./apiserver
      dockerfile: Dockerfile.api
    depends_on:
      - redis
      - db
      - plane-api
    command: ./bin/worker
    links:
      - redis:redis
      - db:db
    environment:
      DJANGO_SETTINGS_MODULE: plane.settings.production
      DATABASE_URL: postgres://plane:xyzzyspoon@db:5432/plane
      REDIS_URL: redis://redis:6379/
      EMAIL_HOST: ${EMAIL_HOST}
      EMAIL_HOST_USER: ${EMAIL_HOST_USER}
      EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
      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}
      WEB_URL: localhost/
      GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
      DISABLE_COLLECTSTATIC: 1
      DOCKERIZED: 1
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      GPT_ENGINE: ${GPT_ENGINE}
      SECRET_KEY: ${SECRET_KEY}
volumes:
  pgdata:
  redisdata:
