---
title: Desenvolvimento
slug: studio/desenvolvimento
docTags: 
createdAt: 2026-04-28T18:37:53.875Z
---

# <font color="#DA8D35">Desenvolvimento </font>

## <font color="#DA8D35">1 - Pré-requisitos </font>

- Docker e Docker Compose instalados&#x20;
- Tempo de execução Bun instalado <font color="#DA8D35">() </font>
- Repositório Lowcode Studio clonado&#x20;
- Repositório Tauri do Motor Lowcode clonado (opcional, para funcionalidade de pré-visualização)&#x20;

***

## <font color="#DA8D35">2 - Instalação </font>

### <font color="#DA8D35">2.1 - Dependências de Instalação </font>

A partir da raiz do projeto, instale todas as dependências do workspace:

:::BlockQuote
bun install
:::

***

### <font color="#DA8D35">2.2 - Iniciar Serviços de Infraestrutura </font>

Lowcode Studio requer PostgreSQL e Redis. A é fornecido na raiz do projeto\:docker-compose.yml

:::BlockQuote
docker compose up -d
:::

Começa assim:

- <font color="#DA8D35">**PostgreSQL 17**</font> na porta (usuário: , senha: `5432` `run2biz` `run2biz`)&#x20;
- <font color="#DA8D35">**PgBouncer** </font>na porta (pooler de conexão para PostgreSQL, modo transação) `6432`&#x20;
- <font color="#DA8D35">**Redis 7**</font> na porta (senha: `6379` `run2biz`)&#x20;
-

:::hint{type="info" indent="2"}
📌 A API se conecta via PgBouncer (porta) em vez de diretamente ao PostgreSQL (porta). O PgBouncer oferece pooling de conexões no modo de transação, essencial para cargas de trabalho multi-inquilino. `6432` `5432`
:::

***

### <font color="#DA8D35">2.3 - Configuração do Ambiente</font>

<font color="#DA8D35">**Configuração do servidor** </font>

Crie um arquivo no diretório após o modelo. `.env/` `server` `.env` `.example`

Para desenvolvimento local, configure o banco de dados e URLs do Redis apontando para via PgBouncer: `localhost`

```javascript
DATABASE_URL=postgresql://run2biz:run2biz@localhost:6432/postgres
REDIS_URL=redis://default:run2biz@localhost:6379
```

:::hint{type="warning"}
❗ <font color="#EF4444">**Não** </font>inclua no — o PgBouncer no modo de transação não suporta parâmetros de inicialização. O esquema de Drizzle já é qualificado com , então todas as consultas são prefixadas automaticamente. `search_path` `DATABASE_URL` `pgSchema("lowcode_studio")`

Migrações de banco de dados usam que reescrevem a porta de para conectar diretamente ao PostgreSQL (contornando o PgBouncer), já que precisa do parâmetro de inicialização. `drizzle.config.ts` `6432` `5432` `drizzle-kit` `search_path`
:::

::::hint{type="warning"}
📌 Ao rodar dentro do Docker (por exemplo, via Edge-runtime), use os nomes de host dos contêineres:

:::BlockQuote
DATABASE\_URL=postgresql://run2biz\:run2biz\@pgbouncer:6432/postgres
REDIS\_URL=redis\://default\:run2biz\@redis:6379
:::
::::



<font color="#DA8D35">**Configuração do Cliente** </font>

Crie um arquivo no diretório após o modelo. `.env` `/client` `.env` `.example`

Para desenvolvimento local, o cliente aponta diretamente para a API do servidor:

```javascript
VITE_API_URL=http://localhost:8080/api
VITE_ENGINE_URL=http://localhost:1420/tauri-engine
```

| <font color="#DA8D35">**Variável**</font> | <font color="#DA8D35">**Descrição**</font>         | <font color="#DA8D35">**Padrão**</font> |
| ----------------------------------------- | -------------------------------------------------- | --------------------------------------- |
| `VITE_API_URL`                            | URL completa para o servidor API do Lowcode Studio | `/lowcode-studio-api/api` (produção)    |
| `VITE_ENGINE_URL`                         | URL onde a Tauri Engine é servida                  | `/tauri-engine` (produção)              |

