Controle total
Instalação manual pelo Portainer
Use este caminho se Docker Swarm, Portainer, PostgreSQL, rede e proxy já estão preparados. Você revisa a stack e cada variável antes do deploy.
Antes de começar
15–25 min- Docker Swarm ativo
- Portainer acessível
- PostgreSQL disponível
- Traefik e domínio configurados
- 1
Crie os volumes externos usados pelos dados locais e arquivos do FZAP.
bashdocker volume create fzap_dbdata docker volume create fzap_files - 2
No Portainer, abra Stacks → Add stack, dê o nome fzap e cole a stack oficial abaixo.
Abrir stack oficial no GitHubstack.ymlversion: "3.7" services: fzap: image: dncarbonell/fzap:latest networks: - FloudsNet volumes: - fzap_dbdata:/app/dbdata - fzap_files:/app/files - fzap_logos:/app/data/public-folder-logos environment: # --- Configurações Gerais e Sistema --- - TZ=America/Sao_Paulo - FZAP_LANGUAGE=pt-BR # pt-BR, en-US, es-LATAM - PUBLIC_BASE_URL=https://exemplo.com # URL completa onde a fzap está instalada - Se instalado em subdomínio colocar o subdomínio completo, sempre com "https://". Ex: https://api.exemplo.com #- GLOBAL_PROXY_URL= # Proxy global opcional para todas as instâncias; o proxy de cada instância tem prioridade e o substitui # --- Armazenamento S3 Global (Backblaze B2 - Opcional) --- # Instâncias sem S3 próprio usam este bucket; a configuração individual tem prioridade. # Os arquivos são separados por instância no caminho users/<id>/... # O S3 global é ativado automaticamente ao preencher bucket, access key e secret key. #- GLOBAL_S3_BUCKET=seu-bucket #- GLOBAL_S3_ACCESS_KEY=seu-application-key-id #- GLOBAL_S3_SECRET_KEY=sua-application-key #- GLOBAL_S3_ENDPOINT=https://s3.us-west-004.backblazeb2.com #- GLOBAL_S3_REGION=us-west-004 #- GLOBAL_S3_PATH_STYLE=false #- GLOBAL_S3_PUBLIC_URL= # URL pública ou CDN opcional #- GLOBAL_S3_MEDIA_DELIVERY=both # base64, s3 ou both #- GLOBAL_S3_RETENTION_DAYS=0 # 0 mantém os arquivos indefinidamente #- LOG_LEVEL=info # trace, debug, info, warn, error, fatal, panic #- CHATWOOT_SYSTEM_IDENTIFIER=flouds.com.br # Uso interno no Chatwoot - é o identificador do contato de onboarding - Antes era FZAP_SYSTEM_IDENTIFIER #- CHATWOOT_SYSTEM_NAME=FZAP # Nome exibido no contato de onboarding - Antes era FZAP_SYSTEM_NAME #- CHATWOOT_PLATFORM_NAME=Chatwoot # Nome da plataforma white label do Chatwoot - Antes era PLATFORM_NAME #- CHATWOOT_SERVICE_URL=https://app.chatwoot.com # Url de exemplo de conexão e integração do Chawtoot - Antes era DEFAULT_SERVICE_URL # --- Autenticação e Licença --- - ADMIN_TOKEN=admin_token_exemplo # Token de autenticação da API. Escolha um valor seguro - FLOUDS_LICENCE_KEY= # Deixe vazio para usar a versão free - Em caso de assinatura, a key estará no seu dashboard - FLOUDS_LIFETIME_LICENCE_KEY= # Caso tenha versão vitalícia (licença fixa por domínio - legado) # --- Banco de Dados (PostgreSQL) --- - DB_DRIVER=postgres - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=fzap - DB_USER=postgres - DB_PASSWORD=senha_exemplo # --- Banco de Dados do Chatwoot (Global - Opcional) --- #- CHATWOOT_GLOBAL_DB_HOST= # Host global opcional do PostgreSQL do Chatwoot; os campos de cada instância têm prioridade e o substituem #- CHATWOOT_GLOBAL_DB_PORT=5432 # Porta global opcional do PostgreSQL do Chatwoot #- CHATWOOT_GLOBAL_DB_NAME= # Nome global opcional do banco de dados do Chatwoot #- CHATWOOT_GLOBAL_DB_USER= # Usuário global opcional do banco de dados do Chatwoot #- CHATWOOT_GLOBAL_DB_PASS= # Senha global opcional do banco de dados do Chatwoot # --- WhatsApp e Webhooks --- - SESSION_DEVICE_NAME=Fzap # Nome da dispositivo conectado (aparece no celular) - WEBHOOK_FORMAT=json #- IMAGE_QUALITY_HD=false # true para HD, false para padrão # --- Transcrição de Áudio (IA) --- #- TRANSCRIPTION_ENABLED=false # Habilita a transcrição global de áudio (true/false, padrão: false) #- TRANSCRIPTION_PROVIDER=openai # Provedor de transcrição: openai (padrão) ou groq #- TRANSCRIPTION_API_KEY= # Chave de API do provedor de transcrição selecionado #- TRANSCRIPTION_MODEL= # Substituição de modelo (padrão: whisper-1 para openai, whisper-large-v3 para groq) #- TRANSCRIPTION_BASE_URL= # Substituição opcional de endpoint (URL) para o provedor selecionado # --- WhatsApp Cloud API (Meta Embedded Signup) --- # Configurações para habilitar o fluxo guiado de cadastro direto pela Meta Cloud API. # ATENÇÃO: Recurso exclusivo para planos pagos (requer licença válida, não funciona na versão free). #- META_APP_ID= # Meta App ID (obtido em developers.facebook.com) #- META_APP_SECRET= # Meta App Secret (chave secreta do aplicativo) #- META_CONFIG_ID= # Meta Business Login Config ID (ID de configuração do login) # --- Mensageria (RabbitMQ) --- #- RABBITMQ_ENABLED=true #- RABBITMQ_URL=amqp://fzap:fzap@rabbitmq:5672/ #- RABBITMQ_EXCHANGE=fzap_events #- RABBITMQ_PREFIX=fzap #- RABBITMQ_FRAME_MAX=131072 # Tamanho máx de frame (128KB) #- RABBITMQ_HEARTBEAT=30 # Em segundos #- RABBITMQ_MAX_RECONNECT=10 #- RABBITMQ_RECONNECT_DELAY=5 # Em segundos # --- Monitoramento de Erros (Sentry) - Opcional --- # O Sentry é uma ferramenta de rastreamento que captura *somente erros* e falhas da aplicação em tempo real. # Isso permite que o desenvolvedor identifique e corrija os problemas de forma ativa, sem precisar esperar uma reclamação ou feedback do usuário. # A URL (DSN) de integração deve ser obtida com a equipe no grupo de suporte oficial. Deixe vazio caso não queira utilizar. #- SENTRY_DSN= deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager labels: # Configuração Traefik - traefik.enable=true - traefik.http.routers.fzap.rule=Host(`exemplo.com`) - traefik.http.routers.fzap.entrypoints=websecure - traefik.http.routers.fzap.tls=true - traefik.http.routers.fzap.tls.certresolver=letsencryptresolver - traefik.http.routers.fzap.service=fzap - traefik.http.services.fzap.loadbalancer.server.port=8080 volumes: fzap_dbdata: name: fzap_dbdata external: true fzap_files: name: fzap_files external: true fzap_logos: name: fzap_logos external: true networks: FloudsNet: name: FloudsNet external: true - 3
Revise ADMIN_TOKEN, banco, domínio, idioma e timezone. Se possuir licença, adicione FLOUDS_LICENCE_KEY.
- 4
Clique em Deploy the stack e acompanhe o serviço até ficar ativo.
- 5
Abra o domínio configurado, entre com ADMIN_TOKEN e teste a API.
Ativação
Free e pago usam a mesma instalação
A chave apenas define quais módulos ficam disponíveis. Ela não muda a imagem Docker, o banco ou o processo de deploy.
Nenhuma licença é necessária
Deixe FLOUDS_LICENCE_KEY vazia. A API Core, dashboard, instâncias e nodes n8n continuam disponíveis no plano Free.
Comparar os planos pagosDepois do deploy
Confirme que tudo está funcionando
- 1Aguarde o FZAP e o PostgreSQL aparecerem como ativos no seu painel.
- 2Abra o domínio público configurado para a instalação.
- 3Consulte ADMIN_TOKEN nas variáveis do serviço e use-o para entrar no dashboard.
- 4Crie uma instância, conecte o WhatsApp e envie uma mensagem de teste.