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:
2026-05-06 23:58:43 +03:00
parent 9b7ed1fca8
commit b6cdf8c88e
14 changed files with 764 additions and 80 deletions
+69 -13
View File
@@ -1,18 +1,74 @@
FROM nim:2.2-alpine AS builder
WORKDIR /build
COPY baradadb.nimble .
COPY src/ src/
RUN nimble install -d -y || true
RUN nim c -d:release --opt:speed -o:baradadb src/baradadb.nim
# ┌─────────────────────────────────────────────────────────┐
# │ BaraDB — Multimodal Database Engine │
# │ Dockerfile (pre-built binary, production-ready) │
# └─────────────────────────────────────────────────────────┘
#
# Този Dockerfile използва вече компилиран binary от build/.
# За build от source вижте Dockerfile.source
#
# Build:
# docker build -t baradb:latest .
#
# Run:
# docker run -d -p 9472:9472 -p 9470:9470 -p 9471:9471 -v baradb_data:/data baradb:latest
FROM debian:bookworm-slim
LABEL maintainer="BaraDB Team"
LABEL description="BaraDB — Multimodal Database Engine"
LABEL version="0.1.0"
# Инсталираме runtime зависимости
# libpcre3 — нужна за Nim regex (зарежда се динамично)
# ca-certificates — за TLS връзки
# wget — за healthcheck
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 -g 1000 baradb && \
useradd -r -u 1000 -g baradb baradb
FROM alpine:latest
WORKDIR /app
COPY --from=builder /build/baradadb .
RUN mkdir -p /data
ENV BARADB_PORT=9000
# Копираме компилираните бинарни файлове
COPY build/baradadb /app/baradadb
COPY 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_HTTP_PORT=9470
ENV BARADB_WS_PORT=9471
EXPOSE 9000 9470 9471
ENV BARADB_LOG_LEVEL=info
# Expose ports
# 9472 — Binary wire protocol
# 9912 — HTTP/REST API (9472 + 440)
# 9913 — WebSocket (9472 + 441)
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 (който пуска като baradb потребител)
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["./baradadb"]