helix-db Docker & Self-Hosted Deployment

GitHub

HelixDB is an open-source graph-vector database built from scratch in Rust.

4,307 stars Rust Rust 1 file ยท ~2,439 tokens #ai#cli#database#databases#graph-database#helix#helixdb#rag
RAW Compose
1. Pull Image (GHCR) docker pull ghcr.io/chrislusf/seaweedfs
2. Docker Run (1-Click Launch) docker run -d --name helix-db -p 18120:18120 --restart always ghcr.io/chrislusf/seaweedfs:4.47@sha256:ce9e796f1fe6f06968f4c04bdaf8f678dad9c8acdfef3d244133d71bfa6bf882
3. Podman Run podman run -d --name helix-db -p 18120:18120 --restart always ghcr.io/chrislusf/seaweedfs:4.47@sha256:ce9e796f1fe6f06968f4c04bdaf8f678dad9c8acdfef3d244133d71bfa6bf882
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://ghcr.io/chrislusf/seaweedfs:4.47@sha256:ce9e796f1fe6f06968f4c04bdaf8f678dad9c8acdfef3d244133d71bfa6bf882
5. ORAS Pull (OCI Artifact) oras pull ghcr.io/chrislusf/seaweedfs:4.47@sha256:ce9e796f1fe6f06968f4c04bdaf8f678dad9c8acdfef3d244133d71bfa6bf882
6. Compose Deployment docker compose up -d
docker-image/tests/fixtures/docker-compose.yml
Download .yml
services:
  seaweedfs:
    image: ghcr.io/chrislusf/seaweedfs:4.47@sha256:ce9e796f1fe6f06968f4c04bdaf8f678dad9c8acdfef3d244133d71bfa6bf882
    platform: ${HELIX_IMAGE_PLATFORM:?HELIX_IMAGE_PLATFORM must be set}
    command:
      - mini
      - -dir=/data
      - -bucket=helix-db
      - -s3.config=/etc/seaweedfs/s3.json
      - -master.telemetry=false
      - -admin.ui=false
      - -webdav=false
      - -s3.port.iceberg=0
      - -s3.port.lance=0
    restart: unless-stopped
    configs:
      - source: seaweedfs-s3
        target: /etc/seaweedfs/s3.json
    volumes:
      - seaweedfs-data:/data
    healthcheck:
      # A signed HEAD proves the S3 gateway, the static identity, and the
      # startup-created bucket are all ready before Helix opens its store.
      test:
        - CMD
        - curl
        - -fsS
        - -o
        - /dev/null
        - --max-time
        - "2"
        - -I
        - --aws-sigv4
        - aws:amz:us-east-1:s3
        - --user
        - helix:helix-local-secret
        - http://127.0.0.1:8333/helix-db
      interval: 1s
      timeout: 5s
      retries: 120

  # Test-only request logger. Helix reaches SeaweedFS through it so the idle
  # refresh regression can observe every object GET and its Range header.
  s3-trace:
    image: ghcr.io/nginx/nginx-unprivileged:1.30.5-alpine@sha256:4714e0b1b2577eaa1a6131d07c958b67f0eb68e6d0521e90c6e5287db8cf0bc5
    platform: ${HELIX_IMAGE_PLATFORM:?HELIX_IMAGE_PLATFORM must be set}
    restart: unless-stopped
    depends_on:
      seaweedfs:
        condition: service_healthy
    volumes:
      - ./s3-trace.conf:/etc/nginx/conf.d/default.conf:ro

  helix:
    image: ${HELIX_IMAGE_REF:?HELIX_IMAGE_REF must be set}
    platform: ${HELIX_IMAGE_PLATFORM:?HELIX_IMAGE_PLATFORM must be set}
    pull_policy: never
    restart: unless-stopped
    depends_on:
      seaweedfs:
        condition: service_healthy
      s3-trace:
        condition: service_started
    ports:
      - "${HELIX_IMAGE_TEST_PORT:-18120}:8080"
    # S3 storage always caches on local disk, in /var/cache/helix unless
    # HELIX_DISK_CACHE_DIR moves it. On tmpfs every container start begins
    # cold, so reopened reads must come from SeaweedFS and reach the trace.
    # Reads repeated after that are served from the cache and never traced,
    # so the idle refresh check proves only that idle refreshes fetch no
    # uncached SST ranges. A tmpfs root is root-owned 0755 unless its mode
    # lets the 65532 runtime user write, and the explicit budget stays within
    # its size, where the 8 GiB default would not fit and fail startup.
    tmpfs:
      - /var/cache/helix:mode=1777,size=2g
    environment:
      HELIX_DISK_CACHE_BYTES: "1073741824"
      S3_BUCKET: helix-db
      S3_REGION: us-east-1
      DB_PATH: db/
      AWS_ACCESS_KEY_ID: helix
      AWS_SECRET_ACCESS_KEY: helix-local-secret
      AWS_ENDPOINT: http://s3-trace:8333
      AWS_ALLOW_HTTP: "true"

configs:
  seaweedfs-s3:
    content: |
      {
        "identities": [
          {
            "name": "helix",
            "credentials": [
              {"accessKey": "helix", "secretKey": "helix-local-secret"}
            ],
            "actions": ["Read:helix-db", "Write:helix-db", "List:helix-db"]
          }
        ]
      }

volumes:
  seaweedfs-data: