# Migração Z-PRO entre servidores

Este guia detalha o processo recomendado para migrar sua instalação completa do Z-PRO de um servidor (VPS Antiga) para outro (VPS Nova). Este é um procedimento técnico que envolve acesso root e manipulação do banco de dados.

{% hint style="danger" %}
**AVISO CRÍTICO: FAÇA UM SNAPSHOT DO SERVIDOR**

Antes de iniciar qualquer procedimento de migração, crie um **ponto de restauração (snapshot)** da sua VPS antiga e da nova VPS. Esta é sua única garantia para reverter o sistema em caso de qualquer imprevisto.
{% endhint %}

### Visão Geral

A migração consiste em mover os três componentes essenciais da sua instalação:

1. **Banco de Dados:** Todos os dados do PostgreSQL (mensagens, usuários, tickets, etc.).
2. **Arquivos de Mídia:** A pasta `public` do backend (imagens, áudios, documentos enviados).
3. **Arquivo de Configuração:** O arquivo `.env` do backend (chaves de API, senhas, etc.).

***

### Pré-Requisitos

1. **Nova VPS Pronta:** Uma nova VPS provisionada, seguindo os [requisitos de uso](https://zpro.passaportezdg.com.br/diretrizes-e-politicas/requisitos-de-uso) (Ubuntu 22.04 LTS).
2. **Z-PRO Instalado (Mesma Versão):** Você **deve** instalar o Z-PRO na nova VPS usando o autoinstalador. A versão instalada na nova VPS deve ser **exatamente a mesma** da sua VPS antiga.
3. **Acesso Root/SSH:** Acesso de superusuário (root) a ambas as máquinas.

***

## Passo a Passo da Migração

### Fase 1: Backup na VPS Antiga

Execute todos os comandos a seguir no terminal SSH da sua **VPS antiga**.

#### **1. Parar os Serviços do Z-PRO** (Como usuário `deployzdg`)

```bash
su - deployzdg
pm2 stop all

```

#### 2. Backup do Banco de Dados (Como usuário `root`)

```
# Volte para o usuário root
exit

# Execute o dump do banco de dados
docker exec -t postgresql pg_dump -U zpro postgres > /root/backup.sql

# Compacte o arquivo para facilitar a transferência
zip -r /root/backup.zip /root/backup.sql
```

#### 3. Backup dos Arquivos de Mídia (Pasta Public) (Como usuário `root`)

```
# Acesse a pasta do backend
cd /home/deployzdg/zpro.io/backend

# Compacte a pasta 'public'
zip -r /root/public.zip public/
```

#### 4. Backup do Arquivo de Configuração (.env) (Como usuário `root`)

```
# Na mesma pasta, faça o backup do .env
# (Este arquivo contém suas chaves de API e segredos)
zip -r /root/env.zip .env
```

### Fase 2: Transferência dos Backups

1\. Mover os Backups para a Nova VPS Use o comando `scp` (ou seu método preferido, como SFTP) para mover os três arquivos `.zip` que você criou (`backup.zip`, `public.zip`, `env.zip`) da VPS antiga para o diretório `/root/` da VPS nova.

*Exemplo de comando (executado da VPS antiga):*

```
# (Pode ser necessário configurar chaves SSH antes, se ainda não o fez)
scp /root/backup.zip root@IP_DA_NOVA_VPS:/root/
scp /root/public.zip root@IP_DA_NOVA_VPS:/root/
scp /root/env.zip root@IP_DA_NOVA_VPS:/root/
```

### Fase 3: Restauração na VPS Nova

Execute todos os comandos a seguir no terminal SSH da sua VPS nova.

1\. Mudar os Apontamentos de DNS Neste momento, vá ao seu provedor de domínio e altere os registros de DNS de todos os seus subdomínios (app, api, etc.) para que apontem para o IP da VPS nova.

2\. Parar os Serviços do Z-PRO (na Nova VPS) (Como usuário `deployzdg`)

```
su - deployzdg
pm2 stop all
```

3\. Restaurar o Banco de Dados (Como usuário `root`)

```
# Volte para o usuário root
exit
cd /root/

# Descompacte o backup do banco
unzip backup.zip

# Copie o arquivo SQL para dentro do container Docker
docker cp backup.sql postgresql:/backup.sql

# Acesse o container
docker exec -i postgresql bash

# Conecte-se ao psql
psql -U zpro

# Execute os comandos SQL para preparar o banco
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'postgres';
DROP DATABASE postgres;
CREATE DATABASE postgres WITH OWNER zpro ENCODING 'UTF8' TEMPLATE zpro;

# Saia do psql
\q
# Saia do container
exit

# Execute a restauração do banco
docker exec -it postgresql psql -U zpro -d postgres < backup.sql

# Remova o arquivo de backup (opcional, para limpeza)
rm -rf backup.sql
```

4\. Restaurar os Arquivos de Mídia (Pasta Public) (Como usuário `root`)

```
cd /root/
unzip public.zip

# Mova os arquivos para a pasta de produção
mv /root/public/* /home/deployzdg/zpro.io/backend/public/

# Ajuste as permissões da pasta (CRÍTICO)
chown -R deployzdg:deployzdg /home/deployzdg/zpro.io/backend/public/
```

5\. Restaurar o Arquivo de Configuração (.env) (Como usuário `root`)

```
cd /root/
unzip env.zip

# Sobrescreva o .env da nova instalação pelo seu .env antigo
mv /root/.env /home/deployzdg/zpro.io/backend/.env

# Ajuste a permissão
chown deployzdg:deployzdg /home/deployzdg/zpro.io/backend/.env
```

### Fase 4: Finalização e Verificação

1\. Iniciar os Serviços do Z-PRO (Como usuário `deployzdg`)

```
su - deployzdg
pm2 start all
```

2\. Testar o Acesso Aguarde a propagação do DNS (pode levar de alguns minutos a algumas horas) e tente acessar sua plataforma. Faça login e verifique se seus atendimentos e mídias estão visíveis.

{% hint style="warning" %}
Autorizar o IP no Asaas Se você usa a integração com o Asaas, lembre-se de acessar seu painel do Asaas, ir para "Mecanismos de Segurança" e adicionar o IP da sua nova VPS na lista de permissões. Caso contrário, os pagamentos e a exibição de tenants falharão.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ajuda.zdg.com.br/avancado-recursos-tecnicos/boas-praticas-de-infraestrutura/migracao-z-pro-entre-servidores.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
