# Build e Deployment Instructions <<<<<<< HEAD ## Prerequisites - Docker and Docker Compose installed - ~5GB free disk space - 8GB RAM minimum - CPU for model inference ## Download the Model Before building, download the Llama 3.2 3B quantized model: ```bash # Download model (approximately 2GB) cd backend wget -O llama-3.2-3b-instruct-q4_0.gguf "https://us.aws.cdn.hf.co/xet-bridge-us/6718a700b21019fade8d68ac/b472da725da9aaf0e050c885680a67f61fceb097eb4277b0cc1e0b94e3559345?user_id=public&xip=4ii5zzvItH8&X-Xet-Cas-Uid=public&response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llama-3.2-3b-instruct-q4_0.gguf%3B+filename%3D%22llama-3.2-3b-instruct-q4_0.gguf%22%3B&Expires=1793546619&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly91cy5hd3MuY2RuLmhmLmNvL3hldC1icmlkZ2UtdXMvNjcxOGE3MDBiMjEwMTlmYWRlOGQ2OGFjL2I0NzJkYTcyNWRhOWFhZjBlMDUwYzg4NTY4MGE2N2Y2MWZjZWIwOTdlYjQyNzdiMGNjMWUwYjk0ZTM1NTkzNDVcXD91c2VyX2lkPXB1YmxpYyZ4aXA9NGlpNXp6dkl0SDgmWC1YZXQtQ2FzLVVpZD1wdWJsaWMmcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj1hdHRhY2htZW50JTNCK2ZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjdsbGFtYS0zLjItM2ItaW5zdHJ1Y3QtcTRfMC5nZ3VmJTNCK2ZpbGVuYW1lJTNEJTIybGxhbWEtMy4yLTNiLWluc3RydWN0LXE0XzAuZ2d1ZiUyMiUzQiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiRXBvY2hUaW1lIjoxNzkzNTQ2NjE5fX19XX0_&Signature=MEUCIBdL2cMsOqav%7EbG9Q2mearSLUBdBtfCA3sOBE5GdbXUnAiEA7xWOea%7ETy0Jf%7EPgRYyx1S9bxvnSFoTBI%7ERadl-Nmd8E_&Key-Pair-Id=01KXEF4KZ1B6FV465MAWR4M21F&Hash-Algorithm=SHA256" # Place in models directory mkdir -p models mv llama-3.2-3b-instruct-q4_0.gguf models/ ``` Alternatively, use GPT4All's built-in downloader when starting the service. ## Environment Setup 1. Copy the environment template: ======= ![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg) ![Python](https://img.shields.io/badge/Python-3.11-blue.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg) Instruções completas para build, deploy e uso do Sistema RAG Espiritismo. ## 📋 Conteúdo - [Pré-requisitos](#pré-requisitos) - [Download do Modelo](#download-do-modelo) - [Configuração de Ambiente](#configuração-de-ambiente) - [Build do Projeto](#build-do-projeto) - [Deploy com Docker Compose](#deploy-com-docker-compose) - [Indexação dos Livros](#indexação-dos-livros) - [Uso da Aplicação](#uso-da-aplicação) - [Monitoramento](#monitoramento) - [Troubleshooting](#troubleshooting) - [Segurança](#segurança) - [Escalabilidade](#escalabilidade) ## 🔧 Pré-requisitos ### Hardware - **CPU**: 4+ cores (recomendado) - **RAM**: 8GB mínima (12GB recomendado) - **Disco**: 5GB disponíveis - **Rede**: Conexão estável para downloads ### Software - **Docker**: Versão 20.10+ (https://docs.docker.com/get-docker/) - **Docker Compose**: Versão 2.0+ (https://docs.docker.com/compose/install/) - **Git**: Versão 2.0+ (https://git-scm.com/downloads) - **Terminal**: bash/zsh compatível ### Acesso à Internet - Para download do modelo (~2GB) - Para clones do repositório - Para pull de imagens Docker ## 📥 Download do Modelo ### Opção 1: Manual Download ```bash cd backend mkdir -p models # Baixe o modelo Llama 3.2 3B quantizado (4-bit) wget -O llama-3.2-3b-instruct-q4_0.gguf "https://us.aws.cdn.hf.co/xet-bridge-us/6718a700b21019fade8d68ac/b472da725da9aaf0e050c885680a67f61fceb097eb4277b0cc1e0b94e3559345?user_id=public&xip=4ii5zzvItH8&X-Xet-Cas-Uid=public&response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llama-3.2-3b-instruct-q4_0.gguf%3B+filename%3D%22llama-3.2-3b-instruct-q4_0.gguf%22%3B&Expires=1793546619&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly91cy5hd3MuY2RuLmhmLmNvL3hldC1icmlkZ2UtdXMvNjcxOGE3MDBiMjEwMTlmYWRlOGQ2OGFjL2I0NzJkYTcyNWRhOWFhZjBlMDUwYzg4NTY4MGE2N2Y2MWZjZWIwOTdlYjQyNzdiMGNjMWUwYjk0ZTM1NTkzNDVcXD91c2VyX2lkPXB1YmxpYyZ4aXA9NGlpNXp6dkl0SDgmWC1YZXQtQ2FzLVVpZD1wdWJsaWMmcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj1hdHRhY2htZW50JTNCK2ZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjdsbGFtYS0zLjItM2ItaW5zdHJ1Y3QtcTRfMC5nZ3VmJTNCK2ZpbGVuYW1lJTNEJTIybGxhbWEtMy4yLTNiLWluc3RydWN0LXE0XzAuZ2d1ZiUyMiUzQiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiRXBvY2hUaW1lIjoxNzkzNTQ2NjE5fX19XX0_&Signature=MEUCIBdL2cMsOqav%7EbG9Q2mearSLUBdBtfCA3sOBE5GdbXUnAiEA7xWOea%7ETy0Jf%7EPgRYyx1S9bxvnSFoTBI%7ERadl-Nmd8E_&Key-Pair-Id=01KXEF4KZ1B6FV465MAWR4M21F&Hash-Algorithm=SHA256" # Valide o tamanho (deve ser ~2GB) ls -lh models/llama-3.2-3b-instruct-q4_0.gguf # Mova para o diretório correto mv llama-3.2-3b-instruct-q4_0.gguf models/ ``` ### Opção 2: GPT4All Auto-Download ```bash cd backend # Inicie o serviço web primeiro docker-compose run --rm web # Na interface web, o GPT4All vai baixar o modelo automaticamente # ou use a mesma URL assinada do CDN (Opção 1) ``` ### Opção 3: Script Automático ```bash #!/bin/bash # download_model.sh cd backend mkdir -p models MODEL_URL="https://us.aws.cdn.hf.co/xet-bridge-us/6718a700b21019fade8d68ac/b472da725da9aaf0e050c885680a67f61fceb097eb4277b0cc1e0b94e3559345?user_id=public&xip=4ii5zzvItH8&X-Xet-Cas-Uid=public&response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llama-3.2-3b-instruct-q4_0.gguf%3B+filename%3D%22llama-3.2-3b-instruct-q4_0.gguf%22%3B&Expires=1793546619&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly91cy5hd3MuY2RuLmhmLmNvL3hldC1icmlkZ2UtdXMvNjcxOGE3MDBiMjEwMTlmYWRlOGQ2OGFjL2I0NzJkYTcyNWRhOWFhZjBlMDUwYzg4NTY4MGE2N2Y2MWZjZWIwOTdlYjQyNzdiMGNjMWUwYjk0ZTM1NTkzNDVcXD91c2VyX2lkPXB1YmxpYyZ4aXA9NGlpNXp6dkl0SDgmWC1YZXQtQ2FzLVVpZD1wdWJsaWMmcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj1hdHRhY2htZW50JTNCK2ZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjdsbGFtYS0zLjItM2ItaW5zdHJ1Y3QtcTRfMC5nZ3VmJTNCK2ZpbGVuYW1lJTNEJTIybGxhbWEtMy4yLTNiLWluc3RydWN0LXE0XzAuZ2d1ZiUyMiUzQiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiRXBvY2hUaW1lIjoxNzkzNTQ2NjE5fX19XX0_&Signature=MEUCIBdL2cMsOqav%7EbG9Q2mearSLUBdBtfCA3sOBE5GdbXUnAiEA7xWOea%7ETy0Jf%7EPgRYyx1S9bxvnSFoTBI%7ERadl-Nmd8E_&Key-Pair-Id=01KXEF4KZ1B6FV465MAWR4M21F&Hash-Algorithm=SHA256" if [ ! -f "models/llama-3.2-3b-instruct-q4_0.gguf" ]; then echo "Baixando modelo Llama 3.2 3B..." wget -O models/llama-3.2-3b-instruct-q4_0.gguf "$MODEL_URL" echo "Download concluído!" else echo "Modelo já existe!" fi ``` ### Validação do Download ```bash # Verifique o tamanho ls -lh backend/models/llama-3.2-3b-instruct-q4_0.gguf # Esperado: ~2.0 GB # Verifique o hash (opcional) sha256sum backend/models/llama-3.2-3b-instruct-q4_0.gguf ``` ## ⚙️ Configuração de Ambiente ### 1. Clone o Repositório ```bash git clone https://git.labexposed.com/lgcosta/espiritismo-rag-system.git cd espiritismo-rag-system ``` ### 2. Copie o Template de Variáveis de Ambiente >>>>>>> 50ae4db41723d2c6ea63799065316f1ae27bfb03 ```bash cp backend/.env.example .env ``` <<<<<<< HEAD 2. Edit `.env` and set your Telegram credentials: ```env TELEGRAM_BOT_TOKEN=your_bot_token_here TELEGRAM_CHAT_ID=your_chat_id_here ``` To get your chat ID, create a bot with @BotFather on Telegram and send `/start`. ## Build and Start 1. Build the containers: ```bash docker-compose build ``` 2. Start all services: ```bash docker-compose up -d ``` ## Index the Books After starting the services, index the 6 existing books: ```bash docker compose run --rm web python scripts/index_books.py ``` This will: - Load PDFs from the `PDF/` directory - Extract text chunks - Generate embeddings - Store in Qdrant ## Access the Services - **Web Interface**: http://localhost:8000 - **Qdrant API**: http://localhost:6333/dashboard - **Redis**: localhost:6379 ## Create a Telegram Bot 1. Chat with @BotFather on Telegram 2. Send `/newbot` and follow instructions 3. Copy the bot token to `.env` ## Schedule Messages 1. Open the web interface: http://localhost:8000 2. Click on "Agendar Mensagens" 3. Select date/time and optionally a specific book 4. Click "Adicionar Agendamento" ## Stop the Services ```bash docker-compose down ``` ## View Logs ```bash # All services docker-compose logs -f # Specific service docker-compose logs -f web docker-compose logs -f celery docker-compose logs -f celery-beat ``` ## Troubleshooting ### Model Download Issues If the model download fails: ```bash # Download manually (mesma URL assinada da seção Download do Modelo) cd backend mkdir -p models wget -O models/llama-3.2-3b-instruct-q4_0.gguf "https://us.aws.cdn.hf.co/xet-bridge-us/6718a700b21019fade8d68ac/b472da725da9aaf0e050c885680a67f61fceb097eb4277b0cc1e0b94e3559345?user_id=public&xip=4ii5zzvItH8&X-Xet-Cas-Uid=public&response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llama-3.2-3b-instruct-q4_0.gguf%3B+filename%3D%22llama-3.2-3b-instruct-q4_0.gguf%22%3B&Expires=1793546619&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly91cy5hd3MuY2RuLmhmLmNvL3hldC1icmlkZ2UtdXMvNjcxOGE3MDBiMjEwMTlmYWRlOGQ2OGFjL2I0NzJkYTcyNWRhOWFhZjBlMDUwYzg4NTY4MGE2N2Y2MWZjZWIwOTdlYjQyNzdiMGNjMWUwYjk0ZTM1NTkzNDVcXD91c2VyX2lkPXB1YmxpYyZ4aXA9NGlpNXp6dkl0SDgmWC1YZXQtQ2FzLVVpZD1wdWJsaWMmcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj1hdHRhY2htZW50JTNCK2ZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjdsbGFtYS0zLjItM2ItaW5zdHJ1Y3QtcTRfMC5nZ3VmJTNCK2ZpbGVuYW1lJTNEJTIybGxhbWEtMy4yLTNiLWluc3RydWN0LXE0XzAuZ2d1ZiUyMiUzQiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiRXBvY2hUaW1lIjoxNzkzNTQ2NjE5fX19XX0_&Signature=MEUCIBdL2cMsOqav%7EbG9Q2mearSLUBdBtfCA3sOBE5GdbXUnAiEA7xWOea%7ETy0Jf%7EPgRYyx1S9bxvnSFoTBI%7ERadl-Nmd8E_&Key-Pair-Id=01KXEF4KZ1B6FV465MAWR4M21F&Hash-Algorithm=SHA256" ``` ### Qdrant Not Starting ```bash # Remove existing volume docker volume rm espiritismo_qdrant_data # Restart docker-compose up -d qdrant ``` ### Out of Memory Reduce the number of workers or use a smaller model. ### Import Errors Rebuild with: ```bash docker-compose build --no-cache web docker-compose up -d web ``` ======= ### 3. Configure as Variáveis Edite o arquivo `.env` com suas configurações: ```env # === Configurações do Modelo === GPT4ALL_MODEL=models/llama-3.2-3b-instruct-q4_0.gguf MODEL_PATH=/app/models/llama-3.2-3b-instruct-q4_0.gguf # === Configurações do Qdrant === QDRANT_URL=http://qdrant:6333 QDRANT_API_KEY= # Opcional, deixe vazio se não usar autenticação # === Configurações do Telegram Bot === TELEGRAM_BOT_TOKEN=sua_token_aqui TELEGRAM_CHAT_ID=sua_chat_id_aqui # === Configurações do Celery === CELERY_BROKER_URL=redis://redis:6379/0 CELERY_RESULT_BACKEND=redis://6379/0 # === Caminhos === UPLOAD_DIR=/app/uploads INDEX_DIR=/app/index SCHEDULES_PATH=/app/schedules.json # === Configurações de Debug === DEBUG=false LOG_LEVEL=INFO ``` ### 4. Como Obter Telegram Bot Token #### Criar o Bot 1. Abra o Telegram e procure por @BotFather 2. Envie `/newbot` 3. Siga as instruções: - Dê um nome para o bot (ex: "EspiritismoBot") - Dê um username único (ex: "espiritismo_bot") 4. Copie o token fornecido #### Obter seu Chat ID ```bash # Método 1: Usando curl curl "https://api.telegram.org/bot/getUpdates" # Procure pela chave "id" no resultado # Exemplo: "id": 123456789 # Método 2: Usando uma URL no navegador https://api.telegram.org/bot/getUpdates ``` ### 5. Validar Configuração ```bash # Verifique se .env existe e não está vazio if [ -s .env ]; then echo "✅ Configuração de ambiente válida" else echo "❌ .env está vazio ou não existe" fi ``` ## 🏗️ Build do Projeto ### 1. Limpar Cache Anterior (Opcional) ```bash # Remove imagens existentes docker-compose down docker system prune -a -f # Remove volumes (apenas se necessário) docker volume rm espiritismo_qdrant_data 2>/dev/null || true docker volume rm espiritismo_redis_data 2>/dev/null || true ``` ### 2. Build das Imagens Docker ```bash # Build básico docker-compose build # Build completo com cache docker-compose build --no-cache # Build com progresso detalhado docker-compose build --progress=plain ``` ### 3. Verificar Imagens Buildadas ```bash # Listar imagens docker images | grep espiritismo # Verificar tamanho docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep espiritismo ``` **Esperado:** - `lgcosta/espiritismo-web:latest` (~1.2GB) - `lgcosta/espiritismo-celery:latest` (~1.2GB) ## 🚀 Deploy com Docker Compose ### 1. Iniciar Todos os Serviços ```bash # Start em background docker-compose up -d # Start com logs docker-compose up ``` ### 2. Verificar Status dos Serviços ```bash # Lista todos os containers docker-compose ps # Status específico docker-compose ps qdrant docker-compose ps redis docker-compose ps web ``` **Esperado:** ``` NAME STATUS espiritismo-qdrant Up 10 seconds espiritismo-redis Up 10 seconds espiritismo-web Up 10 seconds espiritismo-celery Up 10 seconds espiritismo-celery-beat Up 10 seconds ``` ### 3. Ver Logs ```bash # Logs de todos os serviços docker-compose logs -f # Logs do web service docker-compose logs -f web # Logs do celery docker-compose logs -f celery # Logs do celery beat docker-compose logs -f celery-beat # Logs do qdrant docker-compose logs -f qdrant # Últimas 100 linhas docker-compose logs --tail=100 ``` ### 4. Acessar os Serviços - **Web Interface**: http://localhost:8000 - **Qdrant Dashboard**: http://localhost:6333/dashboard - **API Documentation**: http://localhost:8000/docs ## 📚 Indexação dos Livros ### 1. Listar Livros Disponíveis ```bash # Lista arquivos na pasta PDF ls -lh PDF/ # Deve mostrar: # A_Genese-Guillon.pdf # Livro_dos_Espiritos-Guillon.pdf # Livro_dos_Mediuns-Guillon.pdf # O_Ceu_e_o_Inferno-Manuel_Quintao.pdf # O_Evangelho_Segundo_o_Espiritismo-Guillon.pdf # O_que_e_o_Espiritismo.pdf ``` ### 2. Executar Script de Indexação ```bash # Método 1: Via container docker compose run --rm web python scripts/index_books.py # Método 2: Com limite de logs docker compose run --rm web python scripts/index_books.py 2>&1 | tee index.log ``` ### 3. Monitorar Progresso ```bash # Processando logs docker-compose logs -f web # Esperado: # Found 6 books # Processing: A_Genese-Guillon.pdf # Saved 120 chunks to /app/index/A_Genese-Guillon.json # Processing: Livro_dos_Espiritos-Guillon.pdf # ... # Indexing complete! ``` ### 4. Verificar Indexação ```bash # Lista de chunks indexados ls -lh backend/index/ # Conteúdo de um chunk JSON (exemplo) cat backend/index/A_Genese-Guillon.json | head -20 # Verificar em Qdrant curl http://localhost:6333/collections/espiritismo_books ``` ### 5. Reindexar (Se Necessário) ```bash # Limpar indexação anterior rm -rf backend/index/* rm backend/schedules.json # Reindexar docker compose run --rm web python scripts/index_books.py ``` ## 🎮 Uso da Aplicação ### Web Interface 1. **Acesse a interface:** ``` http://localhost:8000 ``` 2. **Teste o Chat:** - Digite: "Qual é o princípio fundamental do espiritismo?" - Clique em "Enviar" - Receba resposta com fontes 3. **Upload de PDF:** - Clique em "Upload PDF" - Selecione arquivo PDF - Clique em "Upload PDF" - Confirme mensagem de sucesso 4. **Agendamento:** - Vá até "Agendar Mensagens" - Selecione data/hora - Escolha livro ou "Todos os livros" - Clique em "Adicionar Agendamento" - Confirme que apareceu na lista ### Bot Telegram #### Configuração ```bash # Verifique se bot está ativo docker-compose logs celery | grep -i "polling\|started" # Deve ver: # Starting Telegram bot polling... ``` #### Comandos Disponíveis 1. **/start** - Apresentação ``` /start 📚 Sistema RAG Espiritismo Comandos disponíveis: /start - Iniciar /help - Ajuda /status - Ver status /books - Listar livros ``` 2. **/help** - Lista de comandos ``` /help 📚 Sistema RAG Espiritismo Comandos disponíveis: /start - Iniciar /help - Ajuda /status - Ver status /books - Listar livros ``` 3. **/status** - Status do sistema ``` /status 📚 Status do Sistema RAG Espiritismo Bot: Ativo Chat ID: 123456789 Direcione uma pergunta sobre espiritismo para eu responder! ``` 4. **/books** - Lista de livros ``` /books 📚 Livros disponíveis: • A Gênese (Allan Kardec) • Livro dos Espíritos (Allan Kardec) • Livro dos Médiums (Allan Kardec) • O Céu e o Inferno (Manuel Quintão) • O Evangelho Segundo o Espiritismo (Allan Kardec) • O Que é o Espiritismo (Allan Kardec) ``` 5. **Pergunta** - Responder perguntas ``` Qual é a doutrina da reencarnação? 🔍 Processando sua pergunta... ✅ Resposta: A reencarnação é um dos princípios fundamentais do espiritismo... 📚 Fontes: • A Gênese (chunk 45) • Livro dos Espíritos (chunk 78) • ... ``` ### Agendamento de Mensagens 1. **Criar Agendamento** ``` Data/Hora: 2026-11-02T10:00 Livro: Livro dos Espíritos ``` - Mensagem enviada automaticamente às 10:00 - Contém resumo do livro escolhido 2. **Agendar para Todos os Livros** ``` Data/Hora: 2026-11-02T14:00 Livro: Todos os livros ``` - Mensagem enviada às 14:00 com conteúdo de todos os livros 3. **Gerenciar Agendamentos** - Ver lista de agendamentos na web - Editar data/hora - Excluir agendamentos - Status de execução ## 📊 Monitoramento ### Métricas do Sistema ```bash # CPU Usage docker stats # Memory Usage docker stats --no-stream # Container Status docker-compose ps -a ``` ### Logs por Serviço ```bash # Logs web (últimos 50 linhas) docker-compose logs --tail=50 web # Logs celery (últimos 50 linhas) docker-compose logs --tail=50 celery # Logs celery beat (últimos 50 linhas) docker-compose logs --tail=50 celery-beat # Buscar logs específicos docker-compose logs | grep "ERROR" docker-compose logs | grep "WARNING" docker-compose logs | grep "INFO" | grep "index" ``` ### Health Checks ```bash # Web API health curl http://localhost:8000/docs # Qdrant health curl http://localhost:6333/collections/espiritismo_books # Redis ping docker-compose exec redis redis-cli ping # Resposta: PONG ``` ## 🐛 Troubleshooting ### Problemas Comuns #### 1. Container não inicia ```bash # Ver logs docker-compose logs web # Possível solução: # Limpar e rebuild docker-compose down docker-compose build --no-cache docker-compose up -d ``` #### 2. Out of Memory ```bash # Ver uso de memória docker stats # Reduzir workers # Edite docker-compose.yml celery: command: celery -A app.tasks.celery_tasks worker --loglevel=info --concurrency=2 # Restart docker-compose restart celery ``` #### 3. Qdrant não conecta ```bash # Verificar status do Qdrant docker-compose ps qdrant # Ver logs docker-compose logs qdrant # Reiniciar docker-compose restart qdrant ``` #### 4. Redis não conecta ```bash # Verificar status do Redis docker-compose ps redis # Ver logs docker-compose logs redis # Reiniciar docker-compose restart redis ``` #### 5. Erro no Model Loading ```bash # Verificar se modelo existe ls -lh backend/models/ # Baixar novamente cd backend wget -O llama-3.2-3b-instruct-q4_0.gguf "https://us.aws.cdn.hf.co/xet-bridge-us/6718a700b21019fade8d68ac/b472da725da9aaf0e050c885680a67f61fceb097eb4277b0cc1e0b94e3559345?user_id=public&xip=4ii5zzvItH8&X-Xet-Cas-Uid=public&response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llama-3.2-3b-instruct-q4_0.gguf%3B+filename%3D%22llama-3.2-3b-instruct-q4_0.gguf%22%3B&Expires=1793546619&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly91cy5hd3MuY2RuLmhmLmNvL3hldC1icmlkZ2UtdXMvNjcxOGE3MDBiMjEwMTlmYWRlOGQ2OGFjL2I0NzJkYTcyNWRhOWFhZjBlMDUwYzg4NTY4MGE2N2Y2MWZjZWIwOTdlYjQyNzdiMGNjMWUwYjk0ZTM1NTkzNDVcXD91c2VyX2lkPXB1YmxpYyZ4aXA9NGlpNXp6dkl0SDgmWC1YZXQtQ2FzLVVpZD1wdWJsaWMmcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj1hdHRhY2htZW50JTNCK2ZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjdsbGFtYS0zLjItM2ItaW5zdHJ1Y3QtcTRfMC5nZ3VmJTNCK2ZpbGVuYW1lJTNEJTIybGxhbWEtMy4yLTNiLWluc3RydWN0LXE0XzAuZ2d1ZiUyMiUzQiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiRXBvY2hUaW1lIjoxNzkzNTQ2NjE5fX19XX0_&Signature=MEUCIBdL2cMsOqav%7EbG9Q2mearSLUBdBtfCA3sOBE5GdbXUnAiEA7xWOea%7ETy0Jf%7EPgRYyx1S9bxvnSFoTBI%7ERadl-Nmd8E_&Key-Pair-Id=01KXEF4KZ1B6FV465MAWR4M21F&Hash-Algorithm=SHA256" # Reiniciar containers docker-compose down docker-compose up -d ``` #### 6. Indexação falha ```bash # Verificar arquivos PDF ls -lh PDF/ # Verificar permissões chmod -R 755 PDF/ # Reindexar docker compose run --rm web python scripts/index_books.py 2>&1 | tee reindex.log ``` ### Comandos de Diagnóstico ```bash # Lista todos os containers docker ps -a # Ver detalhes de um container docker inspect espiritismo-web # Ver redes docker network ls docker network inspect espiritismo_default # Ver volumes docker volume ls docker volume inspect espiritismo_qdrant_data docker volume inspect espiritismo_redis_data ``` ## 🔒 Segurança ### Hardening do Sistema 1. **Usar Variáveis de Ambiente Seguras** ```bash # Sempre use .env local para credenciais cp .env.example .env chmod 600 .env # Apenas dono pode ler ``` 2. **Não Expor Portas Externas** ```yaml # docker-compose.yml web: ports: - "127.0.0.1:8000:8000" # Apenas local ``` 3. **Proteger Qdrant (se necessário)** ```yaml qdrant: environment: - QDRANT_API_KEY=your_secret_key ``` 4. **Atualizar Dependências Regularmente** ```bash # Verificar vulnerabilidades docker-compose exec web pip list --outdated ``` ### Backups ```bash # Backup de schedules cp backend/schedules.json backend/schedules.json.backup # Backup de index tar -czf index_backup.tar.gz backend/index/ # Backup de uploads tar -czf uploads_backup.tar.gz PDF/ ``` ## 📈 Escalabilidade ### Escalar para Múltiplas Instâncias ```yaml # docker-compose.yml web: deploy: replicas: 3 resources: limits: cpus: '2' memory: 4G ``` ### Load Balancing ```bash # Usar Nginx como proxy server { listen 80; server_name seu-dominio.com; location / { proxy_pass http://web:8000; proxy_set_header Host $host; } } ``` ### Cluster do Qdrant ```yaml # Qdrant cluster qdrant: command: > qdrant --host 0.0.0.0 --port 6333 --storage_path /qdrant/storage --disk_enabled ``` ## 📝 Checklist de Deploy ### Pré-deploy Checklist - [ ] Docker e Docker Compose instalados - [ ] Modelo Llama 3.2 3B baixado - [ ] Token do Telegram configurado - [ ] Chat ID do Telegram configurado - [ ] .env criado e configurado - [ ] Repositório clonado - [ ] Código versionado ### Deploy Checklist - [ ] Docker images buildadas - [ ] Todos os containers iniciados - [ ] Container status "Up" - [ ] Logs sem erros críticos - [ ] Web API acessível em http://localhost:8000 - [ ] Qdrant acessível em http://localhost:6333/dashboard - [ ] Indexação dos livros concluída - [ ] Teste de chat realizado - [ ] Teste do bot no Telegram realizado - [ ] Agendamentos criados e testados ### Pós-deploy Checklist - [ ] Monitoramento configurado - [ ] Backups automáticos configurados - [ ] Logs em produção configurados - [ ] Alertas configurados - [ ] Documentação atualizada - [ ] Equipe treinada ## 🎯 Performance Tuning ### Otimizações Recomendadas 1. **Aumentar chunk_size** (em backend/services/pdf_processor.py): ```python self.text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, # De 500 para 1000 chunk_overlap=100, # De 50 para 100 length_function=len, ) ``` 2. **Aumentar top_k** (em frontend/static/js/script.js): ```javascript const result = await fetch(`${API_BASE}/chat`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message, top_k: 5 }), // De 3 para 5 }); ``` 3. **Aumentar workers do Celery** (em docker-compose.yml): ```yaml celery: command: celery -A app.tasks.celery_tasks worker --loglevel=info --concurrency=4 ``` ### Monitoramento de Performance ```bash # Métricas em tempo real docker stats --no-stream # CPU e memória por container docker stats espiritismo-web # Verificar se há gargalos docker-compose logs | grep "slow\|timeout" ``` ## 📞 Suporte ### Recursos - [GitHub Issues](https://git.labexposed.com/lgcosta/espiritismo-rag-system/issues) - [Documentação](README.md) - [BUILD.md](BUILD.md) - [Design Specs](docs/superpowers/specs/2025-11-01-espiritismo-rag-system-design.md) ### Canais de Comunicação - Telegram: @seu_bot - Email: suporte@exemplo.com - Issues: https://git.labexposed.com/lgcosta/espiritismo-rag-system/issues --- **Versão**: 1.0.0 **Última Atualização**: 2026-11-01 **Status**: Production Ready ✅ >>>>>>> 50ae4db41723d2c6ea63799065316f1ae27bfb03