chatwoot-develop/.context/planos/vps_deployment_guide.md

154 lines
4.3 KiB
Markdown

# Guia de Deploy VPS (Portainer) 🚀
Este guia explica como pegar as alterações que fizemos (WuzAPI V1 e Fixes) e colocar para rodar no seu servidor VPS usando Portainer.
## Pré-requisitos
1. **Conta no Docker Hub**: Crie uma em [hub.docker.com](https://hub.docker.com/) (Grátis).
2. **Docker Instalado Localmente**: Para construir a imagem.
3. **Portainer na VPS**: Já rodando.
---
## Passo 1: Construir e Publicar a Imagem
Como alteramos o código (Ruby), precisamos criar uma "nova versão" do Chatwoot.
**No seu terminal local (VS Code):**
1. Faça login no Docker Hub:
```bash
docker login
# Digite seu usuário e senha
```
2. **Configurar Buildx (Multi-Arch)**:
Garante que a imagem funcione tanto em servidores Intel/AMD (VPS Comum) quanto Apple Silicon.
```bash
docker buildx create --use --name xbuilder || true
docker buildx inspect --bootstrap
docker buildx build \
--platform linux/amd64,linux/arm64 \
-f docker/Dockerfile \
-t rodrigobm10/chatwoot:wuzapi-v1 \
--push .
```
---
## Passo 2: Configurar no Portainer (VPS)
1. Acesse seu Portainer.
2. Vá em **Stacks** -> **Add stack**.
3. Dê o nome `chatwoot`.
4. Cole o seguinte conteúdo no Editor Web:
> **ATENÇÃO**: Substitua `image: SEU_USUARIO/chatwoot:v2` pela imagem que você criou no passo anterior.
```yaml
version: "3.8"
services:
base: &base
image: rodrigobm10/chatwoot:wuzapi-v2 # <--- SUA IMAGEM CORRETA
env_file: .env
volumes:
- storage_data:/app/storage
rails:
<<: *base
depends_on:
- postgres
- redis
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
entrypoint: docker/entrypoints/rails.sh
command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"]
restart: always
deploy:
resources:
limits:
memory: 2048M
sidekiq:
<<: *base
depends_on:
- postgres
- redis
environment:
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml"]
restart: always
deploy:
resources:
limits:
memory: 1024M
postgres:
image: pgvector/pgvector:pg16
restart: always
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=chatwoot
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=suasenhabancoforte
redis:
image: redis:alpine
restart: always
command: ["sh", "-c", 'redis-server --requirepass "$REDIS_PASSWORD"']
environment:
- REDIS_PASSWORD=suasenharedis
volumes:
- redis_data:/data
volumes:
storage_data:
postgres_data:
redis_data:
```
5. **Variáveis de Ambiente (.env)**:
No Portainer, adicione as variáveis de ambiente ("Environment variables"). Copie do seu `.env` local, mas **ATENÇÃO**:
- `FRONTEND_URL`: Deve ser o seu domínio real (ex: `https://chat.suaempresa.com`).
- `POSTGRES_PASSWORD`: Use a mesma definida no YAML acima.
- `REDIS_PASSWORD`: Use a mesma definida no YAML acima.
- `ACTIVE_RECORD_ENCRYPTION_...`: **CRÍTICO!** Copie as chaves do seu arquivo local. Se mudar, perde o acesso aos tokens do WuzAPI.
---
## Passo 3: Migrações (Primeiro Deploy)
Após subir a stack, o banco de dados estará vazio ou desatualizado e você precisa rodar as migrações:
1. No Portainer, entre no container `chatwoot_rails` (clique no ícone de Console `>_`).
2. Execute:
```bash
bundle exec rails db:prepare
# Ou se já existir banco e só quiser atualizar:
bundle exec rails db:migrate
```
---
## Passo 4: Automação (Webhook)
Para atualizar automaticamente quando você der `docker push`:
1. No Portainer, na sua Stack ou Service (`chatwoot_rails` e `chatwoot_sidekiq`), ative "Service Webhook".
2. Ele vai gerar uma URL (ex: `https://portainer.seu.com/api/webhooks/...`).
3. Configure seu CI/CD (GitHub Actions) ou simplesmente chame essa URL com um POST após o push.
- _Nota: O Portainer Business Edition tem isso facilitado. No Community Edition, você pode precisar de um script extra para atualizar a stack inteira._
**Pronto!** Seu Chatwoot personalizado com WuzAPI estará no ar.