# ┌─────────────────────────────────────────────────────────┐ # │ BaraDB — Multimodal Database Engine │ # │ Dockerfile.source (build from source) │ # └─────────────────────────────────────────────────────────┘ # # Този Dockerfile build-ва BaraDB от source код. # ВНИМАНИЕ: Изисква локален nimble пакет (hunos), който # не е в публичния nimble repository. Преди build трябва да: # 1. symlink-нете или копирате hunos/ в проекта, или # 2. копирате ~/.nimble/pkgs2 в builder стейджа. # # Build: # docker build -f Dockerfile.source -t baradb:latest . # ─── Stage 1: Builder ───────────────────────────────────── FROM nimlang/nim:2.2.10 AS builder WORKDIR /build # Копираме 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 --path:src -o:backup src/barabadb/core/backup.nim # ─── Stage 2: Production Runtime ────────────────────────── FROM ubuntu:24.04 LABEL maintainer="BaraDB Team" LABEL description="BaraDB — Multimodal Database Engine (source build)" LABEL version="1.1.6" # Инсталираме runtime зависимости RUN apt-get update && \ apt-get install -y --no-install-recommends \ libpcre3 \ ca-certificates \ wget \ gosu && \ rm -rf /var/lib/apt/lists/* # Създаваме dedicated потребител за сигурност RUN groupadd -r baradb && \ useradd -r -g baradb 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 # Note: HTTP port = TCP port + 440 (9912 when TCP=9472) # Note: WS port = TCP port + 441 (9913 when TCP=9472) ENV BARADB_DATA_DIR=/data ENV BARADB_LOG_LEVEL=info # Expose ports EXPOSE 9472 9912 9913 # Volume за persistent data VOLUME ["/data"] # Healthcheck HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://localhost:9912/health >/dev/null 2>&1 || exit 1 # Стартираме чрез entrypoint ENTRYPOINT ["docker-entrypoint.sh"] CMD ["./baradadb"]