Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

246 lines
7.9 KiB

#!/bin/bash
###############################################################################
# Script de Instalação do Módulo TCE
# Versão: 1.0
# Data: 03/10/2025
###############################################################################
set -e # Parar em caso de erro
# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Função para log
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Verificar se está rodando como root ou com sudo
if [ "$EUID" -eq 0 ]; then
log_warn "Rodando como root. Certifique-se de que as permissões estão corretas."
fi
###############################################################################
# 1. VERIFICAÇÕES INICIAIS
###############################################################################
log_info "Verificando ambiente..."
# Verificar se o Python está disponível
if ! command -v python3 &> /dev/null; then
log_error "Python3 não encontrado. Instale o Python 3.8 ou superior."
exit 1
fi
PYTHON_VERSION=$(python3 --version | awk '{print $2}')
log_info "Python versão: $PYTHON_VERSION"
# Verificar se o virtualenv está ativado
if [ -z "$VIRTUAL_ENV" ]; then
log_warn "Virtualenv não está ativado. Ativando..."
# Tentar encontrar o virtualenv
if [ -d "/opt/venv" ]; then
source /opt/venv/bin/activate
log_info "Virtualenv ativado: /opt/venv"
elif [ -d "venv" ]; then
source venv/bin/activate
log_info "Virtualenv ativado: venv"
else
log_error "Virtualenv não encontrado. Ative manualmente antes de executar."
exit 1
fi
fi
# Verificar se o Django está instalado
if ! python3 -c "import django" &> /dev/null; then
log_error "Django não encontrado. Instale o Django primeiro."
exit 1
fi
DJANGO_VERSION=$(python3 -c "import django; print(django.get_version())")
log_info "Django versão: $DJANGO_VERSION"
###############################################################################
# 2. INSTALAR DEPENDÊNCIAS
###############################################################################
log_info "Instalando dependências do módulo TCE..."
pip install --upgrade pip
# Instalar pyhanko e dependências
log_info "Instalando pyhanko (assinatura digital)..."
pip install pyhanko==0.31.0 pyhanko-certvalidator==0.29.0
# Instalar dependências complementares
log_info "Instalando dependências complementares..."
pip install cryptography>=43.0.3 requests>=2.31.0 python-dateutil>=2.8.0 tzlocal>=5.0.0
# Verificar instalação
log_info "Verificando instalação das bibliotecas..."
python3 -c "from pyhanko.sign import signers; print('✓ PyHanko instalado com sucesso')" || {
log_error "Falha ao instalar pyhanko"
exit 1
}
python3 -c "from pyhanko_certvalidator import ValidationContext; print('✓ Certvalidator instalado com sucesso')" || {
log_error "Falha ao instalar pyhanko-certvalidator"
exit 1
}
###############################################################################
# 3. EXECUTAR MIGRAÇÕES
###############################################################################
log_info "Executando migrações do banco de dados..."
python3 manage.py migrate tce
log_info "Migrações concluídas com sucesso"
###############################################################################
# 4. CRIAR DIRETÓRIOS DE UPLOAD
###############################################################################
log_info "Criando diretórios para uploads..."
# Detectar MEDIA_ROOT do Django
MEDIA_ROOT=$(python3 -c "from django.conf import settings; print(settings.MEDIA_ROOT)" 2>/dev/null || echo "media")
mkdir -p "$MEDIA_ROOT/tce/arquivos"
mkdir -p "$MEDIA_ROOT/tce/reduzidos"
mkdir -p "$MEDIA_ROOT/tce/ocr"
mkdir -p "$MEDIA_ROOT/tce/assinados"
mkdir -p "$MEDIA_ROOT/tce/p7s"
log_info "Diretórios criados em: $MEDIA_ROOT/tce/"
# Configurar permissões
if [ -d "$MEDIA_ROOT/tce" ]; then
# Tentar detectar o usuário do servidor web
WEB_USER=""
if id "www-data" &>/dev/null; then
WEB_USER="www-data"
elif id "apache" &>/dev/null; then
WEB_USER="apache"
elif id "nginx" &>/dev/null; then
WEB_USER="nginx"
fi
if [ -n "$WEB_USER" ]; then
log_info "Configurando permissões para o usuário: $WEB_USER"
chown -R "$WEB_USER:$WEB_USER" "$MEDIA_ROOT/tce" 2>/dev/null || log_warn "Não foi possível alterar o owner. Execute com sudo se necessário."
else
log_warn "Usuário do servidor web não detectado. Configure as permissões manualmente."
fi
chmod -R 755 "$MEDIA_ROOT/tce"
log_info "Permissões configuradas: 755"
fi
###############################################################################
# 5. COLETAR ARQUIVOS ESTÁTICOS
###############################################################################
log_info "Coletando arquivos estáticos..."
python3 manage.py collectstatic --noinput
log_info "Arquivos estáticos coletados"
###############################################################################
# 6. VERIFICAÇÕES FINAIS
###############################################################################
log_info "Realizando verificações finais..."
# Verificar se o app TCE está instalado
python3 manage.py showmigrations tce | grep -q "\[X\]" && log_info "✓ Migrações TCE aplicadas" || log_error "✗ Migrações TCE não aplicadas"
# Listar URLs do módulo TCE
log_info "URLs do módulo TCE registradas:"
python3 manage.py show_urls 2>/dev/null | grep "tce" || log_warn "Comando show_urls não disponível"
###############################################################################
# 7. REINICIAR SERVIÇOS
###############################################################################
log_info "Preparando para reiniciar serviços..."
# Detectar serviço
SERVICE=""
if systemctl list-units --type=service | grep -q "gunicorn"; then
SERVICE="gunicorn"
elif systemctl list-units --type=service | grep -q "uwsgi"; then
SERVICE="uwsgi"
elif systemctl list-units --type=service | grep -q "apache2"; then
SERVICE="apache2"
elif systemctl list-units --type=service | grep -q "httpd"; then
SERVICE="httpd"
fi
if [ -n "$SERVICE" ]; then
log_info "Serviço detectado: $SERVICE"
read -p "Deseja reiniciar o serviço $SERVICE agora? (s/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[SsYy]$ ]]; then
sudo systemctl restart "$SERVICE"
log_info "Serviço $SERVICE reiniciado"
# Reiniciar nginx se existir
if systemctl list-units --type=service | grep -q "nginx"; then
sudo systemctl restart nginx
log_info "Nginx reiniciado"
fi
else
log_warn "Lembre-se de reiniciar o serviço manualmente:"
log_warn " sudo systemctl restart $SERVICE"
fi
else
log_warn "Serviço web não detectado automaticamente."
log_warn "Reinicie manualmente seu servidor web (Apache/Nginx/Gunicorn/uWSGI)"
fi
###############################################################################
# 8. RESUMO
###############################################################################
echo ""
log_info "=========================================="
log_info "Instalação do Módulo TCE Concluída!"
log_info "=========================================="
echo ""
log_info "Próximos passos:"
echo " 1. Acesse: http://seu-servidor/tce/admin/"
echo " 2. Crie um novo processo TCE"
echo " 3. Faça upload de documentos"
echo " 4. Teste a assinatura digital (aba 4 do wizard)"
echo ""
log_info "Dependências instaladas:"
echo " ✓ pyhanko 0.31.0"
echo " ✓ pyhanko-certvalidator 0.29.0"
echo " ✓ cryptography >= 43.0.3"
echo ""
log_info "Diretórios criados:"
echo " $MEDIA_ROOT/tce/"
echo ""
log_info "Para mais informações, consulte:"
echo " - INSTRUCOES_DEPLOY_TCE.md"
echo " - Logs do servidor web"
echo ""
log_info "=========================================="
exit 0