#!/bin/bash # ================================================================ # entrypoint.sh — JasperReports Server Docker # # Responsável por: # 1. Aguardar o PostgreSQL ficar disponível # 2. Na primeira execução: criar o schema e instalar o JasperServer # 3. Nas execuções seguintes: apenas iniciar o Tomcat # ================================================================ set -eo pipefail JASPER_INSTALL_DIR="/opt/jasperreports-server-cp-8.2.0-bin" INSTALL_MARKER="/var/jasperserver/.installed" # ── Substituir variáveis de ambiente no default_master.properties ────────── prepare_config() { echo "⚙️ Configurando default_master.properties..." # Garante que o diretório buildomatic seja acessível cp /config/default_master.properties "${JASPER_INSTALL_DIR}/buildomatic/default_master.properties" # Substitui as variáveis de ambiente no arquivo de configuração sed -i "s|\${JS_DB_HOST}|${JS_DB_HOST}|g" "${JASPER_INSTALL_DIR}/buildomatic/default_master.properties" sed -i "s|\${JS_DB_PORT}|${JS_DB_PORT:-5432}|g" "${JASPER_INSTALL_DIR}/buildomatic/default_master.properties" sed -i "s|\${JS_DB_USERNAME}|${JS_DB_USERNAME}|g" "${JASPER_INSTALL_DIR}/buildomatic/default_master.properties" sed -i "s|\${JS_DB_PASSWORD}|${JS_DB_PASSWORD}|g" "${JASPER_INSTALL_DIR}/buildomatic/default_master.properties" sed -i "s|\${JS_DB_NAME}|${JS_DB_NAME}|g" "${JASPER_INSTALL_DIR}/buildomatic/default_master.properties" echo "✅ Configuração aplicada." } # ── Aguardar PostgreSQL ──────────────────────────────────────────────────── wait_for_postgres() { echo "⏳ Aguardando PostgreSQL em ${JS_DB_HOST}:${JS_DB_PORT:-5432}..." until pg_isready -h "${JS_DB_HOST}" -p "${JS_DB_PORT:-5432}" -U "${JS_DB_USERNAME}" -q; do echo " PostgreSQL ainda não está pronto. Tentando novamente em 3s..." sleep 3 done echo "✅ PostgreSQL aceitando conexões!" # Aguardar o banco jasperserver estar acessível (necessário para reinícios) echo "⏳ Verificando acesso ao banco ${JS_DB_NAME}..." until PGPASSWORD="${JS_DB_PASSWORD}" psql -h "${JS_DB_HOST}" -p "${JS_DB_PORT:-5432}" \ -U "${JS_DB_USERNAME}" -d "${JS_DB_NAME}" -c "SELECT 1" > /dev/null 2>&1; do echo " Banco ${JS_DB_NAME} ainda não acessível. Tentando em 3s..." sleep 3 done echo "✅ PostgreSQL disponível!" } # ── Instalação inicial ───────────────────────────────────────────────────── install_jasperserver() { echo "🚀 Primeira execução detectada. Iniciando instalação do JasperReports Server..." cd "${JASPER_INSTALL_DIR}/buildomatic" # Executa o instalador CE no modo minimal (sem dados de exemplo) # O "echo y" responde automaticamente ao prompt de recriação do banco echo "y" | ./js-install-ce.sh minimal 2>&1 | tee /var/log/jasper-install.log INSTALL_RC=${PIPESTATUS[1]} if [ $INSTALL_RC -eq 0 ]; then mkdir -p "$(dirname "$INSTALL_MARKER")" touch "$INSTALL_MARKER" echo "✅ Instalação concluída com sucesso!" else echo "❌ Falha na instalação! (exit code: $INSTALL_RC) Verifique /var/log/jasper-install.log" exit 1 fi } # ── Main ──────────────────────────────────────────────────────────────────── # Popula o bind mount de lib com os JARs originais do Tomcat se estiver vazio if [ -z "$(ls -A ${CATALINA_HOME}/lib 2>/dev/null)" ]; then echo "📦 Populando ${CATALINA_HOME}/lib com JARs originais do Tomcat..." cp -r /opt/tomcat-lib-orig/* "${CATALINA_HOME}/lib/" echo "✅ Libs do Tomcat restaurados." fi prepare_config wait_for_postgres if [ ! -f "$INSTALL_MARKER" ]; then install_jasperserver else echo "✅ JasperReports Server já instalado. Pulando instalação." fi echo "🚀 Iniciando Tomcat..." exec catalina.sh run