# ========================================================= # 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", "--"]