FSociety.pt

Infraestrutura Empresarial Segura | Four-Legged Firewall

View on GitHub

🎫 Zammad - Instalação

Guia completo de instalação do Zammad 6.5.2 - Sistema de Ticketing


📋 Índice

  1. Pré-requisitos
  2. Instalação via Script Oficial
  3. Configuração da Base de Dados
  4. Systemd Services
  5. Configuração Inicial
  6. Verificação
  7. Referências

📦 Pré-requisitos

Pacotes Base

# Atualizar sistema
sudo apt update && sudo apt upgrade -y

# Instalar dependências
sudo apt install -y \
  curl \
  wget \
  apt-transport-https \
  ca-certificates \
  gnupg

PostgreSQL

Zammad utiliza a mesma instância PostgreSQL do Nextcloud:

# Verificar PostgreSQL
sudo systemctl status postgresql

# Criar base de dados para Zammad
sudo -u postgres psql

SQL:

CREATE USER zammad WITH PASSWORD 'strong_zammad_password';
CREATE DATABASE zammad_production WITH OWNER zammad ENCODING 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE zammad_production TO zammad;
\q

📥 Instalação via Script Oficial

Adicionar Repositório Zammad

# Download do script de instalação
wget -qO- https://dl.packager.io/srv/zammad/zammad/key | sudo gpg --dearmor -o /etc/apt/keyrings/pkgr-zammad.gpg

# Adicionar repositório
echo "deb [signed-by=/etc/apt/keyrings/pkgr-zammad.gpg] https://dl.packager.io/srv/deb/zammad/zammad/stable/ubuntu 24.04 main"| sudo tee /etc/apt/sources.list.d/zammad.list > /dev/null

Instalar Zammad

# Atualizar lista de pacotes
sudo apt update

# Instalar Zammad
sudo apt install -y zammad

# Versão esperada: 6.5.2

Configuração Automática

O instalador configura automaticamente:


🐘 Configuração da Base de Dados

Editar Configuração

sudo nano /opt/zammad/config/database.yml

Conteúdo:

production:
  adapter: postgresql
  database: zammad_production
  pool: 50
  timeout: 5000
  encoding: utf8
  host: localhost
  port: 5432
  username: zammad
  password: strong_zammad_password

Aplicar Permissões

sudo chown zammad:zammad /opt/zammad/config/database.yml
sudo chmod 640 /opt/zammad/config/database.yml

Inicializar Base de Dados

# Executar migrations como utilizador zammad
sudo -u zammad bash -c "cd /opt/zammad && RAILS_ENV=production bundle exec rake db:migrate"

# Seed inicial (primeira vez)
sudo -u zammad bash -c "cd /opt/zammad && RAILS_ENV=production bundle exec rake db:seed"

⚙️ Systemd Services

Serviços Zammad

O Zammad utiliza 4 serviços systemd:

1. zammad.service (Master)

sudo systemctl status zammad.service

Controla todos os sub-serviços.

2. zammad-web.service (Puma)

sudo systemctl status zammad-web.service

Servidor web Puma na porta 9292.

Ficheiro: /etc/systemd/system/zammad-web.service

[Unit]
Description=Zammad web server
After=postgresql.service
Wants=postgresql.service

[Service]
Type=simple
User=zammad
Group=zammad
WorkingDirectory=/opt/zammad
Environment=RAILS_ENV=production
Environment=PORT=9292
ExecStart=/usr/bin/bundle exec puma -C config/puma.rb
Restart=always

[Install]
WantedBy=multi-user.target

3. zammad-websocket.service

sudo systemctl status zammad-websocket.service

WebSocket server na porta 6042.

4. zammad-worker.service

sudo systemctl status zammad-worker.service

Background jobs e tarefas assíncronas.

Ativar e Iniciar Serviços

# Ativar todos os serviços
sudo systemctl enable zammad.service
sudo systemctl enable zammad-web.service
sudo systemctl enable zammad-websocket.service
sudo systemctl enable zammad-worker.service

# Iniciar serviços
sudo systemctl start zammad.service

# Verificar status
sudo systemctl status zammad.service

Reiniciar Serviços

# Reiniciar todos
sudo systemctl restart zammad.service

# Reiniciar apenas web
sudo systemctl restart zammad-web.service

🔧 Configuração Inicial

Portas Utilizadas

Serviço Porta Descrição
Puma 9292 Backend Rails
WebSocket 6042 Real-time updates

Verificar Portas

# Ver portas em uso
sudo netstat -tlnp | grep -E '9292|6042'

# Ou com ss
sudo ss -tlnp | grep -E '9292|6042'

Expected output:

tcp   0  0 127.0.0.1:9292   0.0.0.0:*   LISTEN   1234/puma
tcp   0  0 127.0.0.1:6042   0.0.0.0:*   LISTEN   1235/websocket

Wizard de Configuração

NOTA: O Zammad será acedido através do Nginx local (porta 8081) configurado no próximo documento.

Ao aceder pela primeira vez a http://localhost:8081, será apresentado o wizard:

  1. Admin Account
    • Nome: Administrator
    • Email: admin@fsociety.pt
    • Password: [Strong Password]
  2. Organization
    • Name: FSociety
    • URL: https://tickets.fsociety.pt
  3. Email Configuration
    • Será configurado para usar mail.fsociety.pt
  4. Channels
    • Email
    • Web Form
    • Chat (opcional)

✅ Verificação

Serviços Ativos

# Status de todos os serviços
sudo systemctl status zammad.service zammad-web.service zammad-websocket.service zammad-worker.service

# Logs
sudo journalctl -u zammad.service -f
sudo journalctl -u zammad-web.service -f

Verificar Processos

# Processos Zammad
ps aux | grep zammad

# Puma
ps aux | grep puma

Logs do Zammad

# Production log
sudo tail -f /opt/zammad/log/production.log

# Web log
sudo tail -f /opt/zammad/log/puma_out.log
sudo tail -f /opt/zammad/log/puma_err.log

# WebSocket log
sudo tail -f /opt/zammad/log/websocket-server_out.log

Testar Backend

# Testar se Puma responde
curl http://localhost:9292

# Deve retornar HTML da aplicação

🔄 Comandos Úteis

Rails Console

# Aceder ao console Rails
sudo -u zammad bash -c "cd /opt/zammad && RAILS_ENV=production bundle exec rails console"

Rake Tasks

# Listar tasks disponíveis
sudo -u zammad bash -c "cd /opt/zammad && RAILS_ENV=production bundle exec rake -T"

# Reindexar search
sudo -u zammad bash -c "cd /opt/zammad && RAILS_ENV=production bundle exec rake searchindex:rebuild"

Backup

# Backup da base de dados
sudo -u postgres pg_dump zammad_production > /tmp/zammad_backup.sql

# Backup de ficheiros
sudo tar -czf /tmp/zammad_files.tar.gz /opt/zammad/storage

📝 Checklist de Instalação


🔗 Próximos Passos

No próximo documento, configuraremos:


📖 Referências


**[⬅️ Voltar: Nextcloud Apps](/fsociety-infrastructure/05-servidor-ficheiros/05-nextcloud-apps.html)** | **[Próximo: Zammad Nginx ➡️](/fsociety-infrastructure/05-servidor-ficheiros/07-zammad-nginx.html)**

Última atualização: Dezembro 2025