Skip to content

🚀 Stack de produção enterprise para GLPI com Traefik, MySQL 8.0, Redis e SSL automático. Deploy simplificado com Docker Compose, otimizado para alta performance e segurança.

License

Notifications You must be signed in to change notification settings

Alxdelira/glpi-production-stack

Alexandre's personal logo

🚀 GLPI Production Stack

Infraestrutura Enterprise para GLPI com Traefik, MySQL 8.0 e Redis

License: MIT Docker Docker Compose GLPI Traefik

CaracterísticasRequisitosInstalaçãoConfiguraçãoUsoDocumentação


📋 Índice


🎯 Sobre o Projeto

Este projeto fornece uma stack completa e otimizada para produção do GLPI (Gestionnaire Libre de Parc Informatique), utilizando as melhores práticas de DevOps e containerização.

O que é GLPI?

GLPI é uma solução open-source de gerenciamento de ativos de TI e service desk que ajuda a gerenciar:

  • 📦 Inventário de hardware e software
  • 🎫 Sistema de tickets (helpdesk)
  • 📊 Gestão de projetos
  • 💰 Gestão financeira e contratos
  • 📈 Relatórios e dashboards

Por que esta stack?

Esta implementação foi projetada para ambientes de produção profissionais, oferecendo:

  • Alta Performance: Otimizações em MySQL, PHP e cache Redis
  • 🔒 Segurança Avançada: SSL automático, headers de segurança, rate limiting
  • 📊 Monitoramento Integrado: Dashboard Traefik e logs estruturados
  • 🔄 Alta Disponibilidade: Health checks e restart automático
  • 📦 Backup Automático: Backups diários com retenção configurável
  • 🚀 Deploy Simples: Scripts automatizados para deploy e manutenção

✨ Características

🎯 Core Features

  • GLPI Latest: Sempre atualizado com a versão oficial
  • Traefik v2.11: Reverse proxy moderno com SSL automático
  • MySQL 8.0: Banco de dados otimizado para alta performance
  • Redis Cache: Cache de sessões e dados para máxima velocidade
  • Let's Encrypt: Certificados SSL gratuitos e renovação automática

🔒 Segurança

  • ✅ Security headers (HSTS, CSP, X-Frame-Options)
  • ✅ Rate limiting por IP
  • ✅ TLS 1.2+ com ciphers modernos
  • ✅ Network isolation com Docker networks
  • ✅ Resource limits por container
  • ✅ Credenciais em variáveis de ambiente

⚡ Performance

  • ✅ PHP OPcache habilitado
  • ✅ MySQL InnoDB otimizado (2GB buffer pool)
  • ✅ Redis para cache de sessões
  • ✅ Gzip compression no Traefik
  • ✅ Sticky sessions
  • ✅ Connection pooling

🛠️ DevOps

  • ✅ Docker Compose para orquestração
  • ✅ Health checks em todos os serviços
  • ✅ Logs centralizados
  • ✅ Scripts de deploy automatizados
  • ✅ Backup automático diário
  • ✅ Watchtower para auto-update (opcional)

🏗️ Arquitetura

┌─────────────────────────────────────────────────────────────┐
│                         Internet                            │
└────────────────────────┬────────────────────────────────────┘
                         │
                         │ HTTPS (443)
                         │
                    ┌────▼─────┐
                    │          │
                    │ Traefik  │  ← SSL/TLS, Load Balancer
                    │          │     Rate Limiting, Compression
                    └────┬─────┘
                         │
          ┌──────────────┼──────────────┐
          │              │              │
     ┌────▼─────┐   ┌───▼────┐   ┌────▼─────┐
     │          │   │        │   │          │
     │   GLPI   │───│  MySQL │   │  Redis   │
     │  (PHP)   │   │  8.0   │   │  Cache   │
     │          │   │        │   │          │
     └──────────┘   └───┬────┘   └──────────┘
                        │
                   ┌────▼─────┐
                   │  Backup  │
                   │  Cron    │
                   └──────────┘

Componentes

Componente Versão Porta Função
Traefik v2.11 80, 443, 8080 Reverse proxy, SSL/TLS, Load balancer
GLPI Latest 80 (interno) Aplicação principal
MySQL 8.0 3306 (interno) Banco de dados
Redis 7 Alpine 6379 (interno) Cache de sessões
Backup Latest - Backup automático MySQL
Watchtower Latest - Auto-update containers (opcional)

📋 Requisitos

Requisitos Mínimos

Recurso Mínimo Recomendado Enterprise
CPU 2 cores 4 cores 8+ cores
RAM 4 GB 8 GB 16+ GB
Disco 20 GB 50 GB 100+ GB SSD
Swap 2 GB 4 GB 8 GB

Software Necessário

  • Docker: 20.10 ou superior
  • Docker Compose: 2.0 ou superior
  • Git: Para clonar o repositório
  • Bash: Para executar os scripts

Sistema Operacional Suportado

  • ✅ Ubuntu 20.04 LTS / 22.04 LTS
  • ✅ Debian 11 / 12
  • ✅ CentOS Stream 8+
  • ✅ Rocky Linux 8+
  • ✅ Red Hat Enterprise Linux 8+

Portas Necessárias

Porta Protocolo Uso Público?
80 TCP HTTP (redirect para HTTPS) ✅ Sim
443 TCP HTTPS ✅ Sim
8080 TCP Dashboard Traefik ⚠️ Protegido

🚀 Instalação Rápida

1. Clonar o Repositório

git clone https://github.com/Alxdelira/glpi-production-stack.git
cd glpi-production-stack

2. Configurar Variáveis de Ambiente

# Copiar arquivo de exemplo
cp .env.example .env

# Editar com suas configurações
nano .env

Importante: Altere TODAS as senhas e o domínio no arquivo .env!

3. Criar Estrutura de Diretórios

# Executar script de setup
chmod +x scripts/*.sh
./scripts/setup.sh

Ou manualmente:

mkdir -p logs/{glpi,mysql,traefik,redis}
mkdir -p backups/{mysql,manual}
mkdir -p traefik/dynamic
mkdir -p config/{glpi,mysql}
touch traefik/acme.json
chmod 600 traefik/acme.json

4. Configurar Traefik

Edite o arquivo traefik/traefik.yml e altere:

certificatesResolvers:
  letsencrypt:
    acme:
      email: seu-email@exemplo.com  # ← ALTERE AQUI

5. Deploy

# Fazer deploy completo
./scripts/deploy.sh

6. Acessar GLPI

Após alguns minutos, acesse:

  • GLPI: https://seu-dominio.com
  • Dashboard Traefik: https://traefik.seu-dominio.com

Credenciais padrão do GLPI:

  • Usuário: glpi
  • Senha: glpi

⚠️ IMPORTANTE: Altere a senha padrão imediatamente após o primeiro login!


⚙️ Configuração

Configuração Básica (.env)

# Domain
DOMAIN=glpi.exemplo.com

# MySQL
MYSQL_ROOT_PASSWORD=senha_root_forte_aqui
GLPI_DB_NAME=glpidb
GLPI_DB_USER=glpi_user
GLPI_DB_PASSWORD=senha_glpi_forte_aqui

# Timezone
TZ=America/Manaus

# Performance
PHP_MEMORY_LIMIT=1024M
PHP_MAX_EXECUTION_TIME=600

Gerar Hash para Dashboard Traefik

# Instalar apache2-utils (se necessário)
sudo apt-get install apache2-utils

# Gerar hash (substitua 'admin' e 'sua_senha')
echo $(htpasswd -nb admin sua_senha) | sed -e s/\\$/\\$\\$/g

# Adicionar ao .env
TRAEFIK_DASHBOARD_AUTH=admin:$$apr1$$xyz123abc

Configuração de Email (SMTP)

Edite o arquivo .env:

GLPI_SMTP_HOST=smtp.gmail.com
GLPI_SMTP_PORT=587
GLPI_SMTP_USER=seu-email@gmail.com
GLPI_SMTP_PASSWORD=sua-senha-app
GLPI_SMTP_ENCRYPTION=tls

Configuração de DNS Challenge (Cloudflare)

Para certificados wildcard, edite .env:

CLOUDFLARE_EMAIL=seu-email@exemplo.com
CLOUDFLARE_API_KEY=sua-api-key

E descomente no traefik/traefik.yml:

certificatesResolvers:
  letsencrypt:
    acme:
      dnsChallenge:
        provider: cloudflare
        delayBeforeCheck: 30
        resolvers:
          - "1.1.1.1:53"

💻 Uso

Comandos Básicos

# Iniciar todos os serviços
docker-compose up -d

# Parar todos os serviços
docker-compose down

# Reiniciar um serviço específico
docker-compose restart glpi

# Ver logs em tempo real
docker-compose logs -f

# Ver logs de um serviço específico
docker-compose logs -f glpi

# Ver status dos containers
docker-compose ps

# Atualizar imagens
docker-compose pull
docker-compose up -d

Scripts Automatizados

Script Descrição
./scripts/deploy.sh Deploy completo da stack
./scripts/backup.sh Criar backup manual
./scripts/restore.sh Restaurar backup
./scripts/monitor.sh Monitorar sistema
./scripts/setup.sh Configuração inicial

Executar Comandos no Container

# Entrar no container GLPI
docker-compose exec glpi bash

# Executar comando MySQL
docker-compose exec db mysql -u root -p

# Ver informações do Redis
docker-compose exec redis redis-cli INFO

# Ver logs do PHP
docker-compose exec glpi tail -f /var/log/glpi/php-errors.log

🔧 Manutenção

Atualização do GLPI

# 1. Fazer backup
./scripts/backup.sh

# 2. Baixar nova imagem
docker-compose pull glpi

# 3. Recriar container
docker-compose up -d glpi

# 4. Verificar logs
docker-compose logs -f glpi

Atualização de Todos os Componentes

# Usando script de deploy
./scripts/deploy.sh

# Ou manualmente
docker-compose pull
docker-compose up -d

Limpeza de Docker

# Remover imagens não utilizadas
docker image prune -a

# Remover volumes órfãos
docker volume prune

# Limpeza completa (cuidado!)
docker system prune -a --volumes

Logs e Rotação

# Ver tamanho dos logs
du -sh logs/*

# Limpar logs antigos (exemplo: +30 dias)
find logs/ -name "*.log" -mtime +30 -delete

# Configurar logrotate (criar /etc/logrotate.d/glpi)
cat > /etc/logrotate.d/glpi << EOF
/caminho/para/glpi-production/logs/*/*.log {
    daily
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 root root
    sharedscripts
}
EOF

