# EDR Platform — application containers only (no Postgres). # Requires a local .npmrc with GitHub Packages auth for @tria-plc (freight API + freight web). # Copy apps/*/env.example to .env and set real values before `docker compose up`. # # Build: DOCKER_BUILDKIT=1 docker compose build services: freight-api: build: context: . dockerfile: apps/edr-freight-api/Dockerfile ports: - "${FREIGHT_API_PORT:-3001}:${FREIGHT_API_PORT:-3001}" env_file: - apps/edr-freight-api/.env extra_hosts: - "paymentcallback.triaplc.com:10.18.7.179" restart: always gps-tracker: build: context: . dockerfile: apps/edr-gps-tracker/Dockerfile ports: - "${GT06_TCP_PORT:-5023}:5023" environment: GT06_TCP_PORT: "5023" GT06_TCP_HOST: "0.0.0.0" env_file: - apps/edr-gps-tracker/.env restart: always passenger-api: build: context: . dockerfile: apps/edr-passenger-api/Dockerfile ports: - "${PASSENGER_API_PORT:-4000}:${PASSENGER_API_PORT:-4000}" env_file: - apps/edr-passenger-api/.env extra_hosts: - "paymentcallback.triaplc.com:10.18.7.179" restart: always freight-portal: build: context: . dockerfile: infrastructure/docker/Dockerfile.web args: TURBO_FILTER: "@edr/freight-portal" APP_PATH: apps/edr-freight-web/portal VITE_API_URL: ${VITE_API_URL:-} VITE_BASE_API_URL: ${VITE_BASE_API_URL:-} VITE_USER_MANAGEMENT_BASE: ${VITE_USER_MANAGEMENT_BASE:-} VITE_GOOGLE_MAPS_API_KEY: ${VITE_GOOGLE_MAPS_API_KEY:-} VITE_POSTHOG_KEY: ${VITE_POSTHOG_KEY:-} VITE_POSTHOG_HOST: ${VITE_POSTHOG_HOST:-} ports: - "${FREIGHT_PORTAL_PORT:-5173}:80" restart: always freight-backoffice: build: context: . dockerfile: infrastructure/docker/Dockerfile.web args: TURBO_FILTER: "@edr/freight-backoffice" APP_PATH: apps/edr-freight-web/backoffice VITE_API_URL: ${VITE_API_URL:-} VITE_BASE_API_URL: ${VITE_BASE_API_URL:-} VITE_USER_MANAGEMENT_BASE: ${VITE_USER_MANAGEMENT_BASE:-} VITE_GOOGLE_MAPS_API_KEY: ${VITE_GOOGLE_MAPS_API_KEY:-} VITE_POSTHOG_KEY: ${VITE_POSTHOG_KEY:-} VITE_POSTHOG_HOST: ${VITE_POSTHOG_HOST:-} ports: - "${FREIGHT_BACKOFFICE_PORT:-5183}:80" restart: always passenger-portal: build: context: . dockerfile: infrastructure/docker/Dockerfile.passenger-web args: APP_PACKAGE: "@edr/passenger-portal" APP_PATH: apps/edr-passenger-web/portal NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-} ports: - "${PASSENGER_PORTAL_PORT:-5174}:${PASSENGER_PORTAL_PORT:-5174}" env_file: - apps/edr-passenger-web/portal/.env restart: always passenger-backoffice: build: context: . dockerfile: infrastructure/docker/Dockerfile.passenger-web args: APP_PACKAGE: "@edr/passenger-backoffice" APP_PATH: apps/edr-passenger-web/backoffice NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-} ports: - "${PASSENGER_BACKOFFICE_PORT:-5184}:${PASSENGER_BACKOFFICE_PORT:-5184}" env_file: - apps/edr-passenger-web/backoffice/.env restart: always payment-api: build: context: . dockerfile: apps/edr-payment-api/Dockerfile args: APP_PACKAGE: "@edr/payment-api" APP_PATH: apps/edr-payment-api ports: - "${PAYMENT_API_PORT:-3008}:${PAYMENT_API_PORT:-3008}" env_file: - apps/edr-payment-api/.env restart: always # Internal employee chat (freight backoffice). No federation, no public # registration — see infrastructure/matrix/synapse/homeserver.yaml.tmpl. synapse: build: context: infrastructure/matrix/synapse ports: - "${SYNAPSE_PORT:-8008}:8008" env_file: - infrastructure/matrix/synapse/.env volumes: - matrix-data:/data # Local dev: Postgres runs in the separate docker-compose.db.dev.yml # project (different docker network) and is only reachable from here via # the host's published port — see MATRIX_DB_HOST in synapse/.env.example. extra_hosts: - "host.docker.internal:host-gateway" restart: always element-web: build: context: infrastructure/matrix/element ports: - "${ELEMENT_WEB_PORT:-8080}:80" # config.json is rendered at container start, not baked — one image serves # dev, staging and prod. See infrastructure/matrix/element/.env.example. env_file: - infrastructure/matrix/element/.env restart: always volumes: matrix-data: