79 lines
2.1 KiB
Docker
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"]
|