Guias por framework

Sites estáticos e SPAs

Frameworks como Vite, Create React App, Vue, Angular e Astro (modo estático) geram uma pasta de arquivos HTML, CSS e JavaScript. Na Zenifra, um servidor HTTP leve entrega essa pasta.

Qual caminho escolher

CaminhoVantagemIdeal para
GitHub + Node.js com serveSem Dockerfile, publicação a cada pushA maioria dos sites e SPAs
Imagem OCI com NGINXControle total de cache, headers e redirecionamentosQuem já usa NGINX ou precisa de regras avançadas

Opção 1: GitHub com o runtime Node.js

Adicione o serve como dependência:

npm install serve

Confira a pasta gerada pela build do seu framework:

FrameworkPasta
Vite (React, Vue, Svelte)dist
Create React Appbuild
Angular 17+dist/<nome-do-projeto>/browser
Astro (estático)dist

Preencha o projeto no console:

CampoValor
RuntimeNode.js
Porta3000
buildnpm run build
startnpx serve -s dist -l tcp://0.0.0.0:3000

Troque dist pela pasta da tabela anterior.

A opção -s faz o serve responder com o index.html para rotas desconhecidas, o que é necessário para SPAs com React Router, Vue Router ou Angular Router. Em sites com várias páginas HTML, como Astro, remova o -s.

Variáveis de ambiente em sites estáticos

Variáveis como VITE_API_URL são embutidas no JavaScript durante a build. Na Zenifra, as variáveis do projeto existem na build, então funcionam normalmente. Depois de alterar uma delas, faça uma nova publicação para gerar outro pacote. Nunca coloque segredos nessas variáveis: elas ficam visíveis no navegador.

Opção 2: Imagem OCI com NGINX

Use a imagem oficial do NGINX, que escuta na porta 80:

Dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
ARG VITE_API_URL
ENV VITE_API_URL=$VITE_API_URL
RUN npm run build

FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
nginx.conf
server {
  listen 80;
  root /usr/share/nginx/html;

  location /assets/ {
    expires 1y;
    add_header Cache-Control "public, immutable";
  }

  location / {
    try_files $uri $uri/ /index.html;
  }
}

Construa, publique no seu registry e crie um projeto Imagem OCI com Porta 80. Veja Dockerfiles prontos para os comandos de build e push e Deploy via imagem OCI para os campos do console.

Domínio e HTTPS

O projeto recebe uma URL *.clients.zenifra.com com HTTPS. Para usar o seu domínio, siga Domínio personalizado.

Problemas comuns

SintomaCorreção
Página em branco e erros 404 para .jsPasta errada no start ou base incorreto no vite.config
Rota como /login retorna 404 ao recarregarUse serve -s ou try_files ... /index.html
Variável VITE_* vaziaCadastre antes da build e publique de novo
serve: not foundserve não está em dependencies

Próximos passos

Última atualização em

Nessa página