Skip to content

Docker Deployment

Nikita Ganzikov edited this page Jan 6, 2026 · 1 revision

Docker Deployment

Deploy Bright using Docker for easy containerization and deployment.

Quick Start

Pull and Run

docker pull ghcr.io/nnstd/bright:latest
docker run -d -p 3000:3000 -v $(pwd)/data:/root/data ghcr.io/nnstd/bright:latest

Build Locally

git clone https://github.com/nnstd/bright.git
cd bright
docker build -t bright:local .
docker run -d -p 3000:3000 -v $(pwd)/data:/root/data bright:local

Available Tags

Images are available on GitHub Container Registry:

  • latest - Latest release
  • v0.1.0 - Specific version
  • 0.1 - Major.minor version
  • 0 - Major version

Example:

docker pull ghcr.io/nnstd/bright:v0.1.0
docker pull ghcr.io/nnstd/bright:latest

Docker Compose

Create a docker-compose.yml:

version: '3.8'

services:
  bright:
    image: ghcr.io/nnstd/bright:latest
    container_name: bright
    ports:
      - "3000:3000"
    volumes:
      - ./data:/root/data
    restart: unless-stopped

Run with:

docker-compose up -d

Volume Mounting

The /root/data directory contains all index data and configurations. Mount it to persist data:

docker run -d \
  -p 3000:3000 \
  -v /path/to/host/data:/root/data \
  ghcr.io/nnstd/bright:latest

Environment Variables

Currently, Bright uses default configuration. The server listens on port 3000.

Networking

Standalone

Expose port 3000:

docker run -d -p 3000:3000 ghcr.io/nnstd/bright:latest

Custom Port

Map to a different host port:

docker run -d -p 8080:3000 ghcr.io/nnstd/bright:latest

Access at http://localhost:8080

Docker Network

Create a custom network for microservices:

docker network create bright-network

docker run -d \
  --name bright \
  --network bright-network \
  -p 3000:3000 \
  ghcr.io/nnstd/bright:latest

Production Deployment

With Reverse Proxy (Nginx)

server {
    listen 80;
    server_name search.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Resource Limits

docker run -d \
  -p 3000:3000 \
  -v $(pwd)/data:/root/data \
  --memory="1g" \
  --cpus="2" \
  ghcr.io/nnstd/bright:latest

Health Checks

Add a health check to your docker-compose.yml:

services:
  bright:
    image: ghcr.io/nnstd/bright:latest
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

Kubernetes Deployment

Example deployment manifest:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bright
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bright
  template:
    metadata:
      labels:
        app: bright
    spec:
      containers:
      - name: bright
        image: ghcr.io/nnstd/bright:latest
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: data
          mountPath: /root/data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: bright-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: bright
spec:
  selector:
    app: bright
  ports:
  - port: 3000
    targetPort: 3000
  type: LoadBalancer

Troubleshooting

View Logs

docker logs bright
docker logs -f bright  # Follow logs

Access Container

docker exec -it bright sh

Check Data Directory

docker exec bright ls -la /root/data

Rebuild Image

docker build --no-cache -t bright:local .

Automated Builds

Images are automatically built and pushed to GitHub Container Registry when tags are pushed:

git tag v0.2.0
git push origin v0.2.0

The GitHub Actions workflow will:

  1. Build the Docker image
  2. Tag it with version, major.minor, major, and SHA
  3. Push to ghcr.io/nnstd/bright

Clone this wiki locally