Início rápido

Início rápido — Com banco de dados

Publique uma aplicação Node.js conectada a um banco PostgreSQL gerenciado.

Nota: Este quickstart foca em PostgreSQL. Para MariaDB, use os guias específicos dessa engine.

Passo 1 — Crie o banco PostgreSQL

  1. No console, crie um banco PostgreSQL gerenciado.
  2. Escolha a versão desejada entre as opções disponíveis no console.
  3. Copie a URI completa ou os dados de conexão exibidos.
  4. Guarde a URI para configurar a variável DATABASE_URL no projeto HTTP.

Importante: A Zenifra não injeta DATABASE_URL automaticamente na sua aplicação. Essa configuração deve ser feita manualmente no projeto HTTP antes da publicação ou em um novo deploy.

Passo 2 — Crie sua aplicação

mkdir zenifra-api
cd zenifra-api
npm init -y
npm install express pg dotenv

Crie index.js:

const express = require('express');
const { Pool } = require('pg');
const app = express();
app.use(express.json());

// Conecta ao PostgreSQL gerenciado usando a ENV configurada manualmente no console
const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
});

app.get('/health', (req, res) => {
  res.json({ status: 'ok' });
});

app.get('/', async (req, res, next) => {
  let client;

  try {
    client = await pool.connect();
    const { rows } = await client.query('SELECT NOW() as now');
    res.json({ database_time: rows[0].now });
  } catch (error) {
    next(error);
  } finally {
    if (client) client.release();
  }
});

app.post('/todos', async (req, res, next) => {
  const { task } = req.body;
  let client;

  try {
    client = await pool.connect();
    await client.query(
      'CREATE TABLE IF NOT EXISTS todos (id SERIAL PRIMARY KEY, task TEXT, done BOOLEAN DEFAULT false)'
    );
    const { rows } = await client.query('INSERT INTO todos (task) VALUES ($1) RETURNING *', [task]);
    res.status(201).json(rows[0]);
  } catch (error) {
    next(error);
  } finally {
    if (client) client.release();
  }
});

app.use((error, req, res, next) => {
  console.error(error);
  res.status(500).json({ error: 'Internal server error' });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, '0.0.0.0', () => {
  console.log(`API running on port ${PORT}`);
});

Passo 3 — Publique via GitHub

  1. Crie um repositório no GitHub.
  2. No console, escolha Origem de Projeto como Repositório GitHub.
  3. No campo de runtime, selecione Node.js.
  4. No campo Porta, informe 3000.
  5. Configure a variável de ambiente DATABASE_URL com a URI do PostgreSQL criada no passo 1.
  6. Configure os comandos de build e start do projeto.
  7. Se desejar atualização automática por push, habilite auto-deploy na criação.
  8. Selecione a branch principal e clique em Criar Projeto.
  9. Faça push do código para a branch escolhida.

Se o projeto HTTP já existir, salve a variável DATABASE_URL nele e publique uma nova versão para que a aplicação leia a ENV atualizada.

Passo 4 — Teste

Use a URL do projeto em *.clients.zenifra.com e valide a aplicação.

Verifique se a aplicação está no ar:

curl https://seu-projeto.clients.zenifra.com/health

Verifique a conexão com o banco:

curl https://seu-projeto.clients.zenifra.com/

Crie um item para validar escrita no PostgreSQL:

curl -X POST https://seu-projeto.clients.zenifra.com/todos \
  -H 'Content-Type: application/json' \
  -d '{"task":"Build something cool"}'

Resposta:

{ "id": 1, "task": "Build something cool", "done": false }

Variáveis de ambiente

Para esse fluxo, configure manualmente pelo menos estas variáveis e campos:

VariávelDescrição
DATABASE_URLString de conexão do PostgreSQL copiada do console
PortaCampo da criação do projeto HTTP, que deve refletir a porta usada pela aplicação
ZENIFRA_INSTANCE_VERSIONVariável injetada pela Zenifra com a versão da instância publicada

Acesso ao banco

Use a URI completa ou os dados de conexão fornecidos no console para conectar sua aplicação ou ferramentas externas ao PostgreSQL gerenciado.