Files
2026-06-24 14:13:09 +00:00

79 lines
2.1 KiB
Docker

# Chatc2 — Dockerfile
# Multi-stage: build (whisper.cpp compilação) + runtime (Node + Firebird client)
#
# Build:
# docker build -t chatc2 .
#
# Run (com docker-compose):
# docker compose up -d
# ============================================================
# STAGE 1: Compilar whisper.cpp
# ============================================================
FROM alpine:3.20 AS whisper-builder
RUN apk add --no-cache git make g++ cmake
WORKDIR /build
RUN git clone --depth 1 https://github.com/ggerganov/whisper.cpp.git && \
cd whisper.cpp && \
cmake -B build && \
cmake --build build --config Release -j $(nproc)
# Baixa modelo tiny
RUN cd /build/whisper.cpp && \
mkdir -p models && \
wget -q -O models/ggml-tiny.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.bin
# ============================================================
# STAGE 2: Runtime Node.js
# ============================================================
FROM node:22-alpine
# Dependências do sistema: Firebird client, ffmpeg
RUN apk add --no-cache \
firebird-dev \
ffmpeg \
cmake \
make \
g++ \
python3
WORKDIR /app
# Copia package.json e instala dependências
COPY package.json package-lock.json ./
RUN npm ci --omit=dev && npm cache clean --force
# Copia código fonte
COPY src/ ./src/
COPY scripts/ ./scripts/
COPY public/ ./public/
# Copia whisper.cpp compilado e modelo
COPY --from=whisper-builder /build/whisper.cpp/build/bin/main /app/whisper/main
COPY --from=whisper-builder /build/whisper.cpp/models/ggml-tiny.bin /app/whisper/models/ggml-tiny.bin
# Copia configuração PM2
COPY ecosystem.config.js ./
# Diretórios de runtime
RUN mkdir -p /app/db /app/logs /app/uploads/audio /app/tmp
# Variáveis padrão (sobrescrever no docker-compose ou .env)
ENV PORT=3000 \
NODE_ENV=production \
DB_HOST=firebird \
DB_PORT=3050 \
DB_DATABASE=/app/db/NOVO.FDB \
DB_USER=SYSDBA \
DB_PASSWORD=masterkey
EXPOSE 3000
# Healthcheck
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD wget -qO- http://localhost:3000/api/novo_local/health || exit 1
CMD ["node", "src/server.js"]