21b48d3d53
- iStore service (port 3021): fetches app manifests from git.falahos.my/falahos org via Gitea API, 5-min cache, query/search support - UmmahID login: replaced stub form with Casdoor OAuth2 PKCE flow (RFC 7636), no client secret required; /api/auth/config and /api/auth/token endpoints added to server.cjs - App Manager service (port 3022): installs/uninstalls Docker apps via /var/run/docker.sock, pulls images, starts containers on falah-net, persists state to /data/installed.json - docker-compose.yml: orchestrates falah-app + istore + app-manager with health checks, named volumes, and shared falah-net network - install.sh: one-line curl installer — checks prereqs, clones repo, prompts for credentials, builds and starts all containers - .env.example: all env vars documented (CASDOOR_CLIENT_ID, GITEA_TOKEN, APP_MANAGER_PORT, etc.) - Frontend: IStore overlay now fetches live apps from Gitea, real install/uninstall via App Manager with 2s polling, indeterminate progress bar, Uninstall button for installed apps - app.yml.example: developer manifest spec for publishing to iStore
91 lines
2.4 KiB
YAML
91 lines
2.4 KiB
YAML
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
|