Jasper Server 8.2 Docker Image

This commit is contained in:
Rogério Lima 2026-02-22 17:47:38 -03:00
commit 8f172a65a6
10 changed files with 524 additions and 0 deletions

29
.dockerignore Normal file
View File

@ -0,0 +1,29 @@
# Ignorar no contexto do Docker build
# Arquivos grandes que não devem ir para o contexto do Docker
# (exceto o ZIP do instalador que está em downloads/)
*.log
*.tmp
# Arquivos de desenvolvimento
.git
.gitignore
*.md
# Ambientes Python (caso exista)
__pycache__/
*.py[cod]
.env.*
!.env
# IDE
.vscode/
.idea/
# Sistema
.DS_Store
Thumbs.db
# Dados persistidos (bind mounts)
deploy/
Makefile

18
.env.sample Normal file
View File

@ -0,0 +1,18 @@
# =============================================
# JasperReports Server - Variáveis de Ambiente
# =============================================
# --- PostgreSQL ---
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=
# --- Conexão do JasperServer com o banco ---
JS_DB_HOST=
JS_DB_PORT=
JS_DB_USERNAME=
JS_DB_PASSWORD=
JS_DB_NAME=
# --- JasperReports Server ---
JS_ADMIN_PASSWORD=

28
.gitignore vendored Normal file
View File

@ -0,0 +1,28 @@
# ================================================================
# .gitignore — JasperReports Server Docker
# ================================================================
# Dados persistidos (bind mounts)
deploy/
# Instalador do JasperReports (muito grande para o Git)
downloads/*.zip
# Variáveis de ambiente (contém senhas)
.env
# Logs
*.log
wget-log
# IDE
.vscode/
.idea/
*.swp
*~
# Sistema
.DS_Store
Thumbs.db
GEMINI.md

65
Dockerfile Normal file
View File

@ -0,0 +1,65 @@
# ================================================================
# Dockerfile — JasperReports Server 8.2.0 Community Edition
#
# Base: tomcat:9.0-jdk11-temurin (contém Tomcat 9 + JDK 11)
#
# Referências:
# - GEMINI.md (guia de instalação standalone)
# - https://sourceforge.net/projects/jr-community-installers/
# ================================================================
FROM tomcat:9.0-jdk11-temurin
LABEL maintainer="jasperserver-docker" \
version="8.2.0" \
description="JasperReports Server 8.2.0 CE no Tomcat 9"
# ── Variáveis de ambiente ────────────────────────────────────────────────────
ENV JASPER_VERSION=8.2.0 \
JASPER_INSTALL_DIR=/opt/jasperreports-server-cp-8.2.0-bin \
JAVA_OPTS="-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom" \
CATALINA_OPTS="-Xms1024M -Xmx2048M -server -XX:+UseParallelGC"
# ── Instalar dependências ────────────────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
unzip \
wget \
postgresql-client \
dos2unix \
&& rm -rf /var/lib/apt/lists/*
# ── Remover webapps padrão do Tomcat ────────────────────────────────────────
RUN rm -rf ${CATALINA_HOME}/webapps/*
# ── Copiar e extrair o instalador do JasperReports ──────────────────────────
# O arquivo deve existir em ./downloads/ antes de executar o build
COPY downloads/TIB_js-jrs-cp_8.2.0_bin.zip /tmp/
RUN echo "📦 Extraindo JasperReports Server ${JASPER_VERSION}..." \
&& unzip -q /tmp/TIB_js-jrs-cp_8.2.0_bin.zip -d /opt/ \
&& rm /tmp/TIB_js-jrs-cp_8.2.0_bin.zip \
&& echo "✅ Extração concluída."
# ── Ajustar permissões dos scripts (conforme GEMINI.md) ─────────────────────
RUN chmod -R u+rwx ${JASPER_INSTALL_DIR}/ \
&& find ${JASPER_INSTALL_DIR}/buildomatic -name "*.sh" -exec chmod +x {} \;
# ── Copiar arquivo de configuração base ─────────────────────────────────────
# (o entrypoint.sh aplica as variáveis de ambiente em tempo de execução)
COPY config/default_master.properties /config/default_master.properties
# ── Backup dos libs originais do Tomcat (necessário para bind mounts) ────
RUN cp -r ${CATALINA_HOME}/lib /opt/tomcat-lib-orig
# ── Criar diretório para o marcador de instalação ───────────────────────────
RUN mkdir -p /var/jasperserver /var/log
# ── Copiar e preparar entrypoint ────────────────────────────────────────────
COPY entrypoint.sh /entrypoint.sh
RUN dos2unix /entrypoint.sh && chmod +x /entrypoint.sh
# ── Porta do Tomcat ─────────────────────────────────────────────────────────
EXPOSE 8080
# ── Ponto de entrada ────────────────────────────────────────────────────────
ENTRYPOINT ["/entrypoint.sh"]

38
Makefile Normal file
View File

@ -0,0 +1,38 @@
# ================================================================
# Makefile — JasperReports Server Docker
# ================================================================
.PHONY: build up down restart logs clean reinstall
## Constrói a imagem Docker
build:
docker compose build
## Sobe os containers em background
up:
docker compose up -d
## Para e remove os containers
down:
docker compose down
## Reinicia os containers
restart:
docker compose restart
## Exibe os logs do JasperServer em tempo real
logs:
docker compose logs -f jasperserver
## Com grandes poderes vem grandes responsabilidades!
## Para, remove containers e volumes (reset completo)
clean:
docker compose down -v
## Limpa tudo e reinstala do zero
reinstall:
docker compose down -v
sudo rm -rf deploy
docker compose build
docker compose up -d

115
README.md Normal file
View File

@ -0,0 +1,115 @@
# JasperReports Server - Docker
Ambiente Dockerizado do **JasperReports Server 8.2.0 Community Edition** usando:
- **Tomcat 9** (imagem base `tomcat:9.0-jdk11-temurin`)
- **PostgreSQL 14** (container separado)
- **Docker Compose** para orquestração
---
## 📂 Estrutura do Projeto
```
jasperserver/
├── Dockerfile
├── docker-compose.yml
├── .env ← variáveis de ambiente
├── entrypoint.sh ← inicialização automática
├── config/
│ └── default_master.properties ← configuração do instalador
├── downloads/
│ ├── download.sh ← script de download do instalador
│ └── TIB_js-jrs-cp_8.2.0_bin.zip ← (você deve baixar este arquivo)
└── README.md
```
---
## 🚀 Passo a Passo
### 1. Baixar o instalador do JasperReports
```bash
chmod +x downloads/download.sh
bash downloads/download.sh
```
> Se o download automático falhar, baixe manualmente de:
> https://sourceforge.net/projects/jr-community-installers/files/Server/
> e coloque o arquivo `TIB_js-jrs-cp_8.2.0_bin.zip` na pasta `downloads/`.
### 2. Configurar variáveis de ambiente
Edite o arquivo `.env` se necessário (senhas, portas, etc.):
```bash
nano .env
```
### 3. Fazer o build da imagem
```bash
docker compose build
```
> ⚠️ O build copia o ZIP (~700MB) e extrai dentro da imagem. Pode levar alguns minutos.
### 4. Subir os containers
```bash
docker compose up -d
```
### 5. Acompanhar os logs
```bash
docker compose logs -f jasperserver
```
A **primeira inicialização** instala o JasperReports Server no banco de dados PostgreSQL — isso pode levar **3 a 5 minutos**.
### 6. Acessar o JasperReports Server
Após a inicialização:
- **URL:** http://localhost:8080/jasperserver
- **Usuário:** `jasperadmin`
- **Senha:** `jasperadmin`
---
## 🛑 Parar os Containers
```bash
docker compose down
```
Para remover também os volumes (banco de dados):
```bash
docker compose down -v
```
---
## ⚙️ Configurações Disponíveis no `.env`
| Variável | Padrão | Descrição |
|---|---|---|
| `POSTGRES_USER` | `jasper` | Usuário do PostgreSQL |
| `POSTGRES_PASSWORD` | `12345678@a` | Senha do PostgreSQL |
| `POSTGRES_DB` | `jasperserver` | Nome do banco de dados |
| `JS_DB_HOST` | `postgres` | Host do banco (nome do serviço Docker) |
| `JS_DB_PORT` | `5432` | Porta do PostgreSQL |
| `JS_DB_USERNAME` | `jasper` | Usuário para conexão do JasperServer |
| `JS_DB_PASSWORD` | `12345678@a` | Senha para conexão do JasperServer |
| `JS_DB_NAME` | `jasperserver` | Nome do banco do JasperServer |
---
## 📋 Referências
- [GEMINI.md](./GEMINI.md) — Guia de instalação standalone (base deste projeto)
- [JasperReports Server no SourceForge](https://sourceforge.net/projects/jr-community-installers/)
- [Imagem Docker Tomcat 9](https://hub.docker.com/_/tomcat)
- [Imagem Docker PostgreSQL 14](https://hub.docker.com/_/postgres)

View File

@ -0,0 +1,25 @@
# ================================================================
# default_master.properties - JasperReports Server 8.2.0
# Baseado no guia de instalação do GEMINI.md
# ================================================================
# Tomcat (imagem base Docker)
CATALINA_HOME=/usr/local/tomcat
CATALINA_BASE=/usr/local/tomcat
# Tipo de banco de dados
dbType=postgresql
# Configurações de conexão (serão substituídas por variáveis de ambiente via entrypoint)
dbHost=${JS_DB_HOST}
dbPort=${JS_DB_PORT}
dbUsername=${JS_DB_USERNAME}
dbPassword=${JS_DB_PASSWORD}
js.dbName=${JS_DB_NAME}
# Porta do appserver (padrão Tomcat)
appServerPort=8080
appServerType=tomcat
# Desabilitar instalação de amostras (opcional, comente para incluir)
# installSampleData=false

70
docker-compose.yml Normal file
View File

@ -0,0 +1,70 @@
# ================================================================
# docker-compose.yml — JasperReports Server 8.2.0
#
# Serviços:
# - postgres: PostgreSQL 14 (persistência via volume)
# - jasperserver: JasperReports Server no Tomcat 9
#
# Uso:
# docker compose up -d
# ================================================================
services:
# ── Banco de Dados ────────────────────────────────────────────
postgres:
image: postgres:16
container_name: jasper_postgres
# restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- jasper-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
# ── JasperReports Server ──────────────────────────────────────
jasperserver:
build:
context: .
dockerfile: Dockerfile
container_name: jasper_server
# restart: always
depends_on:
postgres:
condition: service_healthy
environment:
JS_DB_HOST: ${JS_DB_HOST}
JS_DB_PORT: ${JS_DB_PORT}
JS_DB_USERNAME: ${JS_DB_USERNAME}
JS_DB_PASSWORD: ${JS_DB_PASSWORD}
JS_DB_NAME: ${JS_DB_NAME}
ports:
- "8080:8080"
volumes:
# Bind mounts para ./deploy (facilita migração de servidor)
- ./deploy/webapps:/usr/local/tomcat/webapps # WAR do JasperServer
- ./deploy/lib:/usr/local/tomcat/lib # Driver JDBC PostgreSQL
- ./deploy/jasperserver:/var/jasperserver # Marcador de instalação
- ./deploy/keystore:/root # Keystore (.jrsksp)
- ./deploy/logs:/var/log # Logs
networks:
- jasper-net
# ── Volumes ───────────────────────────────────────────────────────
volumes:
postgres_data:
driver: local
# ── Rede Interna ──────────────────────────────────────────────────
networks:
jasper-net:
driver: bridge

44
downloads/download.sh Executable file
View File

@ -0,0 +1,44 @@
#!/bin/bash
# =============================================================
# Script de download do JasperReports Server 8.2.0 CE
# Fonte: SourceForge (conforme indicado no GEMINI.md)
# =============================================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FILENAME="TIB_js-jrs-cp_8.2.0_bin.zip"
DOWNLOAD_URL="https://master.dl.sourceforge.net/project/jr-community-installers/Server/${FILENAME}"
DEST="${SCRIPT_DIR}/${FILENAME}"
if [ -f "$DEST" ]; then
echo "✅ Arquivo já existe: $DEST"
echo " Nenhum download necessário."
exit 0
fi
echo "📥 Baixando JasperReports Server 8.2.0 Community Edition..."
echo " URL: ${DOWNLOAD_URL}"
echo " Destino: ${DEST}"
echo ""
wget \
--progress=bar:force \
--content-disposition \
-O "${DEST}" \
"${DOWNLOAD_URL}"
if [ $? -eq 0 ] && [ -f "$DEST" ]; then
echo ""
echo "✅ Download concluído: ${DEST}"
echo " Tamanho: $(du -sh "${DEST}" | cut -f1)"
else
echo ""
echo "❌ Falha no download automático."
echo ""
echo "📌 Para download manual:"
echo " 1. Acesse: https://sourceforge.net/projects/jr-community-installers/files/Server/"
echo " 2. Baixe o arquivo: ${FILENAME}"
echo " 3. Coloque-o nesta pasta: ${SCRIPT_DIR}/"
exit 1
fi

92
entrypoint.sh Executable file
View File

@ -0,0 +1,92 @@
#!/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