File size: 7,702 Bytes
db81b0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
09b2615
 
 
db81b0e
 
 
09b2615
 
 
 
db81b0e
 
2f1ca9d
09b2615
 
 
 
db81b0e
 
5ae3446
 
 
 
 
 
 
 
 
db81b0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5ae3446
db81b0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5ae3446
 
 
 
 
 
 
db81b0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# ═══════════════════════════════════════════════════════════════
#  BASECAMP CODING STARTER PACK β€” 10 best-of-breed AI coding tools
#  Every service in its own container, all on the AI network,
#  all wired to the stack's Ollama (http://ollama:11434) and
#  TabbyAPI (http://tabbyapi:5000/v1). They call each other by
#  container name from anywhere on the network.
#
#  Usage:
#    docker compose -f docker-compose.starter.yml up -d
#    basecamp rediscover   # basecamp finds the whole pack
#    basecamp wire         # wiring audit for the pack
#
#  Ports (host side): see per-service comment. All services are
#  reachable on the ai-network by their container name.
# ═══════════════════════════════════════════════════════════════

networks:
  tabby-tavern_ai-network:
    external: true

volumes:
  code-server-data:
  qdrant-data:
  chroma-data:
  n8n-data:
  lobe-chat-data:
  anythingllm-data:
  librechat-data:
  meilisearch-data:
  flowise-data:
  postgres_data:

services:

  # ── 1. THE IDE β€” VS Code in the browser ──
  code-server:
    image: codercom/code-server:latest
    container_name: starter-code-server
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "8443:8080"              # browser IDE at http://localhost:8443
    volumes:
      - code-server-data:/home/coder/.local/share/code-server
      - ${PWD:-.}/workspace:/home/coder/workspace   # your code lives here
      # Continue.dev config β€” wired to the stack's Ollama (hermes3:70b +
      # llama3.1:8b autocomplete). Edit ide-config/continue-config.json.
      - ${PWD:-.}/ide-config/continue-config.json:/home/coder/.config/Continue/config.json
    environment:
      - PASSWORD=basecamp        # change me; login at the browser prompt
    # Continue.dev + Tabby extensions pre-installed via entrypoint
    # FIX 2026-08-09: the data volume is root-owned but code-server runs as
    # 'coder' -> EACCES on coder-logs, extensions never install. Chown the
    # volume to coder on boot before anything else.
    user: root
    entrypoint: >
      /bin/sh -c "
      chown -R coder:coder /home/coder 2>/dev/null;
      su coder -c 'code-server --install-extension Continue.continue --force' 2>/dev/null;
      su coder -c 'code-server --install-extension TabbyML.vscode-tabby --force' 2>/dev/null;
      su coder -c 'code-server --install-extension coder.coder --force' 2>/dev/null;
      exec su coder -c 'code-server --bind-addr 0.0.0.0:8080 --disable-telemetry'
      "

  # ── 2. (removed) tabby β€” self-hosted Copilot
  # REMOVED 2026-08-09: tabby's bundled llama-server dlopens libcuda.so.1 at
  # startup even with --device cpu (binary is CUDA-compiled), and the
  # container has no NVIDIA libs. Verified: 'error while loading shared
  # libraries: libcuda.so.1' β†’ exit 127 crash-loop on 20260330 pin too.
  # Would need --gpus all + CUDA libs β€” the 12GB card belongs to TabbyAPI.
  # Completions alternative: point the code-server Tabby extension at a
  # completion-capable model on the stack's own engines.
  # Re-add when the tabby image ships a true CPU-only build.

  # ── 3. VECTOR DB β€” code RAG backbone ──
  qdrant:
    image: qdrant/qdrant:latest
    container_name: starter-qdrant
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "6333:6333"              # REST + gRPC
      - "6334:6334"
    volumes:
      - qdrant-data:/qdrant/storage

  # ── 4. VECTOR DB (lightweight) ──
  chroma:
    image: chromadb/chroma:latest
    container_name: starter-chroma
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "8005:8000"
    volumes:
      - chroma-data:/chroma/chroma

  # ── 5. WORKFLOW AUTOMATION ──
  n8n:
    image: n8nio/n8n:latest
    container_name: starter-n8n
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "5678:5678"
    volumes:
      - n8n-data:/home/node/.n8n
    environment:
      - N8N_BASIC_AUTH_ACTIVE=false
      - GENERIC_TIMEZONE=UTC

  # ── 6. AI CHAT UI ──
  lobe-chat:
    image: lobehub/lobe-chat:latest
    container_name: starter-lobe-chat
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "3210:3210"
    volumes:
      - lobe-chat-data:/app/data
    environment:
      - OPENAI_PROXY_URL=http://ollama:11434/v1   # wired to stack Ollama
      - OPENAI_API_KEY=ollama

  # ── 7. RAG WORKSPACE ──
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: starter-anythingllm
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "3001:3001"
    volumes:
      - anythingllm-data:/app/server/storage
    environment:
      - STORAGE_DIR=/app/server/storage
      - OLLAMA_BASE_URL=http://ollama:11434       # wired to stack Ollama

  # ── 8. MULTI-MODEL CHAT ──
  librechat:
    image: ghcr.io/danny-avila/librechat:latest
    container_name: starter-librechat
    restart: unless-stopped
    depends_on:
      - mongo
    networks: [tabby-tavern_ai-network]
    ports:
      - "3080:3080"              # chat UI at http://localhost:3080
    volumes:
      - librechat-data:/app/librechat
    environment:
      - MONGO_URI=mongodb://mongo:27017/LibreChat
      - JWT_SECRET=basecamp-jwt-secret-change-me   # required (JwtStrategy)
      - OPENAI_API_KEY=ollama
      - OPENAI_API_BASE=http://ollama:11434/v1    # wired to stack Ollama
      - ALLOW_SOCIAL_LOGIN=true

  # LibreChat's database (required β€” LibreChat is NOT self-contained)
  mongo:
    image: mongo:7
    container_name: starter-mongo
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "27017:27017"
    volumes:
      - librechat-data:/data/db

  # ── 9. FULL-TEXT SEARCH ──
  meilisearch:
    image: getmeili/meilisearch:latest
    container_name: starter-meilisearch
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "7700:7700"
    volumes:
      - meilisearch-data:/meili_data
    environment:
      - MEILI_MASTER_KEY=basecamp-dev-key         # change me
      - MEILI_ENV=development

  # ── 10. (removed) flowise β€” no-code agent builder
  # REMOVED 2026-08-09: flowiseai/flowise is BROKEN upstream (both 'latest'
  # and 3.1.4 crash at boot with ERR_PACKAGE_PATH_NOT_EXPORTED β€”
  # @langchain/langgraph-checkpoint requires './utils/uuid' which
  # @langchain/core doesn't export). Verified on both tags. Ripped out
  # rather than shipping a known-broken tool. Re-add when upstream fixes
  # their dependency tree.

  # ── 11. LONG-TERM MEMORY β€” Postgres + pgvector ──
  # Hermes's pluggable memory backend: vector store for embeddings so the
  # agent remembers across sessions. Point hermes at it with:
  #   hermes memory configure --backend postgres --dsn "postgresql://hermes:CHANGEME@starter-postgres:5432/hermes"
  postgres:
    image: pgvector/pgvector:pg16
    container_name: starter-postgres
    restart: unless-stopped
    networks: [tabby-tavern_ai-network]
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: hermes
      POSTGRES_USER: hermes
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme_strong_password}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U hermes -d hermes"]
      interval: 10s
      timeout: 5s
      retries: 5