From 66d8f69f220548550a849a90387320f24325d002 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:51:24 +0000 Subject: [PATCH 1/5] Initial plan From 9c704994f7c5e5dcdf03cd6a0bab90142170988b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:59:19 +0000 Subject: [PATCH 2/5] Add simplified installation and update scripts for end users Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com> --- .envs/.local/.django.example | 25 +++ .envs/.local/.postgres.example | 9 + .envs/.production/.django.example | 57 +++++ .envs/.production/.postgres.example | 9 + INSTALLATION.md | 313 ++++++++++++++++++++++++++++ Makefile | 10 + README.md | 12 ++ install.sh | 141 +++++++++++++ update.sh | 112 ++++++++++ 9 files changed, 688 insertions(+) create mode 100644 .envs/.local/.django.example create mode 100644 .envs/.local/.postgres.example create mode 100644 .envs/.production/.django.example create mode 100644 .envs/.production/.postgres.example create mode 100644 INSTALLATION.md create mode 100755 install.sh create mode 100755 update.sh diff --git a/.envs/.local/.django.example b/.envs/.local/.django.example new file mode 100644 index 0000000..8427713 --- /dev/null +++ b/.envs/.local/.django.example @@ -0,0 +1,25 @@ +# General +# ------------------------------------------------------------------------------ +USE_DOCKER=yes +IPYTHONDIR=/app/.ipython + +# Redis +# ------------------------------------------------------------------------------ +REDIS_URL=redis://redis:6379/0 + +# Celery +# ------------------------------------------------------------------------------ + +# Flower - Credenciais de acesso ao painel do Celery Flower +# IMPORTANTE: Altere estas credenciais para valores seguros em produção +CELERY_FLOWER_USER=admin +CELERY_FLOWER_PASSWORD=change_this_password_123 + +# Timeout fetch_data +# ------------------------------------------------------------------------------ +FETCH_DATA_TIMEOUT=2 + +# HuggingFace Token (opcional) +# ------------------------------------------------------------------------------ +# Se você usa modelos do HuggingFace, adicione seu token aqui +HF_TOKEN= diff --git a/.envs/.local/.postgres.example b/.envs/.local/.postgres.example new file mode 100644 index 0000000..279fd14 --- /dev/null +++ b/.envs/.local/.postgres.example @@ -0,0 +1,9 @@ +# PostgreSQL +# ------------------------------------------------------------------------------ +POSTGRES_HOST=postgres +POSTGRES_PORT=5432 +POSTGRES_DB=scielo_core + +# IMPORTANTE: Altere o usuário e senha para valores seguros +POSTGRES_USER=markapi_user +POSTGRES_PASSWORD=change_this_secure_password_123 diff --git a/.envs/.production/.django.example b/.envs/.production/.django.example new file mode 100644 index 0000000..af46e71 --- /dev/null +++ b/.envs/.production/.django.example @@ -0,0 +1,57 @@ +# General +# ------------------------------------------------------------------------------ +# DJANGO_READ_DOT_ENV_FILE=True +DJANGO_SETTINGS_MODULE=config.settings.production +DJANGO_SECRET_KEY=CHANGE_THIS_TO_A_LONG_RANDOM_STRING_FOR_SECURITY +DJANGO_ADMIN_URL=CHANGE_THIS_TO_HIDE_ADMIN_URL/ +DJANGO_ALLOWED_HOSTS=.example.com,localhost + +# Security +# ------------------------------------------------------------------------------ +# TIP: better off using DNS, however, redirect is OK too +DJANGO_SECURE_SSL_REDIRECT=False + +# Email +# ------------------------------------------------------------------------------ +MAILGUN_API_KEY= +DJANGO_SERVER_EMAIL= +MAILGUN_DOMAIN= + +# AWS - Configuração para uso com S3 (opcional) +# ------------------------------------------------------------------------------ +DJANGO_AWS_ACCESS_KEY_ID= +DJANGO_AWS_SECRET_ACCESS_KEY= +DJANGO_AWS_STORAGE_BUCKET_NAME= + +# Django Admin - Configuração de usuário admin inicial +# ------------------------------------------------------------------------------ +DJANGO_SUPERUSER_PASSWORD=change_this_admin_password + +# django-allauth +# ------------------------------------------------------------------------------ +DJANGO_ACCOUNT_ALLOW_REGISTRATION=True + +# Gunicorn +# ------------------------------------------------------------------------------ +WEB_CONCURRENCY=4 + +# Redis +# ------------------------------------------------------------------------------ +REDIS_URL=redis://redis:6379/0 + +# Celery +# ------------------------------------------------------------------------------ +CELERY_FLOWER_USER=admin +CELERY_FLOWER_PASSWORD=change_this_secure_password + +# Sentry (opcional - monitoramento de erros) +# ------------------------------------------------------------------------------ +SENTRY_DSN= + +# Timeout fetch_data +# ------------------------------------------------------------------------------ +FETCH_DATA_TIMEOUT=5 + +# HuggingFace Token (opcional) +# ------------------------------------------------------------------------------ +HF_TOKEN= diff --git a/.envs/.production/.postgres.example b/.envs/.production/.postgres.example new file mode 100644 index 0000000..35fff0c --- /dev/null +++ b/.envs/.production/.postgres.example @@ -0,0 +1,9 @@ +# PostgreSQL +# ------------------------------------------------------------------------------ +POSTGRES_HOST=postgres +POSTGRES_PORT=5432 +POSTGRES_DB=markapi_production + +# IMPORTANTE: Use senhas seguras e diferentes em produção +POSTGRES_USER=markapi_prod_user +POSTGRES_PASSWORD=CHANGE_THIS_TO_A_SECURE_PASSWORD diff --git a/INSTALLATION.md b/INSTALLATION.md new file mode 100644 index 0000000..f8d797a --- /dev/null +++ b/INSTALLATION.md @@ -0,0 +1,313 @@ +# Guia de Instalação e Atualização - MarkAPI + +Este guia foi criado para facilitar a instalação e atualização da aplicação web MarkAPI por usuários finais (não desenvolvedores). + +## Pré-requisitos + +Antes de instalar o MarkAPI, você precisa ter instalado no seu computador: + +1. **Docker** - Sistema de containerização + - Download: https://docs.docker.com/get-docker/ + - Para Windows/Mac: Instale o Docker Desktop + - Para Linux: Siga as instruções específicas da sua distribuição + +2. **Docker Compose** - Ferramenta para gerenciar múltiplos containers + - Geralmente já vem incluído no Docker Desktop + - Para Linux: https://docs.docker.com/compose/install/ + +3. **Git** (opcional, mas recomendado para facilitar atualizações) + - Download: https://git-scm.com/downloads + +## Instalação Rápida + +### Passo 1: Obter o código + +Se você tem Git instalado: + +```bash +git clone https://github.com/scieloorg/markapi.git +cd markapi +``` + +Se você não tem Git, baixe o código como arquivo ZIP: +- Vá para https://github.com/scieloorg/markapi +- Clique em "Code" → "Download ZIP" +- Extraia o arquivo ZIP +- Abra o terminal na pasta extraída + +### Passo 2: Configurar ambiente + +Copie os arquivos de exemplo para criar sua configuração: + +```bash +# Para Linux/Mac: +cp .envs/.local/.django.example .envs/.local/.django +cp .envs/.local/.postgres.example .envs/.local/.postgres + +# Para Windows (PowerShell): +Copy-Item .envs/.local/.django.example .envs/.local/.django +Copy-Item .envs/.local/.postgres.example .envs/.local/.postgres +``` + +**IMPORTANTE**: Edite os arquivos `.envs/.local/.django` e `.envs/.local/.postgres` para alterar as senhas padrão por senhas seguras. + +### Passo 3: Executar instalação + +Execute o script de instalação: + +```bash +# Para Linux/Mac: +./install.sh + +# Para Windows (usando Git Bash): +bash install.sh +``` + +O script irá: +1. Verificar se Docker e Docker Compose estão instalados +2. Criar diretórios necessários +3. Construir as imagens Docker +4. Iniciar os containers +5. Executar migrações do banco de dados +6. Configurar o Wagtail +7. Preparar a aplicação para uso + +**Nota**: A primeira instalação pode levar de 10 a 20 minutos dependendo da velocidade da sua internet e do seu computador. + +### Passo 4: Criar um superusuário (administrador) + +Após a instalação, crie um usuário administrador: + +```bash +docker compose -f local.yml run --rm django python manage.py createsuperuser +``` + +Siga as instruções na tela para definir: +- Nome de usuário +- Email +- Senha + +## Acessando a Aplicação + +Após a instalação, você pode acessar: + +- **Aplicação principal**: http://localhost:8009 +- **Painel administrativo**: http://localhost:8009/admin +- **MailHog (servidor de email local)**: http://localhost:8029 +- **Flower (monitoramento Celery)**: http://localhost:5559 + +## Atualização + +Para atualizar o MarkAPI para a versão mais recente: + +```bash +# Para Linux/Mac: +./update.sh + +# Para Windows (usando Git Bash): +bash update.sh +``` + +O script de atualização irá: +1. Oferecer opção de criar backup do banco de dados +2. Parar os containers +3. Atualizar o código (se estiver usando Git) +4. Reconstruir as imagens Docker +5. Iniciar os containers +6. Executar migrações necessárias +7. Atualizar configurações do Wagtail + +## Comandos Úteis + +### Iniciar a aplicação + +```bash +docker compose -f local.yml up -d +``` + +### Parar a aplicação + +```bash +docker compose -f local.yml stop +``` + +### Ver logs da aplicação + +```bash +docker compose -f local.yml logs -f +``` + +Para ver logs de um serviço específico: + +```bash +# Logs do Django +docker compose -f local.yml logs -f django + +# Logs do Celery Worker +docker compose -f local.yml logs -f celeryworker +``` + +### Verificar status dos containers + +```bash +docker compose -f local.yml ps +``` + +### Reiniciar a aplicação + +```bash +docker compose -f local.yml restart +``` + +### Parar e remover containers + +```bash +docker compose -f local.yml down +``` + +### Fazer backup do banco de dados + +```bash +mkdir -p backup +docker exec markapi_local_postgres pg_dumpall -c -U debug > backup/backup_$(date +%Y%m%d_%H%M%S).sql +``` + +**Nota**: Substitua `debug` pelo usuário configurado em `.envs/.local/.postgres` + +### Restaurar backup do banco de dados + +```bash +cat backup/seu_arquivo_backup.sql | docker exec -i markapi_local_postgres psql -U debug +``` + +### Acessar o shell do Django + +```bash +docker compose -f local.yml run --rm django python manage.py shell +``` + +### Acessar o terminal bash do container Django + +```bash +docker compose -f local.yml run --rm django bash +``` + +### Executar testes + +```bash +docker compose -f local.yml run --rm django python manage.py test +``` + +## Solução de Problemas + +### A aplicação não inicia + +1. Verifique se o Docker está rodando: + ```bash + docker ps + ``` + +2. Verifique os logs para identificar erros: + ```bash + docker compose -f local.yml logs + ``` + +3. Tente reconstruir sem cache: + ```bash + docker compose -f local.yml build --no-cache + docker compose -f local.yml up -d + ``` + +### Erro de porta já em uso + +Se você receber um erro dizendo que uma porta já está em uso (por exemplo, 8009, 5432, 6379), você pode: + +1. Parar o serviço que está usando a porta +2. Ou alterar a porta no arquivo `local.yml` + +Para alterar portas, edite o arquivo `local.yml` e modifique as linhas de `ports`: + +```yaml +ports: + - "8009:8000" # Altere 8009 para outra porta disponível +``` + +### Erro de permissão nos diretórios de dados + +Se você receber erros de permissão, execute: + +```bash +# Linux/Mac +sudo chown -R $USER:$USER ../scms_data/markapi + +# Ou crie os diretórios com permissões adequadas +mkdir -p ../scms_data/markapi/data_dev +chmod -R 755 ../scms_data/markapi +``` + +### Container do PostgreSQL não inicia + +1. Verifique se há processos usando a porta 5432: + ```bash + # Linux/Mac + lsof -i :5432 + + # Windows + netstat -ano | findstr :5432 + ``` + +2. Verifique se há permissões adequadas no diretório de dados: + ```bash + ls -la ../scms_data/markapi/data_dev + ``` + +### Limpar dados e recomeçar + +Se você quiser recomeçar do zero: + +```bash +# Parar e remover todos os containers e volumes +docker compose -f local.yml down -v + +# Remover diretório de dados (CUIDADO: isso apagará todos os dados) +rm -rf ../scms_data/markapi/data_dev/* + +# Executar instalação novamente +./install.sh +``` + +## Arquitetura da Aplicação + +O MarkAPI utiliza os seguintes serviços: + +- **Django**: Aplicação web principal (porta 8009) +- **PostgreSQL**: Banco de dados (porta 5439) +- **Redis**: Cache e broker de mensagens (porta 6399) +- **Celery Worker**: Processamento assíncrono de tarefas +- **Celery Beat**: Agendador de tarefas periódicas +- **Flower**: Interface web para monitorar Celery (porta 5559) +- **MailHog**: Servidor SMTP para teste de emails (porta 8029) + +## Recursos Adicionais + +- **Wiki do projeto**: https://github.com/scieloorg/markapi/wiki +- **Guia de uso**: https://github.com/scieloorg/markapi/wiki +- **Conversão XML para PDF**: https://github.com/scieloorg/markapi/wiki/Converter-XML-para-PDF +- **Configuração do modelo**: https://github.com/scieloorg/markapi/wiki/Guia-rápido:-baixar-e-configurar-o-modelo-do-MarkAPI-para-marcação-de-referências-em-PDF + +## Suporte + +Se você encontrar problemas não listados aqui: + +1. Consulte a documentação completa no repositório +2. Verifique as issues abertas no GitHub: https://github.com/scieloorg/markapi/issues +3. Abra uma nova issue descrevendo o problema em detalhes + +## Informações Técnicas + +- **Python**: 3.11 +- **Django**: Versão definida em requirements +- **Wagtail**: CMS utilizado para páginas e conteúdo +- **Base**: cookiecutter-django + +Para desenvolvedores ou usuários avançados, consulte o arquivo `README.md` para mais informações sobre desenvolvimento, testes e configurações avançadas. diff --git a/Makefile b/Makefile index ce98fe5..20ac56c 100755 --- a/Makefile +++ b/Makefile @@ -134,4 +134,14 @@ clean_migrations: ## Remove all migrations clean_celery_logs: @sudo truncate -s 0 $$(docker inspect --format='{{.LogPath}}' scielo_markup_local_celeryworker) + +############################################ +## Instalação/Atualização Simplificada ## +############################################ + +install: ## Run simplified installation script for end users + @bash install.sh + +update: ## Run simplified update script for end users + @bash update.sh diff --git a/README.md b/README.md index 725b37e..d8e034b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,18 @@ License: GPLv3 --- +## Quick Start for End Users + +**For end users** (non-developers) who want to install and use MarkAPI, please see the simplified **[Installation Guide](INSTALLATION.md)**. + +The Installation Guide includes: +- Easy installation with automated script +- Simple update process +- Common commands and troubleshooting +- User-friendly instructions in Portuguese + +--- + ## Development Environment You can use Docker directly or via `make`. To see available commands: diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..47fda4c --- /dev/null +++ b/install.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +############################################# +# MarkAPI - Script de Instalação Simplificado +# Para usuários finais (não desenvolvedores) +############################################# + +set -e + +# Cores para output +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Função para imprimir mensagens +print_message() { + echo -e "${GREEN}[MarkAPI]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[AVISO]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERRO]${NC} $1" +} + +# Banner +echo "============================================" +echo " MarkAPI - Instalação Simplificada" +echo "============================================" +echo "" + +# Verificar se Docker está instalado +print_message "Verificando dependências..." +if ! command -v docker &> /dev/null; then + print_error "Docker não está instalado. Por favor, instale Docker primeiro:" + echo " https://docs.docker.com/get-docker/" + exit 1 +fi + +if ! command -v docker compose &> /dev/null && ! command -v docker-compose &> /dev/null; then + print_error "Docker Compose não está instalado. Por favor, instale Docker Compose primeiro:" + echo " https://docs.docker.com/compose/install/" + exit 1 +fi + +print_message "Docker e Docker Compose encontrados ✓" + +# Verificar se os arquivos de configuração existem +if [ ! -f ".envs/.local/.django" ] || [ ! -f ".envs/.local/.postgres" ]; then + print_warning "Arquivos de configuração não encontrados." + print_message "Criando arquivos de configuração a partir dos exemplos..." + + # Criar diretórios se não existirem + mkdir -p .envs/.local + + # Copiar arquivos de exemplo se existirem + if [ -f ".envs/.local/.django.example" ]; then + cp .envs/.local/.django.example .envs/.local/.django + print_message "Arquivo .django criado ✓" + else + print_error "Arquivo de exemplo .envs/.local/.django.example não encontrado!" + exit 1 + fi + + if [ -f ".envs/.local/.postgres.example" ]; then + cp .envs/.local/.postgres.example .envs/.local/.postgres + print_message "Arquivo .postgres criado ✓" + else + print_error "Arquivo de exemplo .envs/.local/.postgres.example não encontrado!" + exit 1 + fi + + print_message "Arquivos de configuração criados." + print_warning "IMPORTANTE: Revise e ajuste os arquivos em .envs/.local/ conforme necessário." + print_warning "Especialmente altere as senhas padrão por senhas seguras!" + echo "" + read -p "Pressione ENTER para continuar após revisar os arquivos de configuração..." +fi + +# Criar diretório de dados se não existir +print_message "Configurando diretórios de dados..." +mkdir -p ../scms_data/markapi/data_dev +mkdir -p ../scms_data/markapi/data_dev_backup + +# Construir as imagens Docker +print_message "Construindo as imagens Docker (isso pode levar alguns minutos)..." +docker compose -f local.yml build + +# Iniciar os containers +print_message "Iniciando os containers..." +docker compose -f local.yml up -d + +# Aguardar o banco de dados estar pronto +print_message "Aguardando banco de dados estar pronto..." +sleep 10 + +# Executar migrações +print_message "Executando migrações do banco de dados..." +docker compose -f local.yml run --rm django python manage.py migrate + +# Sincronizar campos Wagtail +print_message "Sincronizando campos de tradução do Wagtail..." +docker compose -f local.yml run --rm django python manage.py update_translation_fields || true +docker compose -f local.yml run --rm django python manage.py sync_page_translation_fields || true + +# Compilar mensagens de tradução +print_message "Compilando mensagens de tradução..." +docker compose -f local.yml run --rm django python manage.py compilemessages || true + +# Coletar arquivos estáticos +print_message "Coletando arquivos estáticos..." +docker compose -f local.yml run --rm django python manage.py collectstatic --noinput || true + +# Verificar status +print_message "Verificando status dos containers..." +docker compose -f local.yml ps + +echo "" +echo "============================================" +print_message "Instalação concluída com sucesso!" +echo "============================================" +echo "" +echo "A aplicação está disponível em:" +echo " - Aplicação principal: http://localhost:8009" +echo " - MailHog (email): http://localhost:8029" +echo " - Flower (Celery): http://localhost:5559" +echo "" +echo "Para criar um superusuário (administrador), execute:" +echo " docker compose -f local.yml run --rm django python manage.py createsuperuser" +echo "" +echo "Para ver os logs da aplicação, execute:" +echo " docker compose -f local.yml logs -f" +echo "" +echo "Para parar a aplicação, execute:" +echo " docker compose -f local.yml stop" +echo "" +echo "Para mais comandos úteis, veja o arquivo INSTALLATION.md" +echo "============================================" diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..bd87789 --- /dev/null +++ b/update.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +############################################# +# MarkAPI - Script de Atualização Simplificado +# Para usuários finais (não desenvolvedores) +############################################# + +set -e + +# Cores para output +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Função para imprimir mensagens +print_message() { + echo -e "${GREEN}[MarkAPI]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[AVISO]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERRO]${NC} $1" +} + +# Banner +echo "============================================" +echo " MarkAPI - Atualização Simplificada" +echo "============================================" +echo "" + +# Verificar se Docker está instalado +if ! command -v docker &> /dev/null; then + print_error "Docker não está instalado." + exit 1 +fi + +if ! command -v docker compose &> /dev/null && ! command -v docker-compose &> /dev/null; then + print_error "Docker Compose não está instalado." + exit 1 +fi + +# Backup do banco de dados (opcional) +read -p "Deseja fazer backup do banco de dados antes de atualizar? (s/n): " -n 1 -r +echo +if [[ $REPLY =~ ^[Ss]$ ]]; then + print_message "Criando backup do banco de dados..." + mkdir -p backup + docker exec markapi_local_postgres pg_dumpall -c -U debug > "backup/backup_$(date +%Y%m%d_%H%M%S).sql" + print_message "Backup criado em: backup/backup_$(date +%Y%m%d_%H%M%S).sql" +fi + +# Parar os containers +print_message "Parando containers..." +docker compose -f local.yml stop + +# Atualizar código (se usando git) +if [ -d ".git" ]; then + print_message "Atualizando código fonte..." + git pull origin main || print_warning "Não foi possível atualizar o código automaticamente. Atualize manualmente." +fi + +# Reconstruir as imagens Docker +print_message "Reconstruindo as imagens Docker (isso pode levar alguns minutos)..." +docker compose -f local.yml build + +# Iniciar os containers +print_message "Iniciando os containers..." +docker compose -f local.yml up -d + +# Aguardar o banco de dados estar pronto +print_message "Aguardando banco de dados estar pronto..." +sleep 10 + +# Executar migrações +print_message "Executando migrações do banco de dados..." +docker compose -f local.yml run --rm django python manage.py migrate + +# Sincronizar campos Wagtail +print_message "Sincronizando campos de tradução do Wagtail..." +docker compose -f local.yml run --rm django python manage.py update_translation_fields || true +docker compose -f local.yml run --rm django python manage.py sync_page_translation_fields || true + +# Compilar mensagens de tradução +print_message "Compilando mensagens de tradução..." +docker compose -f local.yml run --rm django python manage.py compilemessages || true + +# Coletar arquivos estáticos +print_message "Coletando arquivos estáticos..." +docker compose -f local.yml run --rm django python manage.py collectstatic --noinput || true + +# Verificar status +print_message "Verificando status dos containers..." +docker compose -f local.yml ps + +echo "" +echo "============================================" +print_message "Atualização concluída com sucesso!" +echo "============================================" +echo "" +echo "A aplicação está disponível em:" +echo " - Aplicação principal: http://localhost:8009" +echo " - MailHog (email): http://localhost:8029" +echo " - Flower (Celery): http://localhost:5559" +echo "" +echo "Para ver os logs da aplicação, execute:" +echo " docker compose -f local.yml logs -f" +echo "" +echo "============================================" From 7afbab02376cc7a581908a3033f8d8d0d0d23716 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 18:01:33 +0000 Subject: [PATCH 3/5] Add quick start guide and improve documentation Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com> --- INSTALLATION.md | 6 +++++ QUICK_START.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 9 ++++--- 3 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 QUICK_START.md diff --git a/INSTALLATION.md b/INSTALLATION.md index f8d797a..dba1ec6 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -61,6 +61,9 @@ Execute o script de instalação: # Para Windows (usando Git Bash): bash install.sh + +# Ou simplesmente use o Makefile (funciona em todos os sistemas): +make install ``` O script irá: @@ -106,6 +109,9 @@ Para atualizar o MarkAPI para a versão mais recente: # Para Windows (usando Git Bash): bash update.sh + +# Ou simplesmente use o Makefile (funciona em todos os sistemas): +make update ``` O script de atualização irá: diff --git a/QUICK_START.md b/QUICK_START.md new file mode 100644 index 0000000..e93a4fc --- /dev/null +++ b/QUICK_START.md @@ -0,0 +1,70 @@ +# MarkAPI - Guia Rápido + +## Instalação (Primeira Vez) + +```bash +# 1. Clone ou baixe o repositório +git clone https://github.com/scieloorg/markapi.git +cd markapi + +# 2. Configure os arquivos de ambiente +cp .envs/.local/.django.example .envs/.local/.django +cp .envs/.local/.postgres.example .envs/.local/.postgres + +# 3. Execute a instalação +./install.sh +# ou +make install + +# 4. Crie um superusuário +docker compose -f local.yml run --rm django python manage.py createsuperuser +``` + +## Atualização + +```bash +cd markapi +./update.sh +# ou +make update +``` + +## Comandos Essenciais + +### Iniciar +```bash +docker compose -f local.yml up -d +``` + +### Parar +```bash +docker compose -f local.yml stop +``` + +### Ver Logs +```bash +docker compose -f local.yml logs -f +``` + +### Status +```bash +docker compose -f local.yml ps +``` + +## Acessos + +- **Aplicação**: http://localhost:8009 +- **Admin**: http://localhost:8009/admin +- **Email**: http://localhost:8029 +- **Celery**: http://localhost:5559 + +## Backup + +```bash +mkdir -p backup +docker exec markapi_local_postgres pg_dumpall -c -U debug > backup/backup_$(date +%Y%m%d_%H%M%S).sql +``` + +## Problemas? + +Consulte o [Guia de Instalação Completo](INSTALLATION.md) para mais detalhes e solução de problemas. diff --git a/README.md b/README.md index d8e034b..ed4aa81 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,14 @@ License: GPLv3 ## Quick Start for End Users -**For end users** (non-developers) who want to install and use MarkAPI, please see the simplified **[Installation Guide](INSTALLATION.md)**. +**For end users** (non-developers) who want to install and use MarkAPI: + +- **[Quick Start Guide](QUICK_START.md)** - Fast installation with essential commands +- **[Complete Installation Guide](INSTALLATION.md)** - Detailed instructions with troubleshooting The Installation Guide includes: -- Easy installation with automated script -- Simple update process +- Easy installation with automated script (`install.sh` or `make install`) +- Simple update process (`update.sh` or `make update`) - Common commands and troubleshooting - User-friendly instructions in Portuguese From d7a8be20909bd1d205a2d21356545eda88c7cdbf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 18:05:09 +0000 Subject: [PATCH 4/5] Add production installation script and enhance documentation Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com> --- INSTALLATION.md | 24 ++++++ install-production.sh | 186 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100755 install-production.sh diff --git a/INSTALLATION.md b/INSTALLATION.md index dba1ec6..a8827e7 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -309,6 +309,30 @@ Se você encontrar problemas não listados aqui: 2. Verifique as issues abertas no GitHub: https://github.com/scieloorg/markapi/issues 3. Abra uma nova issue descrevendo o problema em detalhes +## Instalação em Produção + +**AVISO**: A instalação em produção requer considerações adicionais de segurança e configuração. + +### Opções de Deployment + +1. **Docker Compose (Produção)**: Use `install-production.sh` (se disponível production.yml) +2. **Kubernetes**: Veja configurações na pasta `kubernetes/` para deployment em cluster + +### Considerações importantes para produção: + +- **Segurança**: Altere TODAS as senhas e chaves secretas +- **HTTPS**: Configure SSL/TLS (recomendado: Let's Encrypt) +- **Backup**: Configure backups automáticos do banco de dados +- **Monitoramento**: Configure Sentry ou outra ferramenta de monitoramento +- **Firewall**: Configure regras apropriadas de firewall +- **Domínio**: Configure DNS e ALLOWED_HOSTS corretamente +- **Email**: Configure um servidor SMTP real (não use MailHog) +- **Recursos**: Dimensione adequadamente CPU, memória e disco + +Para instruções detalhadas de produção, consulte: +- [Docker deployment guide](http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-docker.html) +- Configurações de Kubernetes na pasta `kubernetes/` + ## Informações Técnicas - **Python**: 3.11 diff --git a/install-production.sh b/install-production.sh new file mode 100755 index 0000000..e6039e1 --- /dev/null +++ b/install-production.sh @@ -0,0 +1,186 @@ +#!/bin/bash + +############################################# +# MarkAPI - Script de Instalação para Produção +# Para usuários finais (não desenvolvedores) +############################################# + +set -e + +# Cores para output +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Função para imprimir mensagens +print_message() { + echo -e "${GREEN}[MarkAPI]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[AVISO]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERRO]${NC} $1" +} + +# Banner +echo "============================================" +echo " MarkAPI - Instalação para PRODUÇÃO" +echo "============================================" +echo "" +print_warning "ATENÇÃO: Este script é para instalação em ambiente de PRODUÇÃO!" +print_warning "Certifique-se de que está executando em um servidor apropriado." +echo "" +read -p "Deseja continuar? (s/n): " -n 1 -r +echo +if [[ ! $REPLY =~ ^[Ss]$ ]]; then + echo "Instalação cancelada." + exit 0 +fi + +# Verificar se Docker está instalado +print_message "Verificando dependências..." +if ! command -v docker &> /dev/null; then + print_error "Docker não está instalado. Por favor, instale Docker primeiro:" + echo " https://docs.docker.com/get-docker/" + exit 1 +fi + +if ! command -v docker compose &> /dev/null && ! command -v docker-compose &> /dev/null; then + print_error "Docker Compose não está instalado. Por favor, instale Docker Compose primeiro:" + echo " https://docs.docker.com/compose/install/" + exit 1 +fi + +print_message "Docker e Docker Compose encontrados ✓" + +# Verificar se production.yml existe +if [ ! -f "production.yml" ]; then + print_error "Arquivo production.yml não encontrado!" + print_warning "Este repositório não possui um arquivo production.yml configurado." + print_warning "Você precisará criar um arquivo production.yml baseado no local.yml" + print_warning "ou usar Kubernetes para deploy em produção (veja pasta kubernetes/)." + exit 1 +fi + +# Verificar se os arquivos de configuração existem +if [ ! -f ".envs/.production/.django" ] || [ ! -f ".envs/.production/.postgres" ]; then + print_warning "Arquivos de configuração não encontrados." + print_message "Criando arquivos de configuração a partir dos exemplos..." + + # Criar diretórios se não existirem + mkdir -p .envs/.production + + # Copiar arquivos de exemplo se existirem + if [ -f ".envs/.production/.django.example" ]; then + cp .envs/.production/.django.example .envs/.production/.django + print_message "Arquivo .django criado ✓" + else + print_error "Arquivo de exemplo .envs/.production/.django.example não encontrado!" + exit 1 + fi + + if [ -f ".envs/.production/.postgres.example" ]; then + cp .envs/.production/.postgres.example .envs/.production/.postgres + print_message "Arquivo .postgres criado ✓" + else + print_error "Arquivo de exemplo .envs/.production/.postgres.example não encontrado!" + exit 1 + fi + + print_message "Arquivos de configuração criados." + echo "" + print_warning "==========================================" + print_warning "IMPORTANTE - CONFIGURAÇÃO DE SEGURANÇA" + print_warning "==========================================" + print_warning "Você DEVE editar os seguintes arquivos ANTES de continuar:" + print_warning " - .envs/.production/.django" + print_warning " - .envs/.production/.postgres" + echo "" + print_warning "Especialmente, altere:" + print_warning " 1. DJANGO_SECRET_KEY - para uma string longa e aleatória" + print_warning " 2. POSTGRES_PASSWORD - para uma senha forte" + print_warning " 3. DJANGO_ADMIN_URL - para um URL secreto" + print_warning " 4. CELERY_FLOWER_PASSWORD - para uma senha forte" + print_warning " 5. DJANGO_ALLOWED_HOSTS - para o domínio do seu servidor" + print_warning "==========================================" + echo "" + read -p "Pressione ENTER SOMENTE após revisar e editar os arquivos de configuração..." +fi + +# Verificar configurações críticas +print_message "Verificando configurações de segurança..." +if grep -q "CHANGE_THIS" .envs/.production/.django || grep -q "CHANGE_THIS" .envs/.production/.postgres; then + print_error "ERRO: Ainda há valores padrão nos arquivos de configuração!" + print_error "Você DEVE alterar todas as senhas e configurações antes de continuar." + exit 1 +fi + +print_message "Configurações básicas verificadas ✓" + +# Criar diretório de dados se não existir +print_message "Configurando diretórios de dados..." +mkdir -p ../scms_data/markapi/data_production +mkdir -p ../scms_data/markapi/data_production_backup + +# Construir as imagens Docker +print_message "Construindo as imagens Docker (isso pode levar alguns minutos)..." +docker compose -f production.yml build + +# Iniciar os containers +print_message "Iniciando os containers..." +docker compose -f production.yml up -d + +# Aguardar o banco de dados estar pronto +print_message "Aguardando banco de dados estar pronto..." +sleep 15 + +# Executar migrações +print_message "Executando migrações do banco de dados..." +docker compose -f production.yml run --rm django python manage.py migrate + +# Sincronizar campos Wagtail +print_message "Sincronizando campos de tradução do Wagtail..." +docker compose -f production.yml run --rm django python manage.py update_translation_fields || true +docker compose -f production.yml run --rm django python manage.py sync_page_translation_fields || true + +# Compilar mensagens de tradução +print_message "Compilando mensagens de tradução..." +docker compose -f production.yml run --rm django python manage.py compilemessages || true + +# Coletar arquivos estáticos +print_message "Coletando arquivos estáticos..." +docker compose -f production.yml run --rm django python manage.py collectstatic --noinput + +# Verificar status +print_message "Verificando status dos containers..." +docker compose -f production.yml ps + +echo "" +echo "============================================" +print_message "Instalação concluída com sucesso!" +echo "============================================" +echo "" +print_warning "PRÓXIMOS PASSOS IMPORTANTES:" +echo "" +echo "1. Crie um superusuário (administrador):" +echo " docker compose -f production.yml run --rm django python manage.py createsuperuser" +echo "" +echo "2. Configure seu servidor web reverso (Nginx/Apache) se necessário" +echo "" +echo "3. Configure SSL/TLS para HTTPS" +echo "" +echo "4. Configure backups regulares do banco de dados" +echo "" +echo "5. Configure monitoramento (Sentry, se disponível)" +echo "" +echo "Para ver os logs da aplicação, execute:" +echo " docker compose -f production.yml logs -f" +echo "" +echo "Para parar a aplicação, execute:" +echo " docker compose -f production.yml stop" +echo "" +echo "============================================" From d9ea0899a0d8e328429f69a9edadd298cdf78e60 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 18:07:20 +0000 Subject: [PATCH 5/5] Add Portuguese README and finalize installation documentation Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com> --- LEIA-ME.md | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 +- 2 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 LEIA-ME.md diff --git a/LEIA-ME.md b/LEIA-ME.md new file mode 100644 index 0000000..c139db2 --- /dev/null +++ b/LEIA-ME.md @@ -0,0 +1,197 @@ +# MarkAPI - Guia de Instalação em Português + +Este é um guia simplificado em português para instalação e uso do MarkAPI. + +## 📋 Índice + +1. [Instalação Rápida](#instalação-rápida) +2. [Instalação Detalhada](INSTALLATION.md) +3. [Guia Rápido de Comandos](QUICK_START.md) +4. [Atualização](#atualização) +5. [Comandos Úteis](#comandos-úteis) + +## 🚀 Instalação Rápida + +### Pré-requisitos + +- Docker e Docker Compose instalados +- Git (opcional, mas recomendado) + +### Passos + +1. **Clone o repositório:** + ```bash + git clone https://github.com/scieloorg/markapi.git + cd markapi + ``` + +2. **Configure as variáveis de ambiente:** + ```bash + cp .envs/.local/.django.example .envs/.local/.django + cp .envs/.local/.postgres.example .envs/.local/.postgres + ``` + + **IMPORTANTE**: Edite os arquivos `.envs/.local/.django` e `.envs/.local/.postgres` para alterar as senhas! + +3. **Execute a instalação:** + ```bash + ./install.sh + # ou + make install + ``` + +4. **Crie um superusuário:** + ```bash + docker compose -f local.yml run --rm django python manage.py createsuperuser + ``` + +5. **Acesse a aplicação:** + - Aplicação: http://localhost:8009 + - Admin: http://localhost:8009/admin + +## 🔄 Atualização + +Para atualizar para a versão mais recente: + +```bash +./update.sh +# ou +make update +``` + +O script irá: +- Criar backup do banco de dados (opcional) +- Atualizar o código +- Reconstruir as imagens +- Executar migrações + +## 📚 Comandos Úteis + +### Gerenciamento Básico + +```bash +# Iniciar +docker compose -f local.yml up -d + +# Parar +docker compose -f local.yml stop + +# Reiniciar +docker compose -f local.yml restart + +# Ver logs +docker compose -f local.yml logs -f + +# Status +docker compose -f local.yml ps +``` + +### Backup e Restauração + +```bash +# Fazer backup +mkdir -p backup +docker exec markapi_local_postgres pg_dumpall -c -U debug > backup/backup_$(date +%Y%m%d_%H%M%S).sql + +# Restaurar backup +cat backup/seu_arquivo.sql | docker exec -i markapi_local_postgres psql -U debug +``` + +### Comandos Django + +```bash +# Shell Python +docker compose -f local.yml run --rm django python manage.py shell + +# Terminal bash +docker compose -f local.yml run --rm django bash + +# Executar testes +docker compose -f local.yml run --rm django python manage.py test + +# Criar migrações +docker compose -f local.yml run --rm django python manage.py makemigrations + +# Aplicar migrações +docker compose -f local.yml run --rm django python manage.py migrate +``` + +## 🛠️ Solução de Problemas + +### Porta já em uso + +Se receber erro de porta em uso, você pode: + +1. Parar o serviço que está usando a porta +2. Alterar a porta no arquivo `local.yml` + +### Erro de permissão + +```bash +# Linux/Mac +sudo chown -R $USER:$USER ../scms_data/markapi +``` + +### Container não inicia + +```bash +# Ver logs detalhados +docker compose -f local.yml logs + +# Reconstruir sem cache +docker compose -f local.yml build --no-cache +docker compose -f local.yml up -d +``` + +### Resetar tudo + +```bash +# CUIDADO: Isso apagará todos os dados! +docker compose -f local.yml down -v +rm -rf ../scms_data/markapi/data_dev/* +./install.sh +``` + +## 📖 Documentação Completa + +- **[Guia Rápido](QUICK_START.md)** - Comandos essenciais +- **[Instalação Completa](INSTALLATION.md)** - Guia detalhado com troubleshooting +- **[README Principal](README.md)** - Documentação técnica completa + +## 🌐 Recursos + +- Wiki: https://github.com/scieloorg/markapi/wiki +- Issues: https://github.com/scieloorg/markapi/issues +- Guia de conversão XML para PDF: https://github.com/scieloorg/markapi/wiki/Converter-XML-para-PDF + +## 🏭 Produção + +Para instalação em ambiente de produção, veja: + +- [Seção de Produção no INSTALLATION.md](INSTALLATION.md#instalação-em-produção) +- Script `install-production.sh` (requer production.yml) +- Configurações Kubernetes na pasta `kubernetes/` + +## 💡 Dicas + +1. **Primeira instalação**: Pode levar 10-20 minutos +2. **Senhas**: Sempre altere as senhas padrão! +3. **Backups**: Configure backups regulares em produção +4. **Logs**: Use `docker compose logs -f` para acompanhar problemas +5. **Recursos**: Monitore uso de CPU/memória com `docker stats` + +## 🤝 Contribuindo + +Se encontrou um problema ou tem uma sugestão: + +1. Verifique se já existe uma issue +2. Crie uma nova issue com detalhes +3. Contribua com melhorias via Pull Request + +## 📝 Licença + +GPLv3 - Veja arquivo LICENSE para detalhes. + +--- + +**Nota**: Este documento é complementar à documentação em inglês no README.md principal. diff --git a/README.md b/README.md index ed4aa81..a2ee7a7 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ License: GPLv3 **For end users** (non-developers) who want to install and use MarkAPI: +- **[🇧🇷 LEIA-ME em Português](LEIA-ME.md)** - Guia completo em português - **[Quick Start Guide](QUICK_START.md)** - Fast installation with essential commands - **[Complete Installation Guide](INSTALLATION.md)** - Detailed instructions with troubleshooting @@ -23,7 +24,7 @@ The Installation Guide includes: - Easy installation with automated script (`install.sh` or `make install`) - Simple update process (`update.sh` or `make update`) - Common commands and troubleshooting -- User-friendly instructions in Portuguese +- User-friendly instructions ---