mirror of
https://github.com/kbenestad/mdcms.git
synced 2026-06-18 15:24:32 +00:00
204 lines
5.4 KiB
Markdown
204 lines
5.4 KiB
Markdown
---
|
||
title: Docker Install
|
||
sort: 100
|
||
section-id: installation
|
||
keywords: Docker, install, docker run, docker-compose, volumes, container
|
||
description: Installing NeuralDB using Docker — single container and docker-compose setups
|
||
language: en
|
||
---
|
||
|
||
# Docker Install
|
||
|
||
Docker is the fastest way to run NeuralDB locally or in a single-server deployment. NeuralDB's official Docker image is published to Docker Hub as `neuraldb/neuraldb`.
|
||
|
||
## Quick Start
|
||
|
||
Run a single NeuralDB instance:
|
||
|
||
```bash
|
||
docker run -d \
|
||
--name neuraldb \
|
||
-p 5432:5432 \
|
||
-e NEURALDB_PASSWORD=mypassword \
|
||
-e NEURALDB_DB=mydb \
|
||
-v neuraldb_data:/var/lib/neuraldb/data \
|
||
neuraldb/neuraldb:latest
|
||
```
|
||
|
||
Connect with psql:
|
||
|
||
```bash
|
||
psql -h localhost -p 5432 -U neuraldb -d mydb
|
||
# Password: mypassword
|
||
```
|
||
|
||
## Environment Variables
|
||
|
||
| Variable | Default | Description |
|
||
|----------|---------|-------------|
|
||
| `NEURALDB_PASSWORD` | required | Password for the `neuraldb` superuser |
|
||
| `NEURALDB_USER` | `neuraldb` | Superuser username |
|
||
| `NEURALDB_DB` | `neuraldb` | Default database name |
|
||
| `NEURALDB_PORT` | `5432` | TCP port |
|
||
| `NEURALDB_MAX_CONNECTIONS` | `100` | Maximum concurrent connections |
|
||
| `NEURALDB_SHARED_BUFFERS` | `256MB` | Row store page cache |
|
||
| `NEURALDB_VECTOR_BUFFER` | `512MB` | Vector index memory |
|
||
| `NEURALDB_WAL_LEVEL` | `replica` | WAL level (`minimal`, `replica`, `logical`) |
|
||
|
||
## Available Tags
|
||
|
||
| Tag | Description |
|
||
|-----|-------------|
|
||
| `latest` | Latest stable release |
|
||
| `1.0` | Specific major version |
|
||
| `1.0.3` | Specific patch version |
|
||
| `nightly` | Nightly build from main branch |
|
||
| `1.0-alpine` | Alpine-based image (smaller, less glibc compat) |
|
||
|
||
## Volumes
|
||
|
||
NeuralDB stores data in `/var/lib/neuraldb/data` inside the container. Always mount a named volume or bind mount to persist data:
|
||
|
||
```bash
|
||
# Named volume (recommended)
|
||
docker volume create neuraldb_data
|
||
docker run -v neuraldb_data:/var/lib/neuraldb/data neuraldb/neuraldb:latest
|
||
|
||
# Bind mount
|
||
docker run -v /srv/neuraldb:/var/lib/neuraldb/data neuraldb/neuraldb:latest
|
||
```
|
||
|
||
The data directory includes:
|
||
- `base/` — table and index data
|
||
- `vectors/` — HNSW graph files and raw vector data
|
||
- `wal/` — write-ahead log segments
|
||
- `neuraldb.conf` — runtime configuration (editable)
|
||
|
||
## docker-compose Setup
|
||
|
||
A production-grade docker-compose file for NeuralDB with automatic backup:
|
||
|
||
```yaml
|
||
# docker-compose.yml
|
||
version: '3.9'
|
||
|
||
services:
|
||
neuraldb:
|
||
image: neuraldb/neuraldb:1.0
|
||
container_name: neuraldb
|
||
restart: unless-stopped
|
||
ports:
|
||
- "127.0.0.1:5432:5432" # bind to localhost only — use nginx for external access
|
||
environment:
|
||
NEURALDB_PASSWORD: ${NEURALDB_PASSWORD}
|
||
NEURALDB_USER: ${NEURALDB_USER:-neuraldb}
|
||
NEURALDB_DB: ${NEURALDB_DB:-neuraldb}
|
||
NEURALDB_SHARED_BUFFERS: "4GB"
|
||
NEURALDB_VECTOR_BUFFER: "8GB"
|
||
NEURALDB_MAX_CONNECTIONS: "200"
|
||
volumes:
|
||
- neuraldb_data:/var/lib/neuraldb/data
|
||
- neuraldb_wal:/var/lib/neuraldb/wal
|
||
- ./neuraldb.conf:/etc/neuraldb/neuraldb.conf:ro # optional custom config
|
||
shm_size: '2gb' # increase shared memory for large sort operations
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U ${NEURALDB_USER:-neuraldb}"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 16G
|
||
reservations:
|
||
memory: 8G
|
||
|
||
neuraldb-backup:
|
||
image: neuraldb/neuraldb-backup:latest
|
||
environment:
|
||
NEURALDB_HOST: neuraldb
|
||
NEURALDB_PASSWORD: ${NEURALDB_PASSWORD}
|
||
S3_BUCKET: ${BACKUP_S3_BUCKET}
|
||
S3_PREFIX: backups/neuraldb/
|
||
SCHEDULE: "0 2 * * *" # 2am daily
|
||
depends_on:
|
||
neuraldb:
|
||
condition: service_healthy
|
||
|
||
volumes:
|
||
neuraldb_data:
|
||
driver: local
|
||
driver_opts:
|
||
type: none
|
||
o: bind
|
||
device: /srv/neuraldb/data
|
||
neuraldb_wal:
|
||
driver: local
|
||
driver_opts:
|
||
type: none
|
||
o: bind
|
||
device: /srv/neuraldb/wal
|
||
```
|
||
|
||
Start with:
|
||
|
||
```bash
|
||
echo "NEURALDB_PASSWORD=$(openssl rand -base64 32)" > .env
|
||
docker-compose up -d
|
||
```
|
||
|
||
## Initialisation Scripts
|
||
|
||
Place `.sql` or `.sh` scripts in `/docker-entrypoint-initdb.d/` to run them on first startup:
|
||
|
||
```bash
|
||
docker run \
|
||
-v ./init-scripts:/docker-entrypoint-initdb.d:ro \
|
||
-e NEURALDB_PASSWORD=mypassword \
|
||
neuraldb/neuraldb:latest
|
||
```
|
||
|
||
```sql
|
||
-- init-scripts/01-schema.sql
|
||
CREATE TABLE documents (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
content TEXT NOT NULL,
|
||
embedding VECTOR(1536),
|
||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
|
||
```
|
||
|
||
## Memory Tuning
|
||
|
||
For production, size the container memory based on your dataset:
|
||
|
||
```
|
||
Recommended memory = shared_buffers + vector_buffer + (max_connections × work_mem) + OS overhead
|
||
```
|
||
|
||
For a typical RAG application (5M documents, 1536 dimensions):
|
||
- `vector_buffer` ≈ 5M × 1536 × 4B × 1.3 = ~40 GB
|
||
- `shared_buffers` = 8 GB
|
||
- `work_mem` × connections = 128MB × 50 = 6.4 GB
|
||
- **Total**: ~56 GB — provision a 64 GB container
|
||
|
||
## Upgrading
|
||
|
||
```bash
|
||
# Pull the new image
|
||
docker pull neuraldb/neuraldb:1.1
|
||
|
||
# Stop the current container (data is safe in the volume)
|
||
docker stop neuraldb && docker rm neuraldb
|
||
|
||
# Start with the new image
|
||
docker run -d --name neuraldb \
|
||
-v neuraldb_data:/var/lib/neuraldb/data \
|
||
-e NEURALDB_PASSWORD=mypassword \
|
||
neuraldb/neuraldb:1.1
|
||
|
||
# Run any pending migrations
|
||
docker exec neuraldb neuraldb-migrate
|
||
```
|