name: mediacms-dev
services:
  migrations:
    platform: linux/amd64
    build:
      context: ..
      dockerfile: Dockerfile
      args:
        - DEVELOPMENT_MODE=True
    image: mediacms/mediacms:latest
    volumes:
      - ../:/home/mediacms.io/mediacms/
    command: "/home/mediacms.io/mediacms/deploy/docker/prestart.sh"
    environment:
      DEVELOPMENT_MODE: True
      ENABLE_UWSGI: 'no'
      ENABLE_NGINX: 'no'
      ENABLE_CELERY_SHORT: 'no'
      ENABLE_CELERY_LONG: 'no'
      ENABLE_CELERY_BEAT: 'no'
      ADMIN_USER: 'admin'
      ADMIN_EMAIL: 'admin@localhost'
      ADMIN_PASSWORD: 'admin'
    restart: on-failure
    depends_on:
      redis:
        condition: service_healthy
      db:
        condition: service_healthy
  frontend:
    image: node:20
    user: "root"
    volumes:
      - ${PWD}/frontend:/home/mediacms.io/mediacms/frontend/
      - frontend_node_modules:/home/mediacms.io/mediacms/frontend/node_modules
      - scripts_node_modules:/home/mediacms.io/mediacms/frontend/packages/scripts/node_modules
      - npm_cache:/home/node/.npm
    working_dir: /home/mediacms.io/mediacms/frontend/
    command: >
      bash -c "
      echo 'Checking dependencies...' &&
      if [ ! -f node_modules/.install-complete ]; then
        echo 'First-time setup or dependencies changed, installing...' &&
        npm install --legacy-peer-deps --cache /home/node/.npm &&
        cd packages/scripts &&
        npm install --legacy-peer-deps --cache /home/node/.npm &&
        npm run build &&
        cd ../.. &&
        touch node_modules/.install-complete &&
        echo 'Dependencies installed successfully'
      else
        echo 'Dependencies already installed, skipping installation...' &&
        if [ ! -d packages/scripts/dist ]; then
          echo 'Building scripts package...' &&
          cd packages/scripts &&
          npm run build &&
          cd ../..
        fi
      fi &&
      echo 'Starting development server...' &&
      npm run start
      "
    env_file:
      - ${PWD}/frontend/.env
    ports:
      - "8088:8088"
    depends_on:
      - web
    restart: unless-stopped
  web:
    platform: linux/amd64
    image: mediacms/mediacms:latest
    command: "python manage.py runserver 0.0.0.0:80"
    environment:
      DEVELOPMENT_MODE: True
    ports:
      - "80:80"
    volumes:
      - ../:/home/mediacms.io/mediacms/
    depends_on:
      - migrations
  db:
    image: postgres:17.2-alpine
    volumes:
      - ../postgres_data:/var/lib/postgresql/data/
    restart: always
    environment:
      POSTGRES_USER: mediacms
      POSTGRES_PASSWORD: mediacms
      POSTGRES_DB: mediacms
      TZ: Europe/London
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}", "--host=db", "--dbname=$POSTGRES_DB", "--username=$POSTGRES_USER"]
      interval: 10s
      timeout: 5s
      retries: 5
  redis:
    image: "redis:alpine"
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3
  celery_worker:
    platform: linux/amd64
    image: mediacms/mediacms:latest
    deploy:
      replicas: 1
    volumes:
      - ../:/home/mediacms.io/mediacms/
    environment:
      ENABLE_UWSGI: 'no'
      ENABLE_NGINX: 'no'
      ENABLE_CELERY_BEAT: 'no'
      ENABLE_MIGRATIONS: 'no'
      DEVELOPMENT_MODE: True
    depends_on:
      - web

volumes:
  frontend_node_modules:
  scripts_node_modules:
  npm_cache:
