mdcms/sample-sites/neuraldb-docs/pages/install-docker.md
2026-05-18 14:30:49 +07:00

204 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
```