:::hint{type="warning"}
📌 Em produção, ambos e usam caminhos relativos porque a API e o motor são servidos pela mesma origem em tempo de execução de borda. No desenvolvimento local, eles devem apontar para as URLs reais dos serviços, já que não há proxy reverso.

`VITE_API_URL` `VITE_ENGINE_URL`
:::

***

### <font color="#DA8D35">2.4 - Executar migrações de banco de dados </font>

Após iniciar o PostgreSQL, execute as migrações do banco de dados:

:::BlockQuote
cd server
bun run db\:migrate
:::

***

### <font color="#DA8D35">2.5 - Iniciar Servidores de Desenvolvimento </font>

A partir da raiz do projeto, inicie tanto o cliente quanto o servidor simultaneamente:

:::BlockQuote
bun run dev
:::

Começa assim:

- <font color="#DA8D35">**Servidor** </font>(Hono API): `http://localhost:8080`&#x20;
- <font color="#DA8D35">**Cliente** </font>(Vite): `http://localhost:4000`&#x20;

Você também pode começar individualmente:

:::BlockQuote
bun run dev\:client  *# Vite dev server on port 4000*
bun run dev\:server  *# Hono server with --hot flag on port 8080*
:::



<font color="#DA8D35">**Iniciar o motor Tauri (opcional)** </font>

Para usar o recurso de pré-visualização móvel, inicie o servidor de desenvolvimento do Tauri Engine em seu próprio repositório:

:::BlockQuote
cd /path/to/lowcode-engine-tauri
bun run dev
:::

Isso serve ao motor em `.http://localhost:1420/tauri-engine`

Veja Integração do Motor para detalhes da configuração do Motor Tauri.

***

### <font color="#DA8D35">2.6. Definir o Cookie de Autenticação </font>

A aplicação requer um token JWT válido. Defina o cookie no seu navegador para `.HYPER-AUTH-TOKENlocalhost:4000`



Você pode fazer isso via `DevTools `do navegador:

:::Paragraph{listStyleType="decimal" indent="2"}
Abra no seu navegador [<font color="#DA8D35">http\://localhost\:4000</font>](http://localhost:4000)
:::

:::Paragraph{listStyleType="decimal" listStart="2" indent="2"}
Abrir DevTools → Cookies de Aplicação → → [<font color="#DA8D35">http\://localhost\:4000</font>](http://localhost:4000)
:::

:::Paragraph{listStyleType="decimal" listStart="3" indent="2"}
Adicione um cookie com nome e um token JWT válido como valor `HYPER-AUTH-TOKEN`
:::

Alternativamente, se o tempo de execução de borda estiver disponível, use o endpoint set-cookie:

:::BlockQuote
http\://localhost:3000/set-cookie?token=YOUR\_TOKEN\_HERE
:::

***

### <font color="#DA8D35">2.7. Acesse ao Lowcode Studio </font>

Quando ambos os serviços estiverem em execução, acesse o Lowcode Studio em:

:::BlockQuote
http\://localhost:4000
:::

***

## <font color="#DA8D35">3. Notas de Arquitetura </font>

***

### <font color="#DA8D35">3.1. Stack de Middleware de Servidor </font>

O middleware da API executa nesta ordem:

:::Paragraph{listStyleType="decimal" indent="2"}
`prettyJSON `→ → `trimTrailingSlashcors `
:::

:::Paragraph{listStyleType="decimal" listStart="2" indent="2"}
`/health` endpoint (não autenticado)&#x20;
:::

:::Paragraph{listStyleType="decimal" listStart="3" indent="2"}
`/webhooks` Rotas (não autenticadas)&#x20;
:::

:::Paragraph{listStyleType="decimal" listStart="4" indent="2"}
`setTenantDb` → validateToken&#x20;
:::

:::Paragraph{listStyleType="decimal" listStart="5" indent="2"}
Rotas de domínio (, , , `/components/projects/permissions/users`)&#x20;
:::

:::hint{type="warning"}
📌 O middleware CORS é colocado antes da autenticação para garantir que as solicitações de pré-voo tenham sucesso. Isso é essencial quando o cliente e o servidor rodam em origens diferentes (por exemplo, e ).OPTIONSlocalhost:4000localhost:8080
:::

***

### <font color="#DA8D35">3.2. Solicitações de Origem Cruzada </font>

No desenvolvimento local, o cliente () faz requisições diretas ao servidor (). Isso exige: `localhost:4000localhost:8080`

- <font color="#DA8D35">**Servidor**\:</font> CORS configurado com origem dinâmica e `credentials: true `
- <font color="#DA8D35">**Cliente**\:</font> Todas as solicitações de busca incluem enviar cookies de origem cruzada `credentials: "include" `
- <font color="#DA8D35">**Tauri Engine**\:</font> Usa em seu cliente HTTP pelo mesmo motivo `withCredentials: true `

Em produção, todos os serviços estão atrás da mesma origem (tempo de execução de borda), então a origem cruzada não é um problema.

***

## <font color="#DA8D35">4. Implantação via tempo de execução de borda </font>

Para implantação via Edge-runtime (configuração semelhante a produção), consulte a integração original Edge-runtime:

***

### <font color="#DA8D35">4.1. Configurar o Volume do Docker </font>

No runtime do Edge, adicione o volume correspondente para o servidor Lowcode Studio: `docker-compose.yml`

```javascript
volumes:
  - ../edge-functions/lowcode-studio/server:/home/deno/functions/lowcode-studio-api/1.0.0
```

***

### <font color="#DA8D35">4.2. Iniciar Serviços de Execução em Borda </font>

Navegue até o diretório raiz Edge-runtime e execute:

```javascript
docker-compose up -d --build
```

:::hint{type="warning"}
📌 Ao iniciar, o tempo de execução da borda irá automaticamente:

- Executar migrações de banco de dados&#x20;
- Configure o esquema necessário para o Lowcode Studio&#x20;
- Preencher dados iniciais de seed&#x20;
:::



Uma vez em execução, acesse o Lowcode Studio via Edge-runtime em:

:::BlockQuote
http\://localhost:3000
:::

***

## <font color="#DA8D35">5. Solução de problemas </font>

***

### <font color="#DA8D35">5.1. Problemas de Conexão com Banco de Dados </font>

Se você encontrar erros na conexão do banco de dados:

1. Verifique se o PostgreSQL está rodando: `docker compose ps`&#x20;
2. Confirme que o parâmetro está corretamente definido em `search_pathDATABASE_URL `
3. Verifique se o esquema existe no banco de dados `lowcode_studio`&#x20;
4. Certifique-se de estar usando (desenvolvedor local) ou o nome de host Docker (container) `localhost:5432 `

***

### <font color="#DA8D35">5.2. Falhas na migração </font>

Se as migrações falharem em executar:

1. Verifique se o PostgreSQL está acessível:`  docker compose logs postgres  `
2. Verificar credenciais de banco de dados em `server/.env`&#x20;
3. Certifique-se de que o formato da URL do banco de dados esteja correto&#x20;
4. Execute migrações manualmente: `cd server && bun run db:migrate `

***

### <font color="#DA8D35">5.3. Problemas de Conexão com o Cliente </font>

Se o cliente não conseguir se conectar à API:

1. Verifique se o servidor está rodando na porta 8080&#x20;
2. Verifique os pontos de entrada para `VITE_API_URLclient/.envhttp://localhost:8080/api `
3. Verifique o console do navegador para erros CORS — certifique-se de que o middleware CORS do servidor esteja antes da autenticação&#x20;
4. Verifique se o cookie está configurado para o domínio correto `HYPER-AUTH-TOKEN `

***

### <font color="#DA8D35">5.4. Prévia Não Funcionando </font>

Se a prévia móvel mostrar "Projeto não encontrado":

1. Verifique se o Motor Tauri está rodando em [`http://localhost:1420/tauri-engine`](http://localhost:1420/tauri-engine)&#x20;
2. Pontos de verificação para `VITE_ENGINE_URLclient/.env` [`http://localhost:1420/tauri-engine`](http://localhost:1420/tauri-engine)&#x20;
3. Verifique se a Tauri Engine tem e `.env` `VITE_API_URL=http://localhost:8080/api` `VITE_ENGINE_MODE=PREVIEW`&#x20;
4. Verifique no console do navegador para erros de CORS ou autenticação&#x20;
5. Certifique-se de que o cliente HTTP do Tauri Engine esteja ativado `withCredentials: true `

![](https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/-4_SDcjt_aznvASbRyZ46-20260601-191750.gif)

