jasperserver-docker/entrypoint.sh
Rogério Lima 9fea30554f upgrade PostgreSQL 16→18 e melhorias de robustez
- PostgreSQL 18: atualiza imagem e corrige path de dados (/var/lib/postgresql)
- entrypoint: detecta schema ausente (jiresourcefolder) e reinstala automaticamente
- entrypoint: corrige captura de PIPESTATUS com set +e/set -e ao redor do pipeline
- logs: bind mount movido de /var/log para /var/log/jasperserver (não sobrescreve o sistema)
- download.sh: fonte do instalador migrada de SourceForge para Gitea interno
- Makefile: simplificado para build/up/down/clean/push/pull/logs + suporte a registry Gitea
- README: atualiza versão PG, URLs de download e adiciona instrução de publicação no Gitea

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 08:34:10 -03:00

101 lines
4.6 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
set +e
echo "y" | ./js-install-ce.sh minimal 2>&1 | tee /var/log/jasperserver/jasper-install.log
INSTALL_RC=${PIPESTATUS[1]}
set -e
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/jasperserver/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
DB_HAS_SCHEMA=$(PGPASSWORD="${JS_DB_PASSWORD}" psql -h "${JS_DB_HOST}" -p "${JS_DB_PORT:-5432}" \
-U "${JS_DB_USERNAME}" -d "${JS_DB_NAME}" -tAc \
"SELECT 1 FROM information_schema.tables WHERE table_name='jiresourcefolder'" 2>/dev/null)
if [ ! -f "$INSTALL_MARKER" ] || [ "$DB_HAS_SCHEMA" != "1" ]; then
[ "$DB_HAS_SCHEMA" != "1" ] && echo "⚠️ Schema ausente no banco. Reinstalando..."
rm -f "$INSTALL_MARKER"
install_jasperserver
else
echo "✅ JasperReports Server já instalado. Pulando instalação."
fi
echo "🚀 Iniciando Tomcat..."
exec catalina.sh run