-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdocker-compose.github.yml
More file actions
159 lines (156 loc) · 6.18 KB
/
docker-compose.github.yml
File metadata and controls
159 lines (156 loc) · 6.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# =============================================================================
# Busibox Production/Staging Mode - Core Apps (Monorepo)
# =============================================================================
#
# Production overlay for Next.js apps:
# - Clones busibox-frontend monorepo at runtime
# - Builds enabled apps with pnpm and standalone output
# - Supervisord manages per-app Node.js processes
# - Persistent volume for monorepo (survives container restarts)
#
# Usage:
# docker compose -f docker-compose.yml -f docker-compose.github.yml up
#
# Configuration:
# BUSIBOX_FRONTEND_GITHUB_REF=main # Branch name (default)
# BUSIBOX_FRONTEND_GITHUB_REF=v1.2.3 # Release tag
#
# First Start:
# - Container builds quickly (no app code)
# - Monorepo is cloned and apps are built on first start (~5 min)
# - Subsequent starts are fast (apps in persistent volume)
#
# =============================================================================
services:
core-apps:
build:
context: ./provision/docker
dockerfile: core-apps.Dockerfile.runtime
container_name: ${CONTAINER_PREFIX:-local}-core-apps
hostname: core-apps
restart: "no"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
NODE_ENV: production
NODE_OPTIONS: "--max-old-space-size=4096"
# GitHub authentication for cloning repos and npm packages
GITHUB_AUTH_TOKEN: ${GITHUB_AUTH_TOKEN:-}
# Monorepo version to deploy
BUSIBOX_FRONTEND_GITHUB_REF: ${BUSIBOX_FRONTEND_GITHUB_REF:-main}
# Which apps to deploy and start (comma-separated). Default: portal,admin.
ENABLED_APPS: ${ENABLED_APPS:-portal,admin}
# =========================================================================
# Busibox Portal Environment (PORT 3000)
# =========================================================================
# Database
DATABASE_URL: postgresql://${POSTGRES_USER:-busibox_user}:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set}@postgres:5432/ai_portal
# Auth - use https for SSL
BETTER_AUTH_URL: https://${BASE_DOMAIN:-localhost}/portal
# Email (optional - uses console logging in dev)
RESEND_API_KEY: ${RESEND_API_KEY:-}
EMAIL_FROM: ${EMAIL_FROM:-noreply@localhost}
# Admin
ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@localhost}
ALLOWED_EMAIL_DOMAINS: ${ALLOWED_EMAIL_DOMAINS:-*}
# AuthZ - use internal container URLs
AUTHZ_BASE_URL: http://authz-api:8010
# LiteLLM
LITELLM_BASE_URL: http://litellm:4000/v1
LITELLM_API_KEY: ${LITELLM_API_KEY:?LITELLM_API_KEY must be set}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
# SSO
SSO_JWT_SECRET: ${SSO_JWT_SECRET:?SSO_JWT_SECRET must be set}
# WebAuthn / Passkey RP ID (must be a valid domain or localhost)
WEBAUTHN_RP_ID: ${BASE_DOMAIN:-localhost}
# Service URLs (for SSO redirect via nginx proxy)
NEXT_PUBLIC_BUSIBOX_AGENTS_URL: https://${BASE_DOMAIN:-localhost}/agents
NEXT_PUBLIC_APP_URL: https://${BASE_DOMAIN:-localhost}/portal
# Base paths for nginx subpath routing
NEXT_PUBLIC_BASE_PATH: /portal
BUSIBOX_PORTAL_BASE_PATH: /portal
BUSIBOX_AGENTS_BASE_PATH: /agents
BUSIBOX_ADMIN_BASE_PATH: /admin
BUSIBOX_CHAT_BASE_PATH: /chat
BUSIBOX_APPBUILDER_BASE_PATH: /builder
BUSIBOX_MEDIA_BASE_PATH: /media
BUSIBOX_DOCUMENTS_BASE_PATH: /documents
# Backend service URLs (for server-side API calls)
DATA_API_URL: http://data-api:8002
SEARCH_API_URL: http://search-api:8003
AGENT_API_URL: http://agent-api:8000
# Docs API
DOCS_API_URL: http://docs-api:8004
# Deployment Service
DEPLOY_API_URL: http://deploy-api:8011
DEPLOYMENT_SERVICE_URL: http://deploy-api:8011/api/v1/deployment
# Config API - centralised configuration service
CONFIG_API_URL: http://config-api:8012
# Bridge API
BRIDGE_API_URL: http://bridge-api:8081
# Host Agent (for MLX control on Apple Silicon)
HOST_AGENT_URL: http://host.docker.internal:8089
HOST_AGENT_TOKEN: ${HOST_AGENT_TOKEN:-}
# LLM Backend - tells frontend what hardware is available
LLM_BACKEND: ${LLM_BACKEND:-}
# =========================================================================
# Agent Manager Environment (PORT 3001)
# =========================================================================
NEXT_PUBLIC_AGENT_API_URL: https://${BASE_DOMAIN:-localhost}/api/agent
NEXT_PUBLIC_DATA_API_URL: https://${BASE_DOMAIN:-localhost}/api/data
NEXT_PUBLIC_SEARCH_API_URL: https://${BASE_DOMAIN:-localhost}/api/search
NEXT_PUBLIC_BUSIBOX_PORTAL_URL: https://${BASE_DOMAIN:-localhost}/portal
BUILDER_PROJECT_ROOT: /srv/projects
BUILDER_TEMPLATE_SOURCE: /srv/projects/templates/busibox-template
BUILDER_LIBRARY_OWNER: ${BUILDER_LIBRARY_OWNER:-jazzmind}
BUILDER_LIBRARY_REPO: ${BUILDER_LIBRARY_REPO:-busibox-app-library}
ports:
- "3000:3000"
- "3001:3001"
- "3002:3002"
- "3003:3003"
- "3004:3004"
- "3005:3005"
- "3006:3006"
volumes:
# Persistent monorepo directory - survives container restarts
- core-apps-frontend:/srv/busibox-frontend
# Supervisor logs
- core-apps-logs:/var/log/supervisor
depends_on:
postgres:
condition: service_healthy
authz-api:
condition: service_healthy
proxy:
condition: service_healthy
deploy:
resources:
reservations:
memory: 1G
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/portal/api/health"]
interval: 30s
timeout: 10s
start_period: 300s
retries: 3
networks:
busibox-net:
aliases:
- core-apps
- busibox-portal
- busibox-agents
- busibox-admin
- busibox-chat
- busibox-appbuilder
- busibox-media
- busibox-documents
networks:
busibox-net:
driver: bridge
name: ${CONTAINER_PREFIX:-local}-busibox-net
volumes:
core-apps-frontend:
name: ${CONTAINER_PREFIX:-local}-core-apps-frontend
core-apps-logs:
name: ${CONTAINER_PREFIX:-local}-core-apps-logs