

services:
    

    haraka:
        extends:
            file: ./docker-compose.base.yml
            service: haraka
        build:
            network: host
            context: .
            dockerfile: ./Haraka/Dockerfile

    redis:
        ports: 
            - '6310:6379'
        extends:
            file: ./docker-compose.base.yml
            service: redis

    clickhouse:
        ports: 
            - '9034:9000'
            - '8189:8123'
        extends:
            file: ./docker-compose.base.yml
            service: clickhouse

    postgres:
        ports: 
            - '5400:5432'
        extends:
            file: ./docker-compose.base.yml
            service: postgres


    otel-collector:
        extends:
            file: ./docker-compose.base.yml
            service: otel-collector
        build:
            network: host
            context: .
            dockerfile: ./OTelCollector/Dockerfile

    accounts:
        ports: 
            - '${ACCOUNTS_PORT}:${ACCOUNTS_PORT}' # ws port for webpack
        extends:
            file: ./docker-compose.base.yml
            service: accounts
        volumes:
            - ./Accounts:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/dev-env
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        build:
            network: host
            context: .
            dockerfile: ./Accounts/Dockerfile
       

    dashboard:
        ports: 
            - '${DASHBOARD_PORT}:${DASHBOARD_PORT}' # ws port for webpack
        extends:
            file: ./docker-compose.base.yml
            service: dashboard
        volumes:
            - ./Dashboard:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/dev-env
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        build:
            network: host
            context: .
            dockerfile: ./Dashboard/Dockerfile
        
    

    admin-dashboard:
        ports: 
            - '${ADMIN_DASHBOARD_PORT}:${ADMIN_DASHBOARD_PORT}' # ws port for webpack
        extends:
            file: ./docker-compose.base.yml
            service: admin-dashboard
        volumes:
            - ./AdminDashboard:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/dev-env
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        build:
            network: host
            context: .
            dockerfile: ./AdminDashboard/Dockerfile


    status-page:
        ports: 
            - '${STATUS_PAGE_PORT}:${STATUS_PAGE_PORT}' # ws port for webpack
        extends:
            file: ./docker-compose.base.yml
            service: status-page
        volumes:
            - ./StatusPage:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/dev-env
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        build:
            network: host
            context: .
            dockerfile: ./StatusPage/Dockerfile
            
    
    test-server:
        volumes:
            - ./TestServer:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        extends:
            file: ./docker-compose.base.yml
            service: test-server
        ports:
            - '9141:9229' # Debugging port.
            - '3800:3800'
        build:
            network: host
            context: .
            dockerfile: ./TestServer/Dockerfile


    app:
        volumes:
            - ./App:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        extends:
            file: ./docker-compose.base.yml
            service: app
        ports:
            - '9232:9229' # Debugging port.
        build:
            network: host
            context: .
            dockerfile: ./App/Dockerfile
        

    probe-1: 
        volumes:
            - ./Probe:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/  
        extends:
            file: ./docker-compose.base.yml
            service: probe-1
        ports:
          - '9655:9229' # Debugging port.
        build:
            network: host
            context: .
            dockerfile: ./Probe/Dockerfile

    probe-2: 
        volumes:
            - ./Probe:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/  
        extends:
            file: ./docker-compose.base.yml
            service: probe-2
        ports:
          - '9656:9229' # Debugging port.
        build:
            network: host
            context: .
            dockerfile: ./Probe/Dockerfile

    isolated-vm:
        volumes:
            - ./IsolatedVM:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        ports:
          - '9974:9229' # Debugging port.
        extends:
            file: ./docker-compose.base.yml
            service: isolated-vm
        build:
            network: host
            context: .
            dockerfile: ./IsolatedVM/Dockerfile
    
    ingestor:
        volumes:
            - ./Ingestor:/usr/src/app
            # Use node modules of the container and not host system.
            # https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder
            - /usr/src/app/node_modules/
            - ./Common:/usr/src/Common
            - ./Model:/usr/src/Model
            - ./CommonServer:/usr/src/CommonServer
            - ./CommonUI:/usr/src/CommonUI
            - /usr/src/Common/node_modules/
            - /usr/src/CommonUI/node_modules/
            - /usr/src/CommonServer/node_modules/
            - /usr/src/Model/node_modules/
        ports:
          - '9932:9229' # Debugging port.
        extends:
            file: ./docker-compose.base.yml
            service: ingestor
        build:
            network: host
            context: .
            dockerfile: ./Ingestor/Dockerfile


    # Fluentd. Required only for development. In  production its the responsibility of the customer to run fluentd and pipe logs to OneUptime.
    # We run this container just for development, to see if logs are piped. 

    fluentd:
        ports:
            - 24224:24224
            - 24224:24224/udp
        user: fluent
        extends:
            file: ./docker-compose.base.yml
            service: fluentd
        volumes:
            - ./Fluentd/fluent.conf:/fluentd/etc/fluent.conf
        build:
            network: host
            context: ./Fluentd
            dockerfile: ./Dockerfile

    ingress:
        build:
            network: host
            context: .
            dockerfile: ./Nginx/Dockerfile
        extends:
            file: ./docker-compose.base.yml
            service: ingress

    # e2e tests
    e2e:
        extends:
            file: ./docker-compose.base.yml
            service: e2e
        volumes:
            - ./E2E/playwright-report:/usr/src/app/playwright-report
            - ./E2E/test-results:/usr/src/app/test-results
        build:
            network: host
            context: .
            dockerfile: ./E2E/Dockerfile

volumes:
    postgres:
    clickhouse:
    
networks:
  oneuptime: 
    driver: bridge