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
Crie os volumes
Crie os volumes externos usados pelos dados locais e pelos arquivos do FZAP.
bashdocker volume create fzap_dbdata docker volume create fzap_filesCole a stack no Portainer
No Portainer, abra Stacks → Add stack, dê o nome
fzape 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_data:/app/data 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_data: name: fzap_data external: true networks: FloudsNet: name: FloudsNet external: trueDefina o token e revise as variáveis
Troque
ADMIN_TOKENpor um valor seu e revise o banco, o domínio,FZAP_LANGUAGEe o timezone. Se tiver licença, preenchaFLOUDS_LICENCE_KEY.Atenção: Não deixe
ADMIN_TOKENvazio: sem ele, o FZAP gera um token novo a cada reinício e o acesso ao dashboard muda junto.Faça o deploy
Clique em Deploy the stack e acompanhe o serviço
fzapaté ficar ativo.Entre no dashboard
Abra o domínio configurado, entre com o
ADMIN_TOKENe teste a API.Observação: Abra sempre pelo domínio, não pelo IP. É esse endereço que a licença valida.