O Countly é uma plataforma de analytics open-source amplamente reconhecida por sua capacidade de rastrear métricas de aplicativos mobile, web e desktop, além de fornecer dados de qualidade de software (SQM). Para organizações que priorizam a soberania dos dados e a conformidade com regulamentações rigorosas de privacidade, como a LGPD no Brasil, hospedar o Countly em infraestrutura própria representa uma vantagem estratégica significativa. Este tutorial detalha o processo de instalação do Countly Self-Hosted em um ambiente Linux, focado na configuração de alta disponibilidade e segurança.
Pré-requisitos de Infraestrutura
Antes de iniciar a instalação, é fundamental preparar o servidor. O Countly não roda como uma aplicação única; ele consiste em múltiplos serviços interconectados, incluindo banco de dados, sistema de mensagens e servidor web. Recomendamos o uso do Ubuntu Server 22.04 LTS ou Debian 12 como base devido à ampla documentação da comunidade.
O hardware mínimo recomendado para um ambiente de produção leve é de 4 vCPUs e 8GB de RAM. No entanto, para cenários com alto volume de eventos (high-throughput), considere a alocação de memória adicional para o cache do Redis e o armazenamento em disco SSD para garantir baixa latência nas leituras do MongoDB.
- Sistema Operacional: Ubuntu Server 22.04 LTS ou Debian 12
- Privilégios: Acesso root ou usuário com permissões sudo
- Memória RAM: Mínimo de 8GB (recomendado para produção)
- Disco: SSD com pelo menos 50GB livres
- Dominio: Um subdomínio dedicado (ex: analytics.suaempresa.com.br) apontando para o IP do servidor
Passo 1: Preparação do Ambiente Linux
O primeiro passo é garantir que o sistema esteja atualizado e com as dependências básicas instaladas. Abra seu terminal e execute os comandos abaixo para atualizar o repositório de pacotes e instalar ferramentas essenciais de gerenciamento.
sudo apt update && sudo apt upgrade -y
sudo apt install curl wget gnupg2 ca-certificates lsb-release debian-archive-keyring -y
Em seguida, configure o firewall (UFW) para liberar apenas as portas necessárias. Para um ambiente self-hosted, você precisará liberar a porta 80 (HTTP) e 443 (HTTPS). Se estiver testando localmente sem HTTPS ainda, libere temporariamente a porta 80, mas certifique-se de habilitar o TLS assim que possível para proteger os dados de analytics trafegados.
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Passo 2: Instalação do Docker e Docker Compose
A maneira mais robusta e recomendada de instalar o Countly Self-Hosted é através do Docker. O containerização isola as dependências, facilitando atualizações e backups. Instale o Docker Engine oficial seguindo os passos abaixo.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
Após a instalação, verifique se o serviço está ativo e adicione seu usuário ao grupo docker para evitar problemas de permissão. Agora, instale o Docker Compose V2, que é integrado ao CLI do Docker moderno.
sudo apt install docker-compose-plugin -y
docker compose version
Passo 3: Configuração do Countly com Docker Compose
Crie um diretório dedicado para a configuração do Countly. Isso manterá seus arquivos de configuração organizados e seguros.
mkdir -p ~/countly-docker
cd ~/countly-docker
O Countly oferece um arquivo docker-compose.yml oficial que define todos os serviços necessários: o servidor da aplicação, o banco de dados MongoDB, o cache Redis e o servidor web Nginx. Baixe este arquivo diretamente do repositório oficial.
wget https://raw.githubusercontent.com/Countly/countly-server/master/docker-compose.yml
Abra o arquivo docker-compose.yml em um editor de texto, como o Nano ou Vim. É crucial modificar as variáveis de ambiente para garantir a segurança e a funcionalidade correta.
nano docker-compose.yml
Dentro do arquivo, localize a seção environment sob o serviço app. Você deve definir as seguintes variáveis:
DB_URI: A string de conexão com o banco de dados. Por padrão, o compose já configura isso corretamente para o serviço mongo.REDIS_URI: Similarmente, verifique se aponta para o serviço redis.COUNTLY_LICENSE_KEY: Se você possui uma licença comercial, insira-a aqui. Para uso gratuito (community edition), deixe em branco ou remova essa linha.
Além disso, é altamente recomendável alterar a senha padrão do banco de dados se o arquivo não estiver usando variáveis de ambiente seguras. No entanto, o compose oficial geralmente gera senhas aleatórias ou utiliza volumes protegidos. Verifique a seção volumes para garantir que os dados do MongoDB e Redis sejam persistidos em volumes named, evitando perda de dados ao reiniciar os containers.
Passo 4: Configuração do Nginx como Reverse Proxy
O Countly requer um servidor web reverso para gerenciar o tráfego HTTPS e rotear as requisições corretamente. Vamos configurar o Nginx no host hospedeiro (ou em um container separado, dependendo da sua arquitetura de rede). Para simplificar, configuraremos o Nginx diretamente no Ubuntu.
sudo apt install nginx -y
Crie um novo arquivo de configuração de servidor virtual:
sudo nano /etc/nginx/sites-available/countly
Cole a seguinte configuração, ajustando o domínio para o seu subdomínio dedicado. Note que estamos redirecionando todo o tráfego HTTP para HTTPS e passando as requisições para a porta interna do container Docker (geralmente 8080 ou 443, dependendo da exposição no docker-compose).
server {
listen 80;
server_name analytics.seudominio.com.br;
# Redirecionar HTTP para HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name analytics.seudominio.com.br;
# Caminhos para os certificados SSL (Obtenha via Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/analytics.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/analytics.seudominio.com.br/privkey.pem;
# Configurações de Segurança SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
Ative a configuração e teste se há erros de sintaxe:
sudo ln -s /etc/nginx/sites-available/countly /etc/nginx/sites-enabled/
sudo nginx -t
Se o teste for bem-sucedido, recarregue o Nginx:
sudo systemctl reload nginx
Passo 5: Inicialização e Verificação dos Containers
Agora que a infraestrutura está pronta, inicie os serviços do Countly. Execute o comando abaixo dentro do diretório countly-docker.
docker compose up -d
O parâmetro -d roda os containers em segundo plano (detached). Aguarde alguns minutos para que o MongoDB se inicialize e a aplicação faça suas migrações de banco de dados. Você pode monitorar o progresso com:
docker compose logs -f app
Quando o log parar de exibir mensagens de erro ou indicar "Server is ready", a instalação estará concluída. Acesse seu domínio via navegador.
Passo 6: Configuração Inicial e Segurança
A primeira vez que acessar o painel web, você será solicitado a criar uma conta de administrador. Esteja ciente de que o Countly Community Edition permite a criação de múltiplos usuários, mas algumas funcionalidades avançadas de colaboração podem exigir licença paga.
Após o login, configure as seguintes práticas de segurança essenciais:
- Alterar a Senha Padrão: Se você tiver criado um usuário padrão durante o deploy, altere imediatamente suas credenciais.
- Habilitar Autenticação 2FA: Vá em Configurações > Usuários e ative a autenticação de dois fatores para todos os administradores. Isso é crítico para proteger seus dados de analytics contra acessos não autorizados.
- Restringir Acesso por IP: No seu firewall (UFW ou Cloud Security Groups), considere restringir o acesso ao painel administrativo apenas aos IPs da sua equipe corporativa, se possível.
Passo 7: Integração com Aplicativos Mobile e Web
Com o servidor rodando, você precisa integrar seus aplicativos. No painel do Countly, navegue até Apps > Manage Apps e crie um novo aplicativo.
O Countly fornecerá uma App Key e instruções específicas para SDKs de diferentes plataformas:
- iOS (Swift/Obj-C): Utilize o CocoaPods ou Swift Package Manager para adicionar o SDK. No arquivo de inicialização, configure a URL do seu servidor self-hosted em vez da URL padrão do Countly Cloud.
- Android (Java/Kotlin): Adicione a dependência no
build.gradle. Configure oCountlyConfigcom sua chave de app e o endpoint do seu domínio. - Web (JavaScript): Insira o snippet de código fornecido no cabeçalho (
<head>) do seu site. Lembre-se de atualizar a variávelcountly_urlpara o seu domínio.
Exemplo prático de configuração no Android:
CountlyConfig config = new CountlyConfig("YOUR_APP_KEY", "https://analytics.seudominio.com.br");
config.setDeviceId("custom-device-id-if-needed");
Countly.init(config);
Monitoramento e Manutenção Contínua
A infraestrutura countly exige monitoramento contínuo para garantir a integridade dos dados. Mantenha os containers atualizados regularmente.
cd ~/countly-docker
docker compose pull
docker compose up -d
Implemente backups automáticos do volume de dados do MongoDB. Um script simples pode ser adicionado ao cron para gerar dumps periódicos:
docker exec countly-docker-mongo-1 mongodump --out /backup/mongo-backup
# Copie o backup para um armazenamento seguro externo
Conclusão sobre Privacidade e BI Self-Hosted
Ao instalar o Countly em seu próprio servidor, você assume o controle total sobre os dados de telemetria. Isso elimina a dependência de terceiros e garante que informações sensíveis sobre o comportamento do usuário permaneçam dentro da sua infraestrutura corporativa. Para equipes de BI e desenvolvimento, isso significa dashboards web linux confiáveis e históricos ilimitados sem restrições de volume impostas por serviços em nuvem públicos.
Lembre-se de que a responsabilidade pela segurança final recai sobre você. Mantenha o sistema operacional atualizado, use certificados SSL válidos e monitore os logs do Docker para detectar anomalias. Com esta configuração, você estabelece uma base sólida para análise de dados mobile e web, alinhada às melhores práticas de privacidade de dados modernas.