feat: add frontend, nginx reverse proxy and monitoring/reports extras
- apps/frontend: Next.js 15 (App Router) + Tailwind v4 + componentes estilo shadcn/ui sobre Radix UI + TanStack Query. Tema light/dark, logo processada. Menu completo (secao 52) com gating por permissao real. Todas as telas do checklist de aceite (secao 90) conectadas a endpoints reais (nao mockup): login, usuarios, perfis/permissoes, ramais/troncos, dialplan, filas/agentes, console do agente, campanhas (CPS/CSV/ iniciar/pausar), monitoramento ao vivo (polling, nao WebSocket real), TME/TMA, busca/export de chamadas, administracao do Asterisk, auditoria - infrastructure/nginx: reverse proxy colocando frontend+API na mesma origem (porta 80), antecipado da Fase 9 pois a API nao publica porta propria - apps/api: GET /api/monitoring/agents (estado corrente real via agent_state_events em aberto) e filtro queueId em GET /api/reports/calls Pendencia registrada: tela de Callbacks nao implementada (schema existe desde a Fase 6, mas nunca houve controller/service — construir a tela sem API real seria mockup). Verificacao visual em navegador nao foi possivel neste ambiente headless; validado via tsc/eslint/next build limpos + curl reproduzindo as chamadas do navegador (middleware de auth, 24 paginas protegidas via Nginx, endpoints de dados com cookie de sessao).
This commit is contained in:
36
infrastructure/docker/frontend.Dockerfile
Normal file
36
infrastructure/docker/frontend.Dockerfile
Normal file
@@ -0,0 +1,36 @@
|
||||
# apps/frontend — Next.js (App Router), monorepo pnpm, output standalone.
|
||||
FROM node:24-slim AS build
|
||||
|
||||
RUN corepack enable && corepack prepare pnpm@11.24.0 --activate
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
|
||||
COPY apps/frontend/package.json apps/frontend/package.json
|
||||
|
||||
RUN pnpm install --frozen-lockfile --filter @b2bcall/frontend...
|
||||
|
||||
COPY apps/frontend apps/frontend
|
||||
|
||||
RUN pnpm --filter @b2bcall/frontend build
|
||||
|
||||
# --- runtime -------------------------------------------------------------
|
||||
FROM node:24-slim AS runtime
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=3000
|
||||
ENV HOSTNAME=0.0.0.0
|
||||
WORKDIR /app
|
||||
|
||||
RUN groupadd -r b2bcall && useradd -r -g b2bcall b2bcall
|
||||
|
||||
# next.config.ts com output:"standalone" produz uma árvore mínima com só o
|
||||
# necessário para rodar. Em monorepo pnpm o resultado preserva a estrutura
|
||||
# apps/frontend + node_modules na raiz com symlinks relativos para o pnpm
|
||||
# store — por isso a árvore inteira é copiada sem "achatar" os diretórios,
|
||||
# senão os symlinks (../../../node_modules/.pnpm/...) apontam para fora.
|
||||
COPY --from=build /app/apps/frontend/.next/standalone ./
|
||||
COPY --from=build /app/apps/frontend/.next/static ./apps/frontend/.next/static
|
||||
COPY --from=build /app/apps/frontend/public ./apps/frontend/public
|
||||
|
||||
USER b2bcall
|
||||
EXPOSE 3000
|
||||
CMD ["node", "apps/frontend/server.js"]
|
||||
Reference in New Issue
Block a user