-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.local.yml
More file actions
154 lines (129 loc) · 5.58 KB
/
docker-compose.local.yml
File metadata and controls
154 lines (129 loc) · 5.58 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
# Self-Contained Local Testing Setup
# Includes local PostgreSQL, Redis, and bypasses Cognito for true local development
# Usage: docker-compose -f docker-compose.local.yml up --build
services:
# Redis for rate limiting and caching
redis-local:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_local_data:/data
command: redis-server --appendonly yes --maxmemory 128mb --maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
# Local PostgreSQL Database (ephemeral)
db-local:
image: postgres:15-alpine
environment:
POSTGRES_USER: morpheus_local
POSTGRES_PASSWORD: local_dev_password
POSTGRES_DB: morpheus_local_db
ports:
- "5433:5432"
volumes:
- postgres_local_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U morpheus_local -d morpheus_local_db"]
interval: 5s
timeout: 5s
retries: 5
# Local API with mock authentication
api-local:
build:
context: .
dockerfile: Dockerfile
env_file:
- .env.local
ports:
- "8000:8000"
depends_on:
db-local:
condition: service_healthy
redis-local:
condition: service_healthy
environment:
# Redis for rate limiting
REDIS_URL: redis://redis-local:6379/0
# Local database
DATABASE_URL: postgresql+asyncpg://morpheus_local:local_dev_password@db-local:5432/morpheus_local_db
ENVIRONMENT: ${ENVIRONMENT:-test}
# Bypass Cognito for local testing (controlled by .env.local)
BILLING_ADMIN_SECRET: ${BILLING_ADMIN_SECRET}
BYPASS_COGNITO_AUTH: ${BYPASS_COGNITO_AUTH:-false}
BUILDERS_API_URL: ${BUILDERS_API_URL:-https://dashboard.mor.org/api}
BUILDERS_SUBNET_ID: ${BUILDERS_SUBNET_ID:-0x20ba70f2bbdc384bbc0e016ec2e888c38e6d1a5454555eefdc91d546fccca932}
# MOR Pricing (CoinCap API)
COINCAP_API_KEY: ${COINCAP_API_KEY:-}
# Staking credits adjustment factor (X multiplier for tuning)
STAKING_CREDITS_ADJUSTMENT_FACTOR: ${STAKING_CREDITS_ADJUSTMENT_FACTOR:-1.0}
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET}
# Coinbase Business / CDP (new Payment Link API)
CDP_API_KEY_ID: ${CDP_API_KEY_ID:-}
CDP_API_KEY_SECRET: ${CDP_API_KEY_SECRET:-}
CDP_SANDBOX: ${CDP_SANDBOX:-true}
COINBASE_PAYMENT_LINK_WEBHOOK_SECRET: ${COINBASE_PAYMENT_LINK_WEBHOOK_SECRET:-}
LOCAL_TESTING_MODE: ${LOCAL_TESTING_MODE:-false}
# Cognito authentication (ensure these are passed from .env.local)
COGNITO_USER_POOL_ID: ${COGNITO_USER_POOL_ID}
COGNITO_CLIENT_ID: ${COGNITO_CLIENT_ID}
COGNITO_REGION: ${COGNITO_REGION}
COGNITO_DOMAIN: ${COGNITO_DOMAIN}
LOG_LEVEL: ${LOG_LEVEL:-DEBUG}
LOG_JSON: ${LOG_JSON:-false}
LOG_IS_PROD: ${LOG_IS_PROD:-false}
# Model service
ACTIVE_MODELS_URL: ${ACTIVE_MODELS_URL:-https://active.dev.mor.org/active_models.json}
DEFAULT_FALLBACK_MODEL: ${DEFAULT_FALLBACK_MODEL:-mistral-31-24b}
DEFAULT_FALLBACK_EMBEDDINGS_MODEL: ${DEFAULT_FALLBACK_EMBEDDINGS_MODEL:-text-embedding-bge-m3}
DEFAULT_FALLBACK_TTS_MODEL: ${DEFAULT_FALLBACK_TTS_MODEL:-tts-kokoro}
DEFAULT_FALLBACK_STT_MODEL: ${DEFAULT_FALLBACK_STT_MODEL:-whisper-1}
DEFAULT_BALANCE_AMOUNT: ${DEFAULT_BALANCE_AMOUNT:-10}
SIGNUP_BONUS_AMOUNT: ${SIGNUP_BONUS_AMOUNT:-1}
SIGNUP_BONUS_IP_WINDOW_HOURS: ${SIGNUP_BONUS_IP_WINDOW_HOURS:-24}
# Proxy router (can use dev or mock)
PROXY_ROUTER_URL: ${PROXY_ROUTER_URL:-http://router.dev.mor.org:8082}
PROXY_ROUTER_USERNAME: admin
PROXY_ROUTER_PASSWORD: admin
PROXY_ROUTER_CHAT_TIMEOUT: ${PROXY_ROUTER_CHAT_TIMEOUT:-300.0}
PROXY_ROUTER_STREAM_TIMEOUT: ${PROXY_ROUTER_STREAM_TIMEOUT:-300.0}
# Session routing settings
SESSION_AUTOMATION_INTERVAL_SECONDS: ${SESSION_AUTOMATION_INTERVAL_SECONDS:-30}
SESSION_IDLE_GRACE_SECONDS: ${SESSION_IDLE_GRACE_SECONDS:-300}
SESSION_DEFAULT_DURATION_SECONDS: ${SESSION_DEFAULT_DURATION_SECONDS:-1800}
SESSION_PREFERRED_MODELS: ${SESSION_PREFERRED_MODELS}
# Hold reconciliation settings (auto-void stale pending billing holds)
HOLD_RECONCILIATION_INTERVAL_SECONDS: ${HOLD_RECONCILIATION_INTERVAL_SECONDS:-600}
HOLD_MAX_PENDING_SECONDS: ${HOLD_MAX_PENDING_SECONDS:-3600}
# Rate limiting (on/off toggle; limits configured in models/{env}_rate_limit.json)
RATE_LIMIT_ENABLED: ${RATE_LIMIT_ENABLED:-true}
# Web3/SIWE settings (ERC-4361 Sign-In with Ethereum)
WEB3_PROVIDER_URL: ${WEB3_PROVIDER_URL:-} # Optional: enables EIP-1271 smart contract wallet verification
SIWE_DOMAIN: ${SIWE_DOMAIN:-app.mor.org}
SIWE_URI: ${SIWE_URI:-https://app.mor.org}
SIWE_CHAIN_ID: ${SIWE_CHAIN_ID:-8453} # Base mainnet
# AWS settings (not needed for local, but prevents errors)
AWS_DEFAULT_REGION: us-east-1
volumes:
# Mount source for hot-reloading
- ./src:/app/src
- ./alembic:/app/alembic
- ./alembic.ini:/app/alembic.ini
- ./tests:/app/tests
- ./scripts:/app/scripts
- ./models:/app/models
# Use startup script that handles migrations and verification
command: ./scripts/start_local_dev.sh
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
postgres_local_data:
redis_local_data: