Jasper Server 8.2 Docker Image
This commit is contained in:
commit
8f172a65a6
29
.dockerignore
Normal file
29
.dockerignore
Normal 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
18
.env.sample
Normal 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
28
.gitignore
vendored
Normal 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
65
Dockerfile
Normal 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
38
Makefile
Normal 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
115
README.md
Normal 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)
|
||||
25
config/default_master.properties
Normal file
25
config/default_master.properties
Normal 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
70
docker-compose.yml
Normal 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
44
downloads/download.sh
Executable 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
92
entrypoint.sh
Executable 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
|
||||
Loading…
Reference in New Issue
Block a user