# TaskStream: web + API + infrastructure. # docker compose up -d --build → everything: web on http://localhost:8080 # docker compose up -d postgres mongo redis → only infrastructure (then `npx nx serve api` / `npx nx serve web`) # # Building needs access to Pireon's Nexus (@pi/ui): the token is read from ~/.npmrc as a build secret. services: web: build: context: . target: web secrets: [npmrc] image: task-stream-web ports: ['8080:80'] depends_on: api: { condition: service_healthy } restart: unless-stopped api: build: context: . target: api secrets: [npmrc] image: task-stream-api ports: ['3000:3000'] environment: POSTGRES_URL: postgres://taskstream:taskstream@postgres:5432/taskstream # No migrations yet: TypeORM creates the event store and lookup tables. POSTGRES_SYNCHRONIZE: 'true' MONGO_URL: mongodb://mongo:27017/taskstream_read REDIS_URL: redis://redis:6379 EVENT_STREAM_KEY: task-stream:events EVENTS_BRIDGE_ENABLED: 'true' PIREON_BASE_URL: https://oauth.pireon.dev PIREON_WEBHOOK_SECRET: ${PIREON_WEBHOOK_SECRET:-} PIREON_CLIENT_ID: ${PIREON_CLIENT_ID:-} PIREON_CLIENT_SECRET: ${PIREON_CLIENT_SECRET:-} GRAPHQL_PLAYGROUND: 'true' # The SDL file is only useful in development (codegen). GRAPHQL_SCHEMA_FILE: '' depends_on: postgres: { condition: service_healthy } mongo: { condition: service_healthy } redis: { condition: service_healthy } restart: unless-stopped postgres: image: postgres:17-alpine environment: POSTGRES_USER: taskstream POSTGRES_PASSWORD: taskstream POSTGRES_DB: taskstream ports: ['5432:5432'] volumes: [postgres-data:/var/lib/postgresql/data] healthcheck: test: ['CMD-SHELL', 'pg_isready -U taskstream'] interval: 5s retries: 10 mongo: image: mongo:8 ports: ['27017:27017'] volumes: [mongo-data:/data/db] healthcheck: test: ['CMD', 'mongosh', '--quiet', '--eval', 'db.adminCommand("ping")'] interval: 5s retries: 10 redis: image: redis:7-alpine command: ['redis-server', '--appendonly', 'yes'] ports: ['6379:6379'] volumes: [redis-data:/data] healthcheck: test: ['CMD', 'redis-cli', 'ping'] interval: 5s retries: 10 volumes: postgres-data: mongo-data: redis-data: secrets: npmrc: file: ${HOME}/.npmrc