69 lines
2.2 KiB
Docker
69 lines
2.2 KiB
Docker
# =========================================================
|
|
# GenieACS — UniFi Theme Fork
|
|
# Multi-stage build:
|
|
# Stage 1 (builder): instala devDeps + compila o projeto
|
|
# Stage 2 (runtime): imagem mínima só com dist/ + prodDeps
|
|
# =========================================================
|
|
|
|
# ── Stage 1: builder ─────────────────────────────────────
|
|
FROM node:20-alpine AS builder
|
|
|
|
# Dependências de sistema necessárias para o build
|
|
# (git é exigido pelo build.ts para calcular o metadata de versão)
|
|
RUN apk add --no-cache git python3 make g++
|
|
|
|
WORKDIR /build
|
|
|
|
# Copiar manifests primeiro para cache de camadas do npm install
|
|
COPY package.json npm-shrinkwrap.json ./
|
|
|
|
# Instalar TODAS as dependências (incluindo devDependencies)
|
|
RUN npm ci --fund=false --audit=false
|
|
|
|
# Copiar o restante do fonte
|
|
COPY . .
|
|
|
|
# Compilar o projeto (gera dist/)
|
|
RUN npm run build
|
|
|
|
# ── Stage 2: runtime ─────────────────────────────────────
|
|
FROM node:20-alpine AS runtime
|
|
|
|
# Timezone e utilitários mínimos
|
|
RUN apk add --no-cache tzdata dumb-init
|
|
|
|
WORKDIR /opt/genieacs
|
|
|
|
# Copiar artefatos compilados
|
|
COPY --from=builder /build/dist ./
|
|
|
|
# Instalar apenas dependências de produção a partir do dist/
|
|
RUN npm ci --omit=dev --fund=false --audit=false
|
|
|
|
# Criar diretórios de configuração e extensões
|
|
RUN mkdir -p \
|
|
/opt/genieacs/config/ext \
|
|
/opt/genieacs/logs \
|
|
&& addgroup -S genieacs \
|
|
&& adduser -S -G genieacs genieacs \
|
|
&& chown -R genieacs:genieacs /opt/genieacs
|
|
|
|
USER genieacs
|
|
|
|
# Variáveis de ambiente padrão (sobrescreva no compose ou .env)
|
|
ENV GENIEACS_MONGODB_CONNECTION_URL=mongodb://mongo:27017/genieacs \
|
|
GENIEACS_EXT_DIR=/opt/genieacs/config/ext \
|
|
GENIEACS_LOG_FORMAT=json \
|
|
GENIEACS_ACCESS_LOG_FORMAT=json \
|
|
GENIEACS_UI_JWT_SECRET=change-me-in-production \
|
|
GENIEACS_CWMP_WORKER_PROCESSES=1 \
|
|
GENIEACS_NBI_WORKER_PROCESSES=1 \
|
|
GENIEACS_FS_WORKER_PROCESSES=1 \
|
|
GENIEACS_UI_WORKER_PROCESSES=1
|
|
|
|
# Expor todas as portas dos serviços
|
|
EXPOSE 3000 7547 7557 7567
|
|
|
|
# dumb-init garante propagação correta de sinais
|
|
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|