📊 Monitoramento

Script de Monitoramento

# Executar monitoramento
./scripts/monitor.sh

Métricas Importantes

Health Checks

# Verificar saúde dos containers
docker-compose ps
docker inspect --format='{{.State.Health.Status}}' glpi_app

MySQL

# Conexões ativas
docker-compose exec db mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"

# Queries lentas
docker-compose exec db mysql -u root -p -e "SHOW STATUS LIKE 'Slow_queries';"

# Uso de buffer pool
docker-compose exec db mysql -u root -p -e "SHOW STATUS LIKE 'Innodb_buffer_pool%';"

Redis

# Estatísticas
docker-compose exec redis redis-cli INFO stats

# Memória
docker-compose exec redis redis-cli INFO memory

# Número de chaves
docker-compose exec redis redis-cli DBSIZE

Traefik Dashboard

Acesse: https://traefik.seu-dominio.com

Métricas disponíveis:

  • Routers ativos
  • Services e backends
  • Middlewares aplicados
  • Certificados SSL
  • Taxa de requisições

Integração com Prometheus

Adicione ao docker-compose.yml:

prometheus:
  image: prom/prometheus:latest
  container_name: glpi_prometheus
  restart: unless-stopped
  volumes:
    - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    - prometheus_data:/prometheus
  command:
    - '--config.file=/etc/prometheus/prometheus.yml'
    - '--storage.tsdb.path=/prometheus'
  ports:
    - "9090:9090"
  networks:
    - glpi_network

💾 Backup e Restore

Backup Automático

O backup automático está configurado para rodar diariamente às 3h da manhã.

Configuração: Serviço backup no docker-compose.yml

environment:
  - CRON_TIME=0 3 * * *  # Diário às 3h
  - MAX_BACKUPS=14       # Manter últimos 14 dias

Backup Manual

# Executar backup completo
./scripts/backup.sh

O backup inclui:

  • ✅ Banco de dados MySQL (dump comprimido)
  • ✅ Arquivos do GLPI (glpi_files)
  • ✅ Configurações (glpi_config)
  • ✅ Plugins (glpi_plugins)
  • ✅ Arquivo de metadados com informações do backup

Restore

# Executar restore interativo
./scripts/restore.sh

O script irá:

  1. Listar backups disponíveis
  2. Solicitar confirmação
  3. Parar o GLPI
  4. Restaurar banco de dados
  5. Restaurar arquivos
  6. Reiniciar serviços

Backup para Storage Externo

AWS S3

# Instalar AWS CLI
pip install awscli

# Configurar credenciais
aws configure

# Adicionar ao crontab
0 4 * * * cd /caminho/para/glpi-production && \
  ./scripts/backup.sh && \
  aws s3 sync ./backups/manual/ s3://seu-bucket/glpi-backups/

Rsync para Servidor Remoto

# Adicionar ao crontab
0 5 * * * rsync -avz --delete \
  /caminho/para/glpi-production/backups/ \
  usuario@servidor-backup:/backups/glpi/

🔍 Troubleshooting

Problemas Comuns

1. Container não inicia

# Ver logs detalhados
docker-compose logs glpi

# Verificar erros de configuração
docker-compose config

# Reiniciar container específico
docker-compose restart glpi

2. Erro de permissão no acme.json

# Corrigir permissões
chmod 600 traefik/acme.json
docker-compose restart traefik

3. GLPI não conecta ao MySQL

# Verificar se MySQL está rodando
docker-compose ps db

# Testar conexão
docker-compose exec glpi ping -c 3 db

# Verificar logs do MySQL
docker-compose logs db

# Verificar credenciais no .env
cat .env | grep GLPI_DB

4. Certificado SSL não é gerado

# Verificar logs do Traefik
docker-compose logs traefik | grep acme

# Verificar DNS (deve apontar para seu servidor)
dig seu-dominio.com

# Testar em staging primeiro
# Edite traefik/traefik.yml:
# caServer: https://acme-staging-v02.api.letsencrypt.org/directory

5. Performance ruim

# Verificar uso de recursos
docker stats

# Verificar queries lentas no MySQL
docker-compose exec db cat /var/log/mysql/slow.log

# Limpar cache do Redis
docker-compose exec redis redis-cli FLUSHALL

# Verificar OPcache
docker-compose exec glpi php -i | grep opcache

6. Erro 502 Bad Gateway

# Verificar se GLPI está rodando
docker-compose ps glpi

# Verificar logs do Traefik
docker-compose logs traefik

# Reiniciar GLPI
docker-compose restart glpi

# Verificar health check
docker inspect glpi_app | grep -A 10 Health

Logs Importantes

# Todos os logs
docker-compose logs

# Últimas 100 linhas
docker-compose logs --tail=100

# Logs de erro do GLPI
docker-compose exec glpi tail -f /var/log/glpi/php-errors.log

# Logs do Traefik
tail -f logs/traefik/traefik.log

# Logs do MySQL
tail -f logs/mysql/slow.log

Debug Mode

Ativar debug no GLPI:

# Entrar no container
docker-compose exec glpi bash

# Editar config
cd /var/www/html/glpi/config
echo "<?php define('GLPI_LOG_LEVEL', 4);" > local_define.php

🔒 Segurança

Checklist de Segurança

  • Alterar todas as senhas padrão
  • Configurar firewall (UFW/iptables)
  • Limitar acesso ao dashboard do Traefik
  • Configurar fail2ban
  • Habilitar 2FA no GLPI
  • Revisar logs regularmente
  • Manter sistema atualizado
  • Configurar backups automáticos
  • Testar restore de backups
  • Monitorar uso de recursos

Firewall (UFW)

# Instalar UFW
sudo apt-get install ufw

# Configurar regras básicas
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Permitir SSH
sudo ufw allow ssh

# Permitir HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Ativar firewall
sudo ufw enable

# Verificar status
sudo ufw status verbose

Fail2Ban

# Instalar
sudo apt-get install fail2ban

# Criar jail customizado
sudo nano /etc/fail2ban/jail.d/glpi.conf
[glpi]
enabled = true
port = 80,443
filter = glpi
logpath = /caminho/para/glpi-production/logs/traefik/access.log
maxretry = 5
bantime = 3600
findtime = 600

Hardening MySQL

# Executar script de segurança
docker-compose exec db mysql_secure_installation

Auditoria de Segurança

# Verificar portas abertas
sudo netstat -tulpn | grep LISTEN

# Verificar processos
docker-compose top

# Scan de vulnerabilidades (opcional)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  aquasec/trivy image glpi/glpi:latest

⚡ Performance

Otimizações Implementadas

PHP (GLPI)

  • ✅ OPcache habilitado (256MB)
  • ✅ Memory limit: 1024MB
  • ✅ Max execution time: 600s
  • ✅ Upload max: 200MB

MySQL

  • ✅ InnoDB buffer pool: 2GB
  • ✅ Query cache desabilitado (MySQL 8.0)
  • ✅ Slow query log habilitado
  • ✅ Performance Schema ativo

Redis

  • ✅ MaxMemory: 512MB
  • ✅ Eviction policy: allkeys-lru
  • ✅ AOF persistence habilitado

Traefik

  • ✅ Gzip compression
  • ✅ Connection pooling
  • ✅ Sticky sessions
  • ✅ Rate limiting

Tuning Adicional

Aumentar Buffer Pool MySQL

# docker-compose.yml
services:
  db:
    command: >
      --innodb_buffer_pool_size=4G  # Aumentar para 4GB

Ajustar PHP Memory

# .env
PHP_MEMORY_LIMIT=2048M  # Aumentar para 2GB

Escalar GLPI (Múltiplas Instâncias)

# docker-compose.yml
services:
  glpi:
    deploy:
      replicas: 3  # 3 instâncias do GLPI

Benchmark

# Instalar Apache Bench
sudo apt-get install apache2-utils

# Teste de carga
ab -n 1000 -c 10 https://seu-dominio.com/

🗂️ Estrutura de Diretórios

glpi-production-stack/
├── docker-compose.yml          # Orquestração principal
├── .env                        # Variáveis de ambiente
├── .env.example               # Exemplo de configuração
├── .gitignore                 # Arquivos ignorados
├── LICENSE                    # Licença MIT
├── README.md                  # Este arquivo
│
├── traefik/                   # Configuração Traefik
│   ├── traefik.yml           # Config estática
│   ├── acme.json             # Certificados SSL
│   └── dynamic/              # Configurações dinâmicas
│       └── middlewares.yml   # Middlewares customizados
│
├── config/                    # Configurações personalizadas
│   ├── glpi/                 # Config GLPI
│   └── mysql/                # Config MySQL
│
├── logs/                      # Logs dos serviços
│   ├── glpi/                 # Logs GLPI
│   ├── mysql/                # Logs MySQL
│   ├── traefik/              # Logs Traefik
│   └── redis/                # Logs Redis
│
├── backups/                   # Backups
│   ├── mysql/                # Backups automáticos
│   └── manual/               # Backups manuais
│
├── scripts/                   # Scripts utilitários
│   ├── deploy.sh             # Script de deploy
│   ├── backup.sh             # Script de backup
│   ├── restore.sh            # Script de restore
│   ├── monitor.sh            # Script de monitoramento
│   └── setup.sh              # Setup inicial
│
└── docs/                      # Documentação adicional
    ├── INSTALLATION.md        # Guia de instalação
    ├── CONFIGURATION.md       # Guia de configuração
    ├── MAINTENANCE.md         # Guia de manutenção
    └── ARCHITECTURE.md        # Arquitetura detalhada

🤝 Contribuindo

Contribuições são bem-vindas! Por favor, siga estas diretrizes:

Como Contribuir

  1. Fork o repositório
  2. Clone seu fork: git clone https://github.com/Alxdelira/glpi-production-stack.git
  3. Crie uma branch: git checkout -b feature/minha-feature
  4. Commit suas mudanças: git commit -am 'Adiciona nova feature'
  5. Push para a branch: git push origin feature/minha-feature
  6. Abra um Pull Request

Padrões de Código

  • Use 2 espaços para indentação em YAML
  • Comente código complexo
  • Siga as convenções de nomenclatura existentes
  • Teste suas mudanças antes de submeter

Reportar Bugs

Ao reportar bugs, inclua:

  • Descrição detalhada do problema
  • Passos para reproduzir
  • Comportamento esperado vs atual
  • Logs relevantes
  • Versões (Docker, Docker Compose, SO)

Sugerir Features

Ao sugerir features:

  • Descreva o caso de uso
  • Explique o benefício
  • Forneça exemplos se possível

📝 Roadmap

  • Suporte a múltiplas instâncias GLPI (clustering)
  • Integração com Grafana/Prometheus
  • Scripts de migração de versões
  • Suporte a S3 para backups
  • Helm chart para Kubernetes
  • CI/CD com GitHub Actions
  • Testes automatizados
  • Multi-language support

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

MIT License

Copyright (c) 2024 GLPI Production Stack

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

👥 Autores

  • Alexandre Nogueira - Trabalho Inicial - Alxdelira

Veja também a lista de contribuidores que participaram deste projeto.


🙏 Agradecimentos

  • GLPI Project - Pela excelente ferramenta de ITSM
  • Traefik - Pelo incrível reverse proxy
  • Docker - Pela tecnologia de containerização
  • Comunidade Open Source - Por todo o suporte e contribuições

📞 Suporte


📊 Status do Projeto

GitHub last commit GitHub issues GitHub pull requests GitHub stars


⭐ Se este projeto foi útil, considere dar uma estrela!

Made with ❤️ for the GLPI community

⬆ Voltar ao topo

About

🚀 Stack de produção enterprise para GLPI com Traefik, MySQL 8.0, Redis e SSL automático. Deploy simplificado com Docker Compose, otimizado para alta performance e segurança.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages