feat: add LanceDB support with Docker integration and configuration files

This commit is contained in:
mlogclub
2026-06-07 19:33:41 +08:00
parent 9a1ee8acff
commit d2d82b615b
5 changed files with 180 additions and 1 deletions
+2
View File
@@ -11,6 +11,8 @@ docker-data
dist
data
qdrant
include
lib
*.log
__debug_bin*
+58
View File
@@ -29,6 +29,64 @@ RUN --mount=type=cache,target=/go/pkg/mod \
CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
go build -v -trimpath -ldflags="-s -w" -o /out/agent-desk ./cmd/server
FROM golang:1.26-bookworm AS server-builder-lancedb
WORKDIR /src
ARG TARGETOS=linux
ARG TARGETARCH
ARG LANCEDB_VERSION=v0.1.2
RUN apt-get update \
&& apt-get install -y --no-install-recommends bash build-essential ca-certificates curl git \
&& rm -rf /var/lib/apt/lists/*
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod \
go mod download
COPY . ./
COPY --from=web-builder /src/web/out ./web/out
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
set -eux; \
if [ "$${TARGETOS}" != "linux" ]; then \
echo "LanceDB Docker image supports TARGETOS=linux only, got $${TARGETOS}" >&2; \
exit 1; \
fi; \
arch="$${TARGETARCH:-$$(go env GOARCH)}"; \
case "$$arch" in \
amd64|arm64) ;; \
*) echo "Unsupported LanceDB Docker architecture: $$arch" >&2; exit 1 ;; \
esac; \
curl -sSL https://raw.githubusercontent.com/lancedb/lancedb-go/main/scripts/download-artifacts.sh | bash -s "$${LANCEDB_VERSION}"; \
CGO_ENABLED=1 GOOS="$${TARGETOS}" GOARCH="$$arch" \
CGO_CFLAGS="-I/src/include" \
CGO_LDFLAGS="/src/lib/linux_$$arch/liblancedb_go.a -lm -ldl -lpthread" \
go build -tags lancedb -v -trimpath -ldflags="-s -w" -o /out/agent-desk ./cmd/server
FROM debian:bookworm-slim AS app-lancedb
WORKDIR /app
ENV TZ=Asia/Shanghai
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates tzdata wget \
&& mkdir -p /app/config /app/data/storage /app/data/lancedb \
&& rm -rf /var/lib/apt/lists/*
COPY --from=server-builder-lancedb /out/agent-desk /app/agent-desk
COPY config/config.example.yaml /app/config/config.example.yaml
COPY config/config.example.yaml /app/config/config.yaml
EXPOSE 8083
VOLUME ["/app/data"]
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD wget -qO- http://127.0.0.1:8083/ >/dev/null || exit 1
CMD ["/app/agent-desk", "-config", "/app/config/config.yaml"]
FROM alpine:3.22 AS app
WORKDIR /app
+11 -1
View File
@@ -5,12 +5,14 @@ SPA_INDEX := $(WEB_DIR)/out/index.html
GO ?= go
PNPM ?= pnpm
DOCKER ?= docker
GOOS ?= $(shell $(GO) env GOOS)
GOARCH ?= $(shell $(GO) env GOARCH)
DEV_SERVER_URL ?= http://127.0.0.1:8083
LANCEDB_VERSION ?= v0.1.2
LANCEDB_DOWNLOAD_SCRIPT ?= https://raw.githubusercontent.com/lancedb/lancedb-go/main/scripts/download-artifacts.sh
LANCEDB_TEST_PKGS ?= ./internal/ai/rag/vectordb
LANCEDB_DOCKER_IMAGE ?= mlogclub/agent-desk:lancedb
UNAME_S := $(shell uname -s)
UNAME_M := $(shell uname -m)
@@ -60,7 +62,7 @@ LANCEDB_CGO_LDFLAGS := $(LANCEDB_NATIVE_LIB) $(LANCEDB_SYSTEM_LDFLAGS)
.PHONY: all help build build-go build-linux release run run-go dev test check clean clean-web \
web-install web-dev web-build-spa ensure-spa build-spa web-build-ssr web-typecheck web-lint \
generator enums migration testdata lancedb-platform-info lancedb-artifacts lancedb-check \
build-lancedb test-lancedb clean-lancedb-artifacts
build-lancedb test-lancedb clean-lancedb-artifacts docker-build-lancedb
all: build
@@ -89,6 +91,7 @@ help:
@echo " make lancedb-artifacts Download LanceDB native libraries for this platform"
@echo " make build-lancedb Build Go binary with LanceDB provider enabled"
@echo " make test-lancedb Run LanceDB provider tests with native libraries"
@echo " make docker-build-lancedb Build Docker image with LanceDB provider enabled"
build: web-build-spa
@$(MAKE) build-go
@@ -222,3 +225,10 @@ test-lancedb: lancedb-check
clean-lancedb-artifacts:
@rm -rf lib include
docker-build-lancedb:
@$(DOCKER) build \
--target app-lancedb \
--build-arg LANCEDB_VERSION=$(LANCEDB_VERSION) \
-t $(LANCEDB_DOCKER_IMAGE) \
.
+44
View File
@@ -0,0 +1,44 @@
services:
mysql:
image: mysql:8.4
restart: unless-stopped
environment:
MYSQL_DATABASE: cs_ai_agent
MYSQL_USER: cs_ai_agent
MYSQL_PASSWORD: cs_ai_agent_password
MYSQL_ROOT_PASSWORD: cs_ai_agent_root_password
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u\"$${MYSQL_USER}\" -p\"$${MYSQL_PASSWORD}\" --silent"]
interval: 10s
timeout: 5s
retries: 10
agent-desk:
build:
context: .
dockerfile: Dockerfile
target: app-lancedb
args:
LANCEDB_VERSION: v0.1.2
image: mlogclub/agent-desk:lancedb
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
ports:
- "8083:8083"
volumes:
- agent-desk-data:/app/data
- ./docker/agent-desk-lancedb.yaml:/app/config/config.yaml:ro
environment:
TZ: Asia/Shanghai
volumes:
mysql-data:
agent-desk-data:
+65
View File
@@ -0,0 +1,65 @@
server:
port: 8083
cors:
allowedOrigins:
- http://localhost:8083
- http://127.0.0.1:8083
db:
type: mysql
dsn: cs_ai_agent:cs_ai_agent_password@tcp(mysql:3306)/cs_ai_agent?charset=utf8mb4&parseTime=True&loc=Local
logger:
level: info
format: text
addSource: false
auth:
tokenTTLHours: 24
maxFailedAttempts: 5
credentialLockMinute: 30
storage:
default: local
maxUploadSizeMB: 5
local:
root: /app/data/storage
baseUrl: /storage
oss:
endpoint: ""
bucket: ""
accessKeyId: ""
accessKeySecret: ""
baseUrl: ""
private: false
signedUrlExpireSeconds: 600
vectorDB:
type: lancedb
qdrant:
host: qdrant
grpcPort: 6334
apiKey: ""
useTls: false
lancedb:
path: /app/data/lancedb
mcp:
enabled: true
servers:
system:
enabled: true
endpoint: http://127.0.0.1:8083/api/mcp
timeoutMs: 60000
headers: {}
wxWork:
enabled: false
oidc:
enabled: false
customerSession:
secret: change-me
ttlMinutes: 120
refreshThresholdMinutes: 30