Files
rodrigo d4e1b297ae implementação de mudança de interface
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
2026-03-30 09:53:11 -03:00

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