File size: 2,760 Bytes
2b64d42 | 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 | services:
windsurf-api:
# Pull the prebuilt image by default (released via .github/workflows/release.yml).
# `build:` is kept for local dev: `docker compose up --build` rebuilds from source,
# and Compose will fall back to building when the image isn't available locally
# AND can't be pulled (e.g. before the first stable tag exists, or on a fork).
image: ghcr.io/dwgx/windsurf-api:latest
build:
context: .
dockerfile: Dockerfile
# Remove container_name to allow Compose to scale replicas
restart: unless-stopped
init: true
env_file:
- .env
environment:
PORT: 3003
DATA_DIR: /data
LS_BINARY_PATH: /opt/windsurf/language_server_linux_x64
# REPLICA_ISOLATE=1 puts telemetry under per-container subdirs.
# Default off — accounts.json now always lives at the shared
# /data/accounts.json regardless of this flag (see src/config.js
# sharedDataDir). Set to 1 only if you scale replicas>1 and accept
# that runtime-config / model-access / cache / cascade pool stay
# replica-local until externalized. See issue #67 / #69.
REPLICA_ISOLATE: 0
# Do not expose ports directly when load balancing
expose:
- "3003"
volumes:
- ./.docker-data/data:/data
- ./.docker-data/opt/windsurf:/opt/windsurf
- ./.docker-data/tmp/windsurf-workspace:/tmp/windsurf-workspace
# Optional: mount the docker socket to enable in-dashboard one-click
# updates for docker deployments. With this mount the dashboard's
# "Check for update" button can pull the latest image AND trigger
# `docker compose up -d` to recreate the container — no manual
# SSH/exec needed. SECURITY: a process with access to docker.sock
# is effectively root on the host (it can spawn privileged
# containers, mount any path, etc.). Only enable on machines where
# the dashboard is locked down (DASHBOARD_PASSWORD set, not exposed
# publicly without a strong API_KEY). Leave commented for the
# default secure-by-default deployment.
# - /var/run/docker.sock:/var/run/docker.sock
# Default to a single replica. Each replica keeps its own in-memory
# response cache, cascade reuse pool, runtime-config, and model-access
# list — those are NOT yet shared. Multi-replica is opt-in:
# `docker compose up -d --scale windsurf-api=3` after you've set up
# external coordination for those state files. See issue #69.
deploy:
replicas: 1
nginx:
image: nginx:alpine
container_name: windsurf-lb
restart: unless-stopped
ports:
- "${PORT:-3003}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- windsurf-api
|