423 lines
17 KiB
Python
423 lines
17 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
🐍 OPHION - Gerador de Manual PDF
|
|
"""
|
|
|
|
from fpdf import FPDF
|
|
from datetime import datetime
|
|
import os
|
|
|
|
class OphionManualPDF(FPDF):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.set_auto_page_break(auto=True, margin=15)
|
|
# Adicionar fonte Unicode
|
|
self.add_font('DejaVu', '', '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', uni=True)
|
|
self.add_font('DejaVu', 'B', '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf', uni=True)
|
|
self.add_font('DejaVuMono', '', '/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf', uni=True)
|
|
|
|
def header(self):
|
|
self.set_font('DejaVu', 'B', 10)
|
|
self.set_text_color(100, 100, 100)
|
|
self.cell(0, 10, 'OPHION - Manual de Instalação', new_x='RIGHT', new_y='TOP')
|
|
self.cell(0, 10, f'v1.0 | {datetime.now().strftime("%d/%m/%Y")}', new_x='LMARGIN', new_y='NEXT', align='R')
|
|
self.line(10, 18, 200, 18)
|
|
self.ln(5)
|
|
|
|
def footer(self):
|
|
self.set_y(-15)
|
|
self.set_font('DejaVu', '', 8)
|
|
self.set_text_color(128, 128, 128)
|
|
self.cell(0, 10, f'Página {self.page_no()}/{{nb}}', new_x='RIGHT', new_y='TOP', align='C')
|
|
|
|
def titulo(self, texto):
|
|
self.set_font('DejaVu', 'B', 18)
|
|
self.set_text_color(75, 0, 130)
|
|
self.cell(0, 15, texto, new_x='LMARGIN', new_y='NEXT')
|
|
self.ln(2)
|
|
|
|
def subtitulo(self, texto):
|
|
self.set_font('DejaVu', 'B', 14)
|
|
self.set_text_color(50, 50, 50)
|
|
self.cell(0, 10, texto, new_x='LMARGIN', new_y='NEXT')
|
|
self.ln(1)
|
|
|
|
def subtitulo2(self, texto):
|
|
self.set_font('DejaVu', 'B', 12)
|
|
self.set_text_color(70, 70, 70)
|
|
self.cell(0, 8, texto, new_x='LMARGIN', new_y='NEXT')
|
|
|
|
def paragrafo(self, texto):
|
|
self.set_font('DejaVu', '', 11)
|
|
self.set_text_color(0, 0, 0)
|
|
self.multi_cell(0, 6, texto)
|
|
self.ln(2)
|
|
|
|
def codigo(self, texto):
|
|
self.set_font('DejaVuMono', '', 9)
|
|
self.set_fill_color(245, 245, 245)
|
|
self.set_text_color(0, 100, 0)
|
|
self.multi_cell(0, 5, texto, fill=True)
|
|
self.ln(3)
|
|
|
|
def item(self, texto, bullet="-"):
|
|
self.set_font('DejaVu', '', 11)
|
|
self.set_text_color(0, 0, 0)
|
|
self.cell(8, 6, bullet, new_x='RIGHT', new_y='TOP')
|
|
self.multi_cell(0, 6, texto)
|
|
|
|
def alerta(self, texto):
|
|
self.set_fill_color(255, 243, 205)
|
|
self.set_font('DejaVu', 'B', 10)
|
|
self.set_text_color(133, 100, 4)
|
|
self.cell(0, 8, f'[!] {texto}', new_x='LMARGIN', new_y='NEXT', fill=True)
|
|
self.ln(2)
|
|
|
|
def sucesso(self, texto):
|
|
self.set_fill_color(212, 237, 218)
|
|
self.set_font('DejaVu', 'B', 10)
|
|
self.set_text_color(21, 87, 36)
|
|
self.cell(0, 8, f'[OK] {texto}', new_x='LMARGIN', new_y='NEXT', fill=True)
|
|
self.ln(2)
|
|
|
|
def gerar_manual():
|
|
pdf = OphionManualPDF()
|
|
pdf.alias_nb_pages()
|
|
|
|
# ========== CAPA ==========
|
|
pdf.add_page()
|
|
pdf.ln(40)
|
|
pdf.set_font('DejaVu', 'B', 36)
|
|
pdf.set_text_color(75, 0, 130)
|
|
pdf.cell(0, 20, 'OPHION', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
|
|
pdf.set_font('DejaVu', '', 16)
|
|
pdf.set_text_color(100, 100, 100)
|
|
pdf.cell(0, 10, 'Open Source Observability Platform', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
pdf.cell(0, 10, 'AI-Powered Monitoring', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
|
|
pdf.ln(20)
|
|
pdf.set_font('DejaVu', 'B', 20)
|
|
pdf.set_text_color(50, 50, 50)
|
|
pdf.cell(0, 15, 'Manual de Instalação', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
|
|
pdf.ln(40)
|
|
pdf.set_font('DejaVu', '', 12)
|
|
pdf.set_text_color(128, 128, 128)
|
|
pdf.cell(0, 8, f'Versão 1.0 | Fevereiro 2026', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
pdf.cell(0, 8, 'https://ophion.com.br', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
|
|
# ========== ÍNDICE ==========
|
|
pdf.add_page()
|
|
pdf.titulo('Índice')
|
|
|
|
indice = [
|
|
('1. Visão Geral', 3),
|
|
('2. Requisitos do Sistema', 3),
|
|
('3. Instalação Rápida', 4),
|
|
('4. Instalação Manual', 5),
|
|
('5. Configuração', 7),
|
|
('6. Instalação do Agent', 9),
|
|
('7. Primeiros Passos', 11),
|
|
('8. Comandos CLI', 12),
|
|
('9. Segurança', 13),
|
|
('10. Troubleshooting', 14),
|
|
('11. Suporte', 15),
|
|
]
|
|
|
|
for item, pag in indice:
|
|
pdf.set_font('DejaVu', '', 12)
|
|
pdf.cell(160, 8, item, new_x='RIGHT', new_y='TOP')
|
|
pdf.cell(0, 8, str(pag), new_x='LMARGIN', new_y='NEXT', align='R')
|
|
|
|
# ========== 1. VISÃO GERAL ==========
|
|
pdf.add_page()
|
|
pdf.titulo('1. Visão Geral')
|
|
|
|
pdf.paragrafo('OPHION é uma plataforma de observabilidade open source que combina métricas, logs e traces com inteligência artificial para monitoramento proativo de infraestrutura.')
|
|
|
|
pdf.subtitulo('Principais Recursos')
|
|
pdf.item('Métricas de sistema (CPU, RAM, Disco, Rede)')
|
|
pdf.item('Coleta e análise de logs centralizados')
|
|
pdf.item('Distributed tracing para microserviços')
|
|
pdf.item('OPHION Copilot - Chat com IA especialista')
|
|
pdf.item('Auto-Healing - Correção automática de problemas')
|
|
pdf.item('Smart Alerts - Alertas inteligentes sem ruído')
|
|
pdf.item('Predictions - Previsões de capacidade')
|
|
|
|
pdf.ln(5)
|
|
pdf.subtitulo('Stack Tecnológico')
|
|
pdf.item('Backend: Go (Fiber)')
|
|
pdf.item('Frontend: Next.js 14 + TypeScript')
|
|
pdf.item('Banco de dados: PostgreSQL + ClickHouse')
|
|
pdf.item('Cache: Redis')
|
|
pdf.item('IA: OpenAI GPT-4')
|
|
|
|
# ========== 2. REQUISITOS ==========
|
|
pdf.add_page()
|
|
pdf.titulo('2. Requisitos do Sistema')
|
|
|
|
pdf.subtitulo('Requisitos Mínimos')
|
|
pdf.item('CPU: 2 cores')
|
|
pdf.item('RAM: 4 GB')
|
|
pdf.item('Disco: 20 GB SSD')
|
|
pdf.item('OS: Ubuntu 20.04+ / Debian 11+ / CentOS 8+')
|
|
|
|
pdf.ln(3)
|
|
pdf.subtitulo('Requisitos Recomendados (Produção)')
|
|
pdf.item('CPU: 4+ cores')
|
|
pdf.item('RAM: 8+ GB')
|
|
pdf.item('Disco: 100+ GB SSD')
|
|
pdf.item('OS: Ubuntu 22.04 LTS')
|
|
|
|
pdf.ln(3)
|
|
pdf.subtitulo('Software Necessário')
|
|
pdf.item('Docker 24.0+')
|
|
pdf.item('Docker Compose 2.0+')
|
|
pdf.item('curl, git (para instalação)')
|
|
|
|
pdf.ln(3)
|
|
pdf.subtitulo('Portas Utilizadas')
|
|
pdf.codigo('8080 - API REST\n3000 - Dashboard Web\n5432 - PostgreSQL (interno)\n9000 - ClickHouse (interno)\n6379 - Redis (interno)')
|
|
|
|
# ========== 3. INSTALAÇÃO RÁPIDA ==========
|
|
pdf.add_page()
|
|
pdf.titulo('3. Instalação Rápida')
|
|
|
|
pdf.paragrafo('A forma mais fácil de instalar o OPHION é usando nosso instalador interativo:')
|
|
|
|
pdf.codigo('curl -fsSL https://get.ophion.io | bash')
|
|
|
|
pdf.paragrafo('O instalador irá:')
|
|
pdf.item('Verificar os requisitos do sistema')
|
|
pdf.item('Coletar informações da sua empresa')
|
|
pdf.item('Gerar credenciais seguras automaticamente')
|
|
pdf.item('Configurar todos os serviços')
|
|
pdf.item('Iniciar a plataforma')
|
|
|
|
pdf.ln(3)
|
|
pdf.subtitulo('Informações Solicitadas')
|
|
pdf.item('Nome da empresa/organização')
|
|
pdf.item('Email do administrador')
|
|
pdf.item('Senha do administrador (mín. 8 caracteres)')
|
|
pdf.item('Domínio (opcional, padrão: localhost)')
|
|
pdf.item('Portas do servidor e dashboard')
|
|
pdf.item('Configuração do Telegram para alertas (opcional)')
|
|
|
|
pdf.ln(3)
|
|
pdf.alerta('IMPORTANTE: Guarde a API Key exibida ao final da instalação!')
|
|
|
|
# ========== 4. INSTALAÇÃO MANUAL ==========
|
|
pdf.add_page()
|
|
pdf.titulo('4. Instalação Manual')
|
|
|
|
pdf.subtitulo('4.1 Instalar Docker')
|
|
pdf.codigo('# Ubuntu/Debian\nsudo apt update\nsudo apt install -y curl\ncurl -fsSL https://get.docker.com | sh\nsudo usermod -aG docker $USER')
|
|
|
|
pdf.alerta('Faça logout e login novamente após adicionar o usuário ao grupo docker.')
|
|
|
|
pdf.subtitulo('4.2 Baixar OPHION')
|
|
pdf.codigo('git clone https://github.com/bigtux/ophion.git\ncd ophion')
|
|
|
|
pdf.subtitulo('4.3 Configurar Variáveis de Ambiente')
|
|
pdf.codigo('cp .env.example .env\nnano .env')
|
|
|
|
pdf.paragrafo('Edite as seguintes variáveis:')
|
|
pdf.codigo('ORG_NAME="Sua Empresa"\nADMIN_EMAIL=admin@empresa.com\nADMIN_PASSWORD=senha-forte-aqui\nDOMAIN=ophion.empresa.com\nJWT_SECRET=$(openssl rand -hex 32)')
|
|
|
|
pdf.add_page()
|
|
pdf.subtitulo('4.4 Iniciar os Serviços')
|
|
pdf.codigo('docker compose up -d')
|
|
|
|
pdf.subtitulo('4.5 Verificar Status')
|
|
pdf.codigo('docker compose ps')
|
|
|
|
pdf.paragrafo('Todos os serviços devem estar com status "running":')
|
|
pdf.codigo('ophion-server running 0.0.0.0:8080->8080/tcp\nophion-web running 0.0.0.0:3000->3000/tcp\nophion-postgres running 5432/tcp\nophion-clickhouse running 9000/tcp\nophion-redis running 6379/tcp')
|
|
|
|
pdf.sucesso('Acesse o dashboard em http://localhost:3000')
|
|
|
|
# ========== 5. CONFIGURAÇÃO ==========
|
|
pdf.add_page()
|
|
pdf.titulo('5. Configuração')
|
|
|
|
pdf.subtitulo('5.1 Arquivo .env')
|
|
pdf.paragrafo('Todas as configurações são feitas via variáveis de ambiente no arquivo .env:')
|
|
|
|
pdf.subtitulo2('Organização')
|
|
pdf.codigo('ORG_NAME="Minha Empresa"\nADMIN_EMAIL=admin@empresa.com\nADMIN_PASSWORD=senha-segura')
|
|
|
|
pdf.subtitulo2('Rede')
|
|
pdf.codigo('DOMAIN=localhost\nSERVER_PORT=8080\nDASHBOARD_PORT=3000')
|
|
|
|
pdf.subtitulo2('Segurança')
|
|
pdf.codigo('JWT_SECRET=<64-caracteres-aleatorios>\nAPI_KEY=ophion_<64-caracteres-hex>')
|
|
|
|
pdf.alerta('Nunca compartilhe o JWT_SECRET ou API_KEY!')
|
|
|
|
pdf.add_page()
|
|
pdf.subtitulo2('Banco de Dados')
|
|
pdf.codigo('POSTGRES_USER=ophion\nPOSTGRES_PASSWORD=senha-segura\nDATABASE_URL=postgres://ophion:senha@postgres:5432/ophion')
|
|
|
|
pdf.subtitulo2('Alertas - Telegram')
|
|
pdf.codigo('TELEGRAM_ENABLED=true\nTELEGRAM_BOT_TOKEN=123456:ABC...\nTELEGRAM_CHAT_ID=-100123456789')
|
|
|
|
pdf.subtitulo2('IA (OpenAI)')
|
|
pdf.codigo('OPENAI_API_KEY=sk-...')
|
|
|
|
pdf.subtitulo('5.2 Gerar Credenciais Seguras')
|
|
pdf.codigo('# JWT Secret\nopenssl rand -hex 32\n\n# API Key\necho "ophion_$(openssl rand -hex 32)"')
|
|
|
|
# ========== 6. AGENT ==========
|
|
pdf.add_page()
|
|
pdf.titulo('6. Instalação do Agent')
|
|
|
|
pdf.paragrafo('O Agent é instalado em cada servidor que você deseja monitorar.')
|
|
|
|
pdf.subtitulo('6.1 Instalação Automática')
|
|
pdf.codigo('curl -fsSL http://SEU-SERVIDOR:8080/install-agent.sh | sudo bash')
|
|
|
|
pdf.subtitulo('6.2 Instalação Manual')
|
|
|
|
pdf.subtitulo2('Baixar o binário')
|
|
pdf.codigo('curl -o /usr/local/bin/ophion-agent \\\n http://SEU-SERVIDOR:8080/downloads/agent/linux/amd64/ophion-agent\nchmod +x /usr/local/bin/ophion-agent')
|
|
|
|
pdf.subtitulo2('Criar configuração')
|
|
pdf.codigo('mkdir -p /etc/ophion\ncat > /etc/ophion/agent.yaml << EOF\nserver:\n url: http://SEU-SERVIDOR:8080\n api_key: SUA-API-KEY\n\ncollection:\n interval: 30s\n\nmetrics:\n enabled: true\n include:\n - cpu\n - memory\n - disk\n - network\n\nlogs:\n enabled: true\n paths:\n - /var/log/syslog\n - /var/log/auth.log\nEOF')
|
|
|
|
pdf.add_page()
|
|
pdf.subtitulo2('Criar serviço systemd')
|
|
pdf.codigo('cat > /etc/systemd/system/ophion-agent.service << EOF\n[Unit]\nDescription=OPHION Monitoring Agent\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/ophion-agent -config /etc/ophion/agent.yaml\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\nEOF')
|
|
|
|
pdf.subtitulo2('Iniciar o serviço')
|
|
pdf.codigo('sudo systemctl daemon-reload\nsudo systemctl enable ophion-agent\nsudo systemctl start ophion-agent')
|
|
|
|
pdf.subtitulo2('Verificar status')
|
|
pdf.codigo('sudo systemctl status ophion-agent\nsudo journalctl -u ophion-agent -f')
|
|
|
|
# ========== 7. PRIMEIROS PASSOS ==========
|
|
pdf.add_page()
|
|
pdf.titulo('7. Primeiros Passos')
|
|
|
|
pdf.subtitulo('7.1 Acessar o Dashboard')
|
|
pdf.item('Abra o navegador em http://localhost:3000')
|
|
pdf.item('Faça login com o email e senha do administrador')
|
|
|
|
pdf.subtitulo('7.2 Adicionar Hosts')
|
|
pdf.item('Instale o Agent em cada servidor')
|
|
pdf.item('Os hosts aparecerão automaticamente no dashboard')
|
|
|
|
pdf.subtitulo('7.3 Configurar Alertas')
|
|
pdf.item('Acesse Settings > Alerts')
|
|
pdf.item('Crie regras de alerta (ex: CPU > 90%)')
|
|
pdf.item('Configure canais de notificação (Telegram, Slack, Email)')
|
|
|
|
pdf.subtitulo('7.4 Usar o Copilot')
|
|
pdf.item('Clique no ícone do chat no canto inferior')
|
|
pdf.item('Faça perguntas sobre sua infraestrutura')
|
|
pdf.item('Exemplo: "Por que o servidor X está lento?"')
|
|
|
|
pdf.subtitulo('7.5 Configurar Auto-Healing')
|
|
pdf.item('Acesse Settings > Auto-Healing')
|
|
pdf.item('Comece no modo dry-run (apenas sugestões)')
|
|
pdf.item('Revise e aprove ações antes de habilitar automação total')
|
|
|
|
# ========== 8. CLI ==========
|
|
pdf.add_page()
|
|
pdf.titulo('8. Comandos CLI')
|
|
|
|
pdf.paragrafo('O OPHION inclui uma CLI para gerenciamento:')
|
|
|
|
pdf.codigo('ophion start # Iniciar todos os serviços\nophion stop # Parar todos os serviços\nophion restart # Reiniciar serviços\nophion status # Ver status dos containers\nophion logs # Ver logs do servidor\nophion logs ophion-web # Ver logs do dashboard\nophion update # Atualizar para última versão\nophion backup # Criar backup dos dados\nophion api-key # Gerar nova API Key\nophion agent-install # Ver comando de instalação do agent')
|
|
|
|
pdf.subtitulo('Exemplos')
|
|
|
|
pdf.subtitulo2('Ver logs em tempo real')
|
|
pdf.codigo('ophion logs -f')
|
|
|
|
pdf.subtitulo2('Criar backup')
|
|
pdf.codigo('ophion backup\n# Backup criado em /opt/ophion/backups/20260206_120000/')
|
|
|
|
pdf.subtitulo2('Atualizar')
|
|
pdf.codigo('ophion update\n# Baixa novas imagens e reinicia os serviços')
|
|
|
|
# ========== 9. SEGURANÇA ==========
|
|
pdf.add_page()
|
|
pdf.titulo('9. Segurança')
|
|
|
|
pdf.subtitulo('9.1 Autenticação')
|
|
pdf.item('JWT Tokens para usuários (acesso ao dashboard)')
|
|
pdf.item('API Keys para agents e integrações')
|
|
pdf.item('Bcrypt para hash de senhas (cost 12)')
|
|
|
|
pdf.subtitulo('9.2 Rate Limiting')
|
|
pdf.codigo('Login: 5 requisições/minuto\nAPI: 100 requisições/minuto\nIngestão: 1000 requisições/minuto')
|
|
|
|
pdf.subtitulo('9.3 Proteção contra Brute Force')
|
|
pdf.item('5 tentativas de login = bloqueio de 15 minutos')
|
|
pdf.item('Tracking por IP + email')
|
|
|
|
pdf.subtitulo('9.4 Política de Senha')
|
|
pdf.item('Mínimo 12 caracteres')
|
|
pdf.item('Letra maiúscula obrigatória')
|
|
pdf.item('Letra minúscula obrigatória')
|
|
pdf.item('Número obrigatório')
|
|
pdf.item('Caractere especial obrigatório')
|
|
|
|
pdf.subtitulo('9.5 HTTPS')
|
|
pdf.paragrafo('Em produção, sempre use HTTPS. Recomendamos Cloudflare ou Let\'s Encrypt.')
|
|
|
|
# ========== 10. TROUBLESHOOTING ==========
|
|
pdf.add_page()
|
|
pdf.titulo('10. Troubleshooting')
|
|
|
|
pdf.subtitulo('Containers não iniciam')
|
|
pdf.codigo('# Ver logs de erro\ndocker compose logs\n\n# Verificar recursos\ndocker system df\ndf -h')
|
|
|
|
pdf.subtitulo('Agent não conecta')
|
|
pdf.codigo('# Testar conectividade\ncurl http://SEU-SERVIDOR:8080/health\n\n# Ver logs do agent\njournalctl -u ophion-agent -f')
|
|
|
|
pdf.subtitulo('Erro de SSL (Cloudflare)')
|
|
pdf.item('Verifique se o modo SSL está em "Flexible" ou "Full"')
|
|
pdf.item('Se "Full (Strict)", precisa de certificado válido no servidor')
|
|
|
|
pdf.subtitulo('Resetar senha do admin')
|
|
pdf.codigo("docker compose exec postgres psql -U ophion -c \\\n \"UPDATE users SET password_hash = \\\n crypt('nova-senha', gen_salt('bf')) \\\n WHERE email = 'admin@email.com';\"")
|
|
|
|
pdf.subtitulo('Limpar dados e recomeçar')
|
|
pdf.codigo('ophion stop\nrm -rf /opt/ophion/data/*\nophion start')
|
|
pdf.alerta('Isso apaga todos os dados! Use apenas em último caso.')
|
|
|
|
# ========== 11. SUPORTE ==========
|
|
pdf.add_page()
|
|
pdf.titulo('11. Suporte')
|
|
|
|
pdf.subtitulo('Documentação')
|
|
pdf.item('Site: https://docs.ophion.com.br')
|
|
pdf.item('GitHub: https://github.com/bigtux/ophion')
|
|
|
|
pdf.subtitulo('Comunidade')
|
|
pdf.item('Discord: https://discord.gg/ophion')
|
|
pdf.item('Email: suporte@ophion.com.br')
|
|
|
|
pdf.subtitulo('Reportar Bugs')
|
|
pdf.item('GitHub Issues: https://github.com/bigtux/ophion/issues')
|
|
|
|
pdf.subtitulo('Segurança')
|
|
pdf.item('Vulnerabilidades: security@ophion.com.br')
|
|
pdf.alerta('NAO abra issues publicas para vulnerabilidades de segurança!')
|
|
|
|
pdf.ln(10)
|
|
pdf.set_font('DejaVu', '', 10)
|
|
pdf.set_text_color(128, 128, 128)
|
|
pdf.cell(0, 10, '(c) 2026 OPHION - Made with love in Brazil', new_x='LMARGIN', new_y='NEXT', align='C')
|
|
|
|
# Salvar
|
|
output_path = '/home/kernelpanic/projetos_jarvis/ophion/docs/OPHION_Manual_Instalacao.pdf'
|
|
pdf.output(output_path)
|
|
print(f'PDF gerado: {output_path}')
|
|
return output_path
|
|
|
|
if __name__ == '__main__':
|
|
gerar_manual()
|