Add Docker deployment support with compose, entrypoint and docs
- Add Dockerfile (pre-built binary) and Dockerfile.source - Add docker-compose.yml, docker-compose.prod.yml, docker-compose.override.yml - Add docker-entrypoint.sh with non-root user support - Add .dockerignore and helper scripts (scripts/docker-build.sh, scripts/docker-run.sh) - Add docs/en/docker.md with full Docker guide - Update docs/en/deployment.md and README.md - Fix src/barabadb/core/config.nim to read BARADB_ADDRESS, BARADB_PORT, BARADB_DATA_DIR from env - Fix src/barabadb/core/httpserver.nim missing wire import
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# ┌─────────────────────────────────────────────────────────┐
|
||||
# │ 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.2-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="0.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"]
|
||||
Reference in New Issue
Block a user