docker-compose.yaml•3.42 kB
services:
memory:
image: ghcr.io/zanzythebar/mcp-memory-libsql-go:latest
environment:
# Core DB
- LIBSQL_URL=${LIBSQL_URL}
- LIBSQL_AUTH_TOKEN=${LIBSQL_AUTH_TOKEN}
# Embeddings
- EMBEDDING_DIMS=${EMBEDDING_DIMS}
- EMBEDDINGS_PROVIDER=${EMBEDDINGS_PROVIDER}
- EMBEDDINGS_ADAPT_MODE=${EMBEDDINGS_ADAPT_MODE}
# Pooling (optional)
- DB_MAX_OPEN_CONNS=${DB_MAX_OPEN_CONNS}
- DB_MAX_IDLE_CONNS=${DB_MAX_IDLE_CONNS}
- DB_CONN_MAX_IDLE_SEC=${DB_CONN_MAX_IDLE_SEC}
- DB_CONN_MAX_LIFETIME_SEC=${DB_CONN_MAX_LIFETIME_SEC}
# Hybrid (optional)
- HYBRID_SEARCH=${HYBRID_SEARCH}
- HYBRID_TEXT_WEIGHT=${HYBRID_TEXT_WEIGHT}
- HYBRID_VECTOR_WEIGHT=${HYBRID_VECTOR_WEIGHT}
- HYBRID_RRF_K=${HYBRID_RRF_K}
# Metrics
- METRICS_PROMETHEUS=${METRICS_PROMETHEUS}
- METRICS_PORT=${METRICS_PORT}
# Transport / main address (container listens on PORT, host maps via ports below)
- TRANSPORT=${TRANSPORT}
- PORT=8090
- SSE_ENDPOINT=${SSE_ENDPOINT}
# Multi-project auth toggles
- MULTI_PROJECT_AUTH_REQUIRED=${MULTI_PROJECT_AUTH_REQUIRED}
- MULTI_PROJECT_AUTO_INIT_TOKEN=${MULTI_PROJECT_AUTO_INIT_TOKEN}
- MULTI_PROJECT_DEFAULT_TOKEN=${MULTI_PROJECT_DEFAULT_TOKEN}
# Runtime mode and misc
- MODE=${MODE} # single | multi | voyageai
- PROJECTS_DIR=${PROJECTS_DIR}
- PROJECTS_UID=${PROJECTS_UID}
- PROJECTS_GID=${PROJECTS_GID}
ports:
# Map host port from env (PORT) if provided via --env-file; default to 8090
- "${PORT:-8090}:8090"
volumes:
# Host data path (use ./data for local dev or set HOST_DATA_PATH to
# /data/coolify/applications/<id> in production)
- type: bind
source: ./data
target: /data
bind:
create_host_path: true
# Optionally run container as the host UID/GID to avoid permission issues
# when bind-mounting ./data. You can set HOST_UID and HOST_GID in your
# environment (e.g., to your current user id). If not set, the container
# will run as the image default and entrypoint will chown /data/projects.
user: "${HOST_UID:-}:${HOST_GID:-}"
healthcheck:
test: >
CMD-SHELL
curl -fsS http://127.0.0.1:8090/healthz ||
curl -fsS http://127.0.0.1:9090/healthz ||
pgrep -x mcp-memory-libsql-go >/dev/null
interval: 5s
timeout: 5s
start_period: 5s
retries: 30
backup:
build:
context: .
dockerfile: docker/backup/Dockerfile
environment:
- DATA_DIR=/data
- BACKUP_DIR=/backup
- EXCLUDE_PATTERNS=${EXCLUDE_PATTERNS:-backups}
- RUN_ONCE=${RUN_ONCE:-false}
- RETENTION=24
- SLEEP_SECONDS=3600
- RCLONE_REMOTE=
- RCLONE_CONFIG_PATH=/etc/rclone/rclone.conf
volumes:
- type: bind
# Backup reads the same repo-local data path (only ./data is allowed)
source: ./data
target: /data
bind:
create_host_path: true
- type: bind
# Backup files are stored under the repo at ./data/backups
source: ./data/backups
target: /backup
bind:
create_host_path: true
- type: bind
source: ./rclone.conf
target: /etc/rclone/rclone.conf
bind:
create_host_path: true
restart: unless-stopped