# MANUAL TÉCNICO - INSTALAÇÃO E DEPLOY ZAMMAD - DOCKER/LXC **Código:** ITGINF 0001/26 | **Classificação:** INTERNO **Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} ## 1. HISTÓRICO DE REVISÃO | Data | Versão | Descrição | Autor | | :--- | :--- | :--- | :--- | | {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | ## 2. OBJETIVO Documentar os dois métodos homologados de instalação do Zammad: Container (Docker) e Sistema Operacional (LXC/VM debian). ## 3. PRÉ-REQUISITOS * [ ] Servidor Linux (Debian 11/12 ou Ubuntu 22.04). * [ ] Mínimo 4GB RAM (Recomendado 8GB). * [ ] Acesso Root/Sudo. * [ ] DNS configurado para o domínio do helpdesk (ex: `suporte.itguys.com`). ## 4. PASSO A PASSO (EXECUÇÃO) ### Opção A: Docker Compose (Recomendado) A instalação via Docker é a mais limpa e fácil de manter. **Etapa 1: Preparação do Host** O Elasticsearch exige uma configuração específica de memória virtual. 1. Acesse o servidor via SSH. 2. Execute o comando para ajuste persistente: ```bash sysctl -w vm.max_map_count=262144 echo "vm.max_map_count=262144" >> /etc/sysctl.conf ``` **Etapa 2: Clonar Repositório e Configurar** 1. Baixe o repositório oficial: ```bash git clone https://github.com/zammad/zammad-docker-compose.git cd zammad-docker-compose ``` 2. Defina a versão (Tag) mais recente estável (Evite `latest` em produção): ```bash git checkout 6.2.0-15 # Exemplo, verifique a última no Github ``` 3. Ajuste o arquivo `.env`: ```bash cp .env.dist .env nano .env ``` * Altere `ELASTICSEARCH_MEMORY` para `2G` se tiver pouca RAM. * Altere passwords do Postgres se necessário. **Etapa 3: Iniciar Stack** 1. Suba os containers: ```bash docker compose up -d ``` 2. Aguarde cerca de 5 minutos (Iniciação do Rails e Elasticsearch). 3. Acesse `http://SEU_IP:8080`. ![Terminal Install Docker](assets/zammad_install_docker.png) --- ### Opção B: Instalação em LXC/VM (Pacote .deb) Ideal para Proxmox containers (LXC) onde Docker não é desejado. **Etapa 1: Dependências e Locales** 1. Defina o locale para UTF-8 (Crítico para PostgreSQL): ```bash localectl set-locale LANG=en_US.UTF-8 update-locale ``` 2. Adicione o repositório oficial do Zammad: ```bash curl -fsSL https://dl.packager.io/srv/zammad/zammad/key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/pkgr-zammad.gpg > /dev/null echo "deb https://dl.packager.io/srv/zammad/zammad/stable/debian 12 main" | tee /etc/apt/sources.list.d/zammad.list ``` **Etapa 2: Instalação do Pacote** 1. Instale o Zammad (Isso trará Nginx, Elasticsearch e PostgreSQL automaticamente): ```bash apt update apt install zammad ``` 2. O instalador pedirá configurações básicas. Siga os prompts. **Etapa 3: Configuração do Elasticsearch** 1. Instale o plugin mapper-attachments: ```bash /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment systemctl restart elasticsearch ``` 2. Conecte o Zammad ao Elastic: ```bash zammad run rails r "Setting.set('es_url', 'http://localhost:9200')" zammad run rake searchindex:rebuild ``` ## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING) !!! warning "Pânico: Instalação Falhou" Erros comuns durante o deploy inicial. **Problema 1: Elasticsearch morre após segundos (Docker)** * **Erro:** Logs mostram `max virtual memory areas vm.max_map_count [65530] is too low`. * **Causa:** Esqueceu a Etapa 1 do Docker. * **Solução:** Rode `sysctl -w vm.max_map_count=262144` no **HOST** (não no container) e reinicie a stack. **Problema 2: Erro 502 Bad Gateway no Nginx** * **Causa:** O container `zammad-railsserver` ainda está iniciando ou falhou. * **Solução:** 1. Verifique logs: `docker compose logs -f zammad-railsserver`. 2. Se estiver "Booting...", aguarde. Pode levar 5-10 min na primeira vez. **Problema 3: Instalação via Pacote falha no PostgreSQL** * **Causa:** Locale incorreto (não UTF-8). * **Solução:** 1. Rode `localectl` e garanta que está tudo UTF-8. 2. Se falhar, purgue o pgsql: `apt remove --purge postgresql*` e tente de novo. ## 6. DADOS TÉCNICOS | Serviço | Porta Interna | Porta Externa (Padrão) | | :--- | :--- | :--- | | **Nginx** | 8080 | 8080 (Docker) / 80 (Pkg) | | **PostgreSQL** | 5432 | Não exposta | | **Elasticsearch**| 9200 | Não exposta | | **Memcached** | 11211 | Não exposta | ## 7. VALIDAÇÃO FINAL - [ ] A interface web carrega sem erros? - [ ] O comando `zammad run rails r "p Setting.get('es_url')"` retorna a URL correta? - [ ] O ElasticSearch está com status verde/amarelo? (`curl localhost:9200/_cluster/health`)