-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
150 lines (145 loc) · 5.25 KB
/
Copy pathdocker-compose.yml
File metadata and controls
150 lines (145 loc) · 5.25 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
services:
# PostgreSQL with pgvector extension
postgres:
image: pgvector/pgvector:pg16
container_name: rag-postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-rag}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-rag_password}
POSTGRES_DB: ${POSTGRES_DB:-rag_db}
ports:
- "${POSTGRES_PORT:-5432}:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-scripts:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-rag} -d ${POSTGRES_DB:-rag_db}"]
interval: 5s
timeout: 5s
retries: 5
networks:
- rag-network
profiles: ["full", "api", "all"]
# Ollama for local embeddings
ollama:
image: ollama/ollama:latest
container_name: rag-ollama
ports:
- "${OLLAMA_PORT:-11434}:11434"
volumes:
- ollama_data:/root/.ollama
# Pull models on startup
entrypoint: >
sh -c "
ollama serve &
until ollama list >/dev/null 2>&1; do sleep 2; done
ollama pull ${OLLAMA_MODEL:-nomic-embed-text}
ollama pull ${OLLAMA_LLM_MODEL:-llama3.1:8b}
tail -f /dev/null
"
healthcheck:
test: ["CMD-SHELL", "ollama list >/dev/null 2>&1"]
interval: 10s
timeout: 5s
retries: 20
start_period: 120s
networks:
- rag-network
profiles: ["full", "api", "all"]
# Unified Nuxt 3 app (RAG UI + server API)
app:
build:
context: .
dockerfile: Dockerfile
container_name: rag-app
env_file: .env
environment:
NODE_ENV: production
DATABASE_URL: postgresql://${POSTGRES_USER:-rag}:${POSTGRES_PASSWORD:-rag_password}@postgres:5432/${POSTGRES_DB:-rag_db}
NUXT_DATABASE_URL: postgresql://${POSTGRES_USER:-rag}:${POSTGRES_PASSWORD:-rag_password}@postgres:5432/${POSTGRES_DB:-rag_db}
OLLAMA_URL: ${OLLAMA_URL:-http://ollama:11434}
NUXT_OLLAMA_URL: ${OLLAMA_URL:-http://ollama:11434}
OLLAMA_MODEL: ${OLLAMA_MODEL:-nomic-embed-text}
NUXT_OLLAMA_MODEL: ${OLLAMA_MODEL:-nomic-embed-text}
OLLAMA_LLM_MODEL: ${OLLAMA_LLM_MODEL:-llama3.1:8b}
NUXT_OLLAMA_LLM_MODEL: ${OLLAMA_LLM_MODEL:-llama3.1:8b}
OLLAMA_CHAT_TIMEOUT_MS: ${OLLAMA_CHAT_TIMEOUT_MS:-180000}
NUXT_OLLAMA_CHAT_TIMEOUT_MS: ${OLLAMA_CHAT_TIMEOUT_MS:-180000}
OLLAMA_PLANNER_TIMEOUT_MS: ${OLLAMA_PLANNER_TIMEOUT_MS:-60000}
NUXT_OLLAMA_PLANNER_TIMEOUT_MS: ${OLLAMA_PLANNER_TIMEOUT_MS:-60000}
OLLAMA_API_KEY: ${OLLAMA_API_KEY:-}
NUXT_OLLAMA_API_KEY: ${OLLAMA_API_KEY:-}
GOOGLE_API_KEY: ${GOOGLE_API_KEY:-}
NUXT_GOOGLE_API_KEY: ${GOOGLE_API_KEY:-}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
NUXT_OPENAI_API_KEY: ${OPENAI_API_KEY:-}
EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-768}
NUXT_EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-768}
MEMORY_SCOPE: ${MEMORY_SCOPE:-local_per_user}
NUXT_MEMORY_SCOPE: ${MEMORY_SCOPE:-local_per_user}
MEMORY_PROACTIVE: ${MEMORY_PROACTIVE:-true}
NUXT_MEMORY_PROACTIVE: ${MEMORY_PROACTIVE:-true}
ADMIN_API_KEY: ${ADMIN_API_KEY:-}
NUXT_ADMIN_API_KEY: ${ADMIN_API_KEY:-}
# Auth (better-auth). Use BETTER_AUTH_SECRET or AUTH_SECRET from .env; if both are unset,
# this dev-only default lets the stack boot (replace in .env before any real deployment).
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET:-${AUTH_SECRET:-insecure-dev-docker-change-me}}
AUTH_SECRET: ${AUTH_SECRET:-}
BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:3000}
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID:-}
GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET:-}
# Additional LLM/embedding providers
VOYAGE_API_KEY: ${VOYAGE_API_KEY:-}
NUXT_VOYAGE_API_KEY: ${VOYAGE_API_KEY:-}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
NUXT_ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
MISTRAL_API_KEY: ${MISTRAL_API_KEY:-}
NUXT_MISTRAL_API_KEY: ${MISTRAL_API_KEY:-}
EMBEDDING_PROVIDER: ${EMBEDDING_PROVIDER:-}
NUXT_EMBEDDING_PROVIDER: ${EMBEDDING_PROVIDER:-}
LLM_PROVIDER: ${LLM_PROVIDER:-}
NUXT_LLM_PROVIDER: ${LLM_PROVIDER:-}
WORKFLOW_LOCAL_DATA_DIR: /app/data/workflow
NUXT_HOST: 0.0.0.0
NUXT_PORT: 3000
ports:
- "${PORT:-3000}:3000"
volumes:
- workflow_data:/app/data/workflow
depends_on:
postgres:
condition: service_healthy
networks:
- rag-network
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:3000/api/health | grep -q '\"status\":\"ok\"' || exit 1"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s
profiles: ["full", "all"]
# pgAdmin for visual database management
pgadmin:
image: dpage/pgadmin4
container_name: rag-pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@example.com}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
ports:
- "${PGADMIN_PORT:-5050}:80"
networks:
- rag-network
depends_on:
postgres:
condition: service_healthy
profiles: ["full", "all"]
volumes:
postgres_data:
ollama_data:
workflow_data:
networks:
rag-network:
driver: bridge