# ┌─────────────────────────────────────────────────────────┐ # │ BaraDB — Multimodal Database Engine │ # │ Dockerfile.source (build from source) │ # └─────────────────────────────────────────────────────────┘ # # Този Dockerfile build-ва BaraDB от source код. # ВНИМАНИЕ: Изисква локални nimble пакети (hunos, nimmax), които # не са в публичния nimble repository. Преди build трябва да: # 1. symlink-нете или копирате hunos/ и nimmax/ в проекта, или # 2. копирате ~/.nimble/pkgs2 в builder стейджа. # # Build: # docker build -f Dockerfile.source -t baradb:latest . # ─── Stage 1: Builder ───────────────────────────────────── FROM nimlang/nim:2.2.10-alpine AS builder WORKDIR /build # Инсталираме build зависимости RUN apk add --no-cache git gcc musl-dev openssl-dev pcre-dev # Копираме nimble файл и инсталираме публични зависимости COPY baradadb.nimble . RUN nimble install -d -y || true # Копираме целия изходен код COPY src/ src/ COPY *.nim . # Компилираме release binary # Забележка: Ако липсват локални пакети (hunos), този ред ще се провали. RUN nim c -d:release --opt:speed -d:ssl -o:baradadb src/baradadb.nim # Компилираме backup tool RUN nim c -d:release -o:backup src/barabadb/core/backup.nim # ─── Stage 2: Production Runtime ────────────────────────── FROM alpine:3.19 LABEL maintainer="BaraDB Team" LABEL description="BaraDB — Multimodal Database Engine (source build)" LABEL version="1.1.0" # Инсталираме runtime зависимости RUN apk add --no-cache ca-certificates su-exec wget pcre # Създаваме dedicated потребител за сигурност RUN addgroup -g 1000 -S baradb && \ adduser -u 1000 -S baradb -G baradb WORKDIR /app # Копираме компилираните бинарни файлове COPY --from=builder /build/baradadb /app/baradadb COPY --from=builder /build/backup /app/backup # Копираме entrypoint скрипта COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod +x /usr/local/bin/docker-entrypoint.sh # Създаваме data директория и symlink за съвместимост с default dataDir=./data RUN mkdir -p /data && chown baradb:baradb /data && \ ln -s /data /app/data && chown -h baradb:baradb /app/data # Environment variables (defaults) ENV BARADB_ADDRESS=0.0.0.0 ENV BARADB_PORT=9472 ENV BARADB_HTTP_PORT=9470 ENV BARADB_WS_PORT=9471 ENV BARADB_DATA_DIR=/data ENV BARADB_LOG_LEVEL=info # Expose ports EXPOSE 9472 9470 9471 # Volume за persistent data VOLUME ["/data"] # Healthcheck HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \ CMD wget -q --spider http://localhost:${BARADB_HTTP_PORT}/health || exit 1 # Стартираме чрез entrypoint ENTRYPOINT ["docker-entrypoint.sh"] CMD ["./baradadb"]