jasperserver-docker/entrypoint.sh
2026-02-22 17:47:38 -03:00

93 lines
4.2 KiB
Bash
Executable File

#!/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