> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zapmeow.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy na Railway

> Um serviço Go + um Postgres + um volume.

> [!WARNING]
>
> O deploy de produção só acontece com o OK do responsável. Antes, valide tudo local.

## Passo a passo

1. **Projeto:** crie um projeto na Railway e adicione o plugin **PostgreSQL**.

2. **Serviço:** `New › GitHub Repo › eduardocarezia/zapmeow`. A Railway lê `railway.json` e usa o `Dockerfile`.

3. **Variáveis do serviço:**

   | Variável | Valor |
   | - | - |
   | `DATABASE_URL` | `${{Postgres.DATABASE_URL}}` |
   | `ZAPMEOW_API_KEY` | chave aleatória de 32+ caracteres |
   | `PUBLIC_URL` | `https://<domínio-do-serviço>` |
   | `DATA_DIR` | `/data` |
   | `RAILWAY_RUN_UID` | `0` (o volume nasce como root; o processo roda como `zm` e sem isso não grava mídia) |
   | `ZAPMEOW_ADMIN_KEY` | chave aleatória de 32+ caracteres, diferente da `ZAPMEOW_API_KEY` (liga `/admin`, tenants e o painel) |
   | `ZAPMEOW_MASTER_KEY` | `openssl rand -hex 32` (cifra o cofre; **guarde uma cópia**: sem ela os segredos gravados não abrem) |
   | `ZAPMEOW_VOICE` | `1` só quando for testar ligação; veja o [guia](https://docs.zapmeow.com/guides/voice.md) |

4. **Volume:** anexe um volume em `/data` (cache de mídia). Sem ele a mídia é baixada de novo do WhatsApp.

5. **Domínio:** gere um domínio público. O health check é `GET /health`.

6. **Réplicas:** mantenha **1**. Uma sessão de WhatsApp não pode estar conectada em duas instâncias ao mesmo tempo.

7. Abra `https://<domínio>/dashboard/`, entre com a chave e leia o QR de cada sessão.

## Atualizar

Cada push na branch ligada faz um redeploy. As sessões voltam sozinhas porque as chaves estão no Postgres; não precisa de novo QR.

## Cuidados

* O whatsmeow é não oficial: risco de banimento do número.
* A Railway não expõe UDP de entrada; a ligação por voz usa só UDP de saída. Valide com uma ligação de teste antes de depender dela.
* Trocar o código antigo pelo novo migra o schema do whatsmeow (16→18). O código antigo continua subindo sobre o schema novo e a sessão volta sem QR (testado); mesmo assim, tire um `pg_dump` antes.
* Backup: faça dump do Postgres. Perder o banco = reler todos os QRs.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.