- 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>
101 lines
4.6 KiB
Bash
Executable File
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
|