# Archipelago Demo Stack - Mock backend + Vue UI + AIUI Chat # Deploy via Portainer: Web editor -> paste this, or deploy from repo # Access at http://localhost:4848 (or your host:4848) # # Required: Set ANTHROPIC_API_KEY in environment or .env file for chat to work # Optional: Chat will show fallback message if no key is set services: neode-backend: build: context: . dockerfile: neode-ui/Dockerfile.backend container_name: archy-demo-backend environment: VITE_DEV_MODE: "existing" # Skip setup/onboarding, go straight to login ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} NODE_OPTIONS: "--dns-result-order=ipv4first" expose: - "5959" dns: - 8.8.8.8 - 1.1.1.1 restart: unless-stopped healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:5959/health"] interval: 30s timeout: 10s retries: 3 neode-web: build: context: . dockerfile: neode-ui/Dockerfile.web container_name: archy-demo-web ports: - "4848:80" depends_on: - neode-backend restart: unless-stopped # ══════════════════════════════════════════════════════════════ # IndeedHub Stack — Decentralized media streaming platform # ══════════════════════════════════════════════════════════════ indeedhub: build: context: ../Indeedhub Prototype dockerfile: Dockerfile args: CACHEBUST: "33" VITE_USE_MOCK_DATA: "false" VITE_CONTENT_ORIGIN: ${FRONTEND_URL:-http://localhost:7777} VITE_INDEEHUB_API_URL: /api VITE_INDEEHUB_CDN_URL: /storage VITE_NOSTR_RELAYS: "" container_name: indeedhub ports: - "7777:7777" depends_on: - indeedhub-relay - indeedhub-api networks: - indeedhub-network restart: unless-stopped indeedhub-api: build: context: ../Indeedhub Prototype/backend dockerfile: Dockerfile args: CACHEBUST: "14" container_name: indeedhub-api environment: ENVIRONMENT: production PORT: 4000 DOMAIN: ${DOMAIN:-localhost} FRONTEND_URL: ${FRONTEND_URL:-http://localhost:7777} DATABASE_HOST: indeedhub-postgres DATABASE_PORT: 5432 DATABASE_USER: ${IH_POSTGRES_USER:-indeedhub} DATABASE_PASSWORD: ${IH_POSTGRES_PASSWORD:-indeedhub} DATABASE_NAME: ${IH_POSTGRES_DB:-indeedhub} QUEUE_HOST: indeedhub-redis QUEUE_PORT: 6379 S3_ENDPOINT: http://indeedhub-minio:9000 AWS_REGION: us-east-1 AWS_ACCESS_KEY: ${IH_MINIO_USER:-minioadmin} AWS_SECRET_KEY: ${IH_MINIO_PASSWORD:-minioadmin} S3_PRIVATE_BUCKET_NAME: indeedhub-private S3_PUBLIC_BUCKET_NAME: indeedhub-public S3_PUBLIC_BUCKET_URL: ${IH_S3_PUBLIC_URL:-http://localhost:9000/indeedhub-public} NOSTR_JWT_SECRET: ${IH_JWT_SECRET:-demo-jwt-secret-change-in-production} NOSTR_JWT_EXPIRES_IN: 7d AES_MASTER_SECRET: ${IH_AES_SECRET:-demo-aes-secret-change-in-production} depends_on: indeedhub-postgres: condition: service_healthy indeedhub-redis: condition: service_started indeedhub-minio: condition: service_started networks: - indeedhub-network restart: unless-stopped healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4000/nostr-auth/health"] interval: 30s timeout: 10s retries: 5 start_period: 60s indeedhub-postgres: image: postgres:16-alpine container_name: indeedhub-postgres environment: POSTGRES_USER: ${IH_POSTGRES_USER:-indeedhub} POSTGRES_PASSWORD: ${IH_POSTGRES_PASSWORD:-indeedhub} POSTGRES_DB: ${IH_POSTGRES_DB:-indeedhub} volumes: - indeedhub-postgres-data:/var/lib/postgresql/data networks: - indeedhub-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U indeedhub"] interval: 10s timeout: 5s retries: 5 start_period: 30s indeedhub-redis: image: redis:7-alpine container_name: indeedhub-redis command: redis-server --appendonly yes volumes: - indeedhub-redis-data:/data networks: - indeedhub-network restart: unless-stopped indeedhub-minio: image: minio/minio:latest container_name: indeedhub-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${IH_MINIO_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${IH_MINIO_PASSWORD:-minioadmin} volumes: - indeedhub-minio-data:/data networks: - indeedhub-network restart: unless-stopped indeedhub-minio-init: image: minio/mc:latest container_name: indeedhub-minio-init depends_on: - indeedhub-minio entrypoint: > /bin/sh -c " sleep 5; mc alias set local http://indeedhub-minio:9000 $${IH_MINIO_USER:-minioadmin} $${IH_MINIO_PASSWORD:-minioadmin}; mc mb local/indeedhub-private --ignore-existing; mc mb local/indeedhub-public --ignore-existing; mc anonymous set download local/indeedhub-public; echo 'MinIO buckets initialized'; " networks: - indeedhub-network restart: "no" indeedhub-ffmpeg-worker: build: context: ../Indeedhub Prototype/backend dockerfile: Dockerfile.ffmpeg args: CACHEBUST: "14" container_name: indeedhub-ffmpeg-worker environment: ENVIRONMENT: production DATABASE_HOST: indeedhub-postgres DATABASE_PORT: 5432 DATABASE_USER: ${IH_POSTGRES_USER:-indeedhub} DATABASE_PASSWORD: ${IH_POSTGRES_PASSWORD:-indeedhub} DATABASE_NAME: ${IH_POSTGRES_DB:-indeedhub} QUEUE_HOST: indeedhub-redis QUEUE_PORT: 6379 S3_ENDPOINT: http://indeedhub-minio:9000 AWS_REGION: us-east-1 AWS_ACCESS_KEY: ${IH_MINIO_USER:-minioadmin} AWS_SECRET_KEY: ${IH_MINIO_PASSWORD:-minioadmin} S3_PRIVATE_BUCKET_NAME: indeedhub-private S3_PUBLIC_BUCKET_NAME: indeedhub-public S3_PUBLIC_BUCKET_URL: ${IH_S3_PUBLIC_URL:-http://localhost:9000/indeedhub-public} AES_MASTER_SECRET: ${IH_AES_SECRET:-demo-aes-secret-change-in-production} depends_on: indeedhub-postgres: condition: service_healthy indeedhub-redis: condition: service_started networks: - indeedhub-network restart: unless-stopped indeedhub-relay: image: scsibug/nostr-rs-relay:latest container_name: indeedhub-relay volumes: - indeedhub-relay-data:/usr/src/app/db networks: - indeedhub-network restart: unless-stopped networks: indeedhub-network: driver: bridge volumes: indeedhub-postgres-data: indeedhub-redis-data: indeedhub-minio-data: indeedhub-relay-data: