Files
CollectFlow/Dockerfile
T

58 lines
2.1 KiB
Docker

# CollectFlow — image de production.
#
# 1. web : compile l'interface React (Vite) en fichiers statiques.
# 2. server : compile le serveur Rust (binaire unique, optimisé).
# 3. runner : Debian minimale + Chromium (extraction Qlik) + les deux livrables.
#
# L'image est construite et publiée par GitHub Actions à chaque push sur main
# (ghcr.io/r0m1k3/collectflow:latest) ; docker-compose la tire au démarrage.
# ---------------------------------------------------------------------------
FROM node:22-alpine AS web
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --no-audit --no-fund
COPY . .
RUN npm run build
# ---------------------------------------------------------------------------
FROM rust:1-bookworm AS server
WORKDIR /build
# Dépendances d'abord : couche réutilisée tant que Cargo.lock ne change pas.
COPY server/Cargo.toml server/Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs \
&& cargo build --release --locked \
&& rm -rf src target/release/deps/collectflow* target/release/collectflow*
COPY server/ ./
RUN cargo build --release --locked && cp target/release/collectflow /collectflow
# ---------------------------------------------------------------------------
FROM debian:bookworm-slim AS runner
WORKDIR /app
# Chromium pour l'extraction Qlik (websocket Engine ouvert dans la page) + polices.
RUN apt-get update \
&& apt-get install -y --no-install-recommends chromium ca-certificates fonts-liberation fonts-freefont-ttf tzdata \
&& rm -rf /var/lib/apt/lists/*
# Même UID/GID que l'ancienne image Node : le volume /app/data existant reste lisible.
RUN groupadd --system --gid 1001 collectflow \
&& useradd --system --uid 1001 --gid collectflow --home-dir /app collectflow \
&& mkdir -p /app/data \
&& chown -R collectflow:collectflow /app
COPY --from=server /collectflow /app/collectflow
COPY --from=web --chown=collectflow:collectflow /app/dist /app/web
ENV PORT=5643 \
HOSTNAME=0.0.0.0 \
DATA_DIR=/app/data \
STATIC_DIR=/app/web \
PLAYWRIGHT_CHROMIUM_PATH=/usr/bin/chromium
USER collectflow
EXPOSE 5643
VOLUME ["/app/data"]
CMD ["/app/collectflow"]