services: # ── Falah OS CE — frontend + auth proxy ────────────────────────────────── falah-app: build: context: . dockerfile: Dockerfile container_name: falah-app restart: unless-stopped ports: - "${CE_PORT:-3005}:3000" environment: NODE_ENV: production CASDOOR_ENDPOINT: ${CASDOOR_ENDPOINT:-https://auth.falahos.my} CASDOOR_CLIENT_ID: ${CASDOOR_CLIENT_ID} depends_on: istore: condition: service_healthy networks: - falah-net labels: falah.service: "falah-app" falah.version: "1.3.0" # ── iStore — Gitea-backed app registry ─────────────────────────────────── istore: build: context: ./services/istore dockerfile: Dockerfile container_name: falah-istore restart: unless-stopped ports: - "${ISTORE_PORT:-3021}:3021" environment: NODE_ENV: production PORT: 3021 GITEA_TOKEN: ${GITEA_TOKEN:-} healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3021/health"] interval: 30s timeout: 5s retries: 3 start_period: 10s networks: - falah-net labels: falah.service: "istore" falah.version: "1.0.0" # ── App Manager — install/uninstall Docker apps ────────────────────────── app-manager: build: context: ./services/app-manager dockerfile: Dockerfile container_name: falah-app-manager restart: unless-stopped ports: - "${APP_MANAGER_PORT:-3022}:3022" environment: NODE_ENV: production PORT: 3022 ISTORE_URL: http://istore:3021 DOCKER_NETWORK: falah-net DATA_DIR: /data volumes: - app-manager-data:/data - /var/run/docker.sock:/var/run/docker.sock:ro depends_on: istore: condition: service_healthy healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3022/health"] interval: 30s timeout: 5s retries: 3 start_period: 10s networks: - falah-net labels: falah.service: "app-manager" falah.version: "1.0.0" volumes: app-manager-data: name: falah-app-manager-data networks: falah-net: driver: bridge name: falah-net