Cómo instalar JasperReports con Nginx Proxy en Ubuntu 22.04

JasperReports es un motor de generación de informes y una biblioteca de clases java, gratuitos y de código abierto, que ayudan a los desarrolladores a añadir capacidades de generación de informes a sus aplicaciones. Es un servidor de informes autónomo e integrable que proporciona funcionalidad de informes y análisis. Con JasperReports, puedes generar informes profesionales, incluyendo imágenes, tablas y gráficos. Esta herramienta también te ayuda a escribir contenido rico en la pantalla, en la impresora y en varios formatos de archivo, como HTML, PDF, XLS, RTF, CSV, XML, ODT y TXT.

En este post, te mostraremos cómo instalar JasperReports Server en Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 22.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Se ha configurado una contraseña de root en el servidor.

Instalar el JDK de Java

JasperReports se basa en Java, por lo que tendrás que instalar el JDK de Java en tu servidor. Puedes instalarlo ejecutando el siguiente comando:

apt install default-jdk unzip wget -y

Una vez instalado el Java, puedes verificar la versión de Java con el siguiente comando:

java --version

Obtendrás la versión de Java en la siguiente salida:

openjdk 11.0.16 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

Instalar y configurar la base de datos MariaDB

También tendrás que instalar el servidor de bases de datos MariaDB en tu sistema. Puedes instalarlo con el siguiente comando:

apt install mariadb-server -y

Una vez instalado el MariaDB, inicia sesión en el MariaDB con el siguiente comando:

mysql

Una vez iniciada la sesión, crea un usuario y establece una contraseña con el siguiente comando:

MariaDB [(none)]> grant all on *.* to master@localhost identified by 'password';

A continuación, vacía los privilegios y sal del shell de MariaDB con el siguiente comando:

MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Instalar el servidor Tomcat

JasperReports se ejecuta en el servidor Tomcat. Así que tendrás que instalarlo en tu servidor.

En primer lugar, crea un usuario y un grupo dedicados para Tomcat con el siguiente comando:

groupadd tomcat
useradd -s /bin/bash -g tomcat -d /opt/tomcat tomcat

A continuación, crea un directorio Tomcat con el siguiente comando:

mkdir /opt/tomcat

A continuación, descarga el Tomcat 8 desde su sitio web oficial utilizando el siguiente comando:

wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.82/bin/apache-tomcat-8.5.82.tar.gz

A continuación, extrae el archivo descargado al directorio /opt/tomcat:

tar -xzvf apache-tomcat-8.5.82.tar.gz -C /opt/tomcat --strip-components=1

A continuación, establece el permiso y la propiedad adecuados para el directorio Tomcat:

chown -R tomcat: /opt/tomcat
sh -c 'chmod +x /opt/tomcat/bin/*.sh'

Crea un archivo de servicio Systemd para Tomcat

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio Tomcat. Puedes crearlo con el siguiente comando:

nano /etc/systemd/system/tomcat.service

Añade las siguientes líneas:

[Unit]
Description=Tomcat webs servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat
RestartSec=10
Restart=always 
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"

Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms1024M -Xmx2048M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo, luego recarga el demonio systemd para aplicar los cambios:

systemctl daemon-reload

A continuación, inicia el servicio Tomcat con el siguiente comando:

systemctl start tomcat

También puedes comprobar el estado del servicio Tomcat con el siguiente comando:

systemctl status tomcat

Obtendrás la siguiente salida:

? tomcat.service - Tomcat webs servlet container
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-04 06:06:39 UTC; 6s ago
    Process: 6867 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 6874 (java)
      Tasks: 29 (limit: 4579)
     Memory: 118.4M
        CPU: 4.427s
     CGroup: /system.slice/tomcat.service
             ??6874 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djav>

Sep 04 06:06:39 ubuntu2204 systemd[1]: Starting Tomcat webs servlet container...
Sep 04 06:06:39 ubuntu2204 startup.sh[6867]: Tomcat started.
Sep 04 06:06:39 ubuntu2204 systemd[1]: Started Tomcat webs servlet container.

Instalar y configurar JasperReports

Primero, cambia el usuario a Tomcat y descarga el archivo JasperReports con el siguiente comando

su - tomcat
wget https://sourceforge.net/projects/jasperserver/files/JasperServer/JasperReports%20Server%20Community%20edition%208.0.0/TIB_js-jrs-cp_8.0.0_bin.zip

Una vez completada la descarga, descomprime el archivo descargado con el siguiente comando:

unzip TIB_js-jrs-cp_8.0.0_bin.zip

A continuación, copia el archivo de propiedades de MySQL con el siguiente comando:

cp jasperreports-server-cp-8.0.0-bin/buildomatic/sample_conf/mysql_master.properties jasperreports-server-cp-8.0.0-bin/buildomatic/default_master.properties

A continuación, edita el archivo de propiedades de MySQL con el siguiente comando

nano jasperreports-server-cp-8.0.0-bin/buildomatic/default_master.properties

Define la ruta de tu Tomcat, y los detalles de configuración de la base de datos como se muestra a continuación:

CATALINA_HOME = /opt/tomcat
CATALINA_BASE = /opt/tomcat

dbHost=localhost
dbUsername=master
dbPassword=password
encrypt = true

Guarda y cierra el archivo y luego instala el JasperReports con el siguiente comando:

cd jasperreports-server-cp-8.0.0-bin/buildomatic/
./js-install-ce.sh

Una vez completada la instalación, obtendrás la siguiente salida:

     [echo] Found Groovy in import lib directory

deploy-webapp-datasource-configs:
     [echo]  --- (app-server.xml:deploy-webapp-datasource-configs) --- 
     [echo]  jsEdition     = ce
     [echo]  warFileDistSourceDir = /opt/tomcat/jasperreports-server-cp-8.0.0-bin/buildomatic/../jasperserver.war
     [echo]  warTargetDir  = /opt/tomcat/webapps/jasperserver
     [echo]  webAppName    = jasperserver
     [echo]  webAppNameCE  = jasperserver
     [echo]  webAppNamePro = jasperserver-pro
     [echo]  webAppNameSrc = jasperserver 
     [echo]  webAppNameDel = jasperserver, warTargetDirDel = /opt/tomcat/webapps/jasperserver
     [copy] Copying 9 files to /opt/tomcat/webapps/jasperserver

scalableAdhoc-refinement:

deploy-webapp-ce:

install-normal-ce:
     [echo] Installation successfully completed!

BUILD SUCCESSFUL
Total time: 1 minute 26 seconds
Checking Ant return code: OK
----------------------------------------------------------------------

A continuación, edita el archivo de configuración de la política de Tomcat:

nano /opt/tomcat/conf/catalina.policy

Añade las siguientes líneas:

grant codeBase "file:/groovy/script" {
    permission java.io.FilePermission "${catalina.home}${file.separator}webapps${file.separator}
    jasperserver-pro${file.separator}WEB-INF${file.separator}classes${file.separator}-", "read";
    permission java.io.FilePermission "${catalina.home}${file.separator}webapps${file.separator}
    jasperserver-pro${file.separator}WEB-INF${file.separator}lib${file.separator}*", "read";
    permission java.util.PropertyPermission "groovy.use.classvalue", "read";
};

Guarda y cierra el archivo, luego edita el archivo de configuración de la aplicación:

nano /opt/tomcat/webapps/jasperserver/WEB-INF/applicationContext.xml

Añade las siguientes líneas:

<bean id="reportsProtectionDomainProvider" class="com.jaspersoft.jasperserver.api.
engine.jasperreports.util.PermissionsListProtectionDomainProvider">
<property name="permissions">
<list>
    <bean class="java.io.FilePermission">
        <constructor-arg value="${catalina.home}${file.separator}webapps
        ${file.separator}jasperserver-pro${file.separator}
        WEB-INF${file.separator}classes${file.separator}-"/>
        <constructor-arg value="read"/>
    </bean>
    <bean class="java.io.FilePermission">
        <constructor-arg value="${catalina.home}${file.separator}webapps
        ${file.separator}jasperserver-pro${file.separator}WEB-INF
        ${file.separator}lib${file.separator}*"/>
        <constructor-arg value="read"/>
    </bean>
</list>
</property>
</bean>

Guarda y cierra el archivo, y luego sal del usuario Tomcat:

exit

A continuación, reinicia el servicio Tomcat para aplicar los cambios.

systemctl restart tomcat

Acceder a la interfaz web de JasperReports

En este punto, JasperReports está instalado y configurado. Ahora puedes acceder a ella utilizando la URL http://YOUR_SERVER_IP_ADDRESS:8080/jasperserver/. Deberías ver la página de acceso a JasperReports:

Inicio de sesión de Jasper

Proporciona el nombre de usuario: jasperadmin y la contraseña: jasperadmin y, a continuación, haz clic en el botón Iniciar sesión. Deberías ver el panel de JasperReports en la siguiente página:

Panel de JasperReports

Configurar Nginx como proxy inverso para JasperReports

Primero, instala el paquete del servidor web Nginx con el siguiente comando:

apt install nginx

A continuación, crea un archivo de configuración del host virtual Nginx con el siguiente comando:

nano /etc/nginx/conf.d/jasperreports.conf

Añade las siguientes configuraciones:

upstream tomcat {
    server 127.0.0.1:8080 weight=100 max_fails=5 fail_timeout=5;
    }

server {
    server_name jasper.example.com;

location = / {
    return 301 http://jasper.example.com/jasperserver/;
    }

location / {
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://tomcat/;
    }
}

Guarda y cierra el archivo y luego verifica la configuración de Nginx:

nginx -t

Obtendrás la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, recarga el servicio Nginx para aplicar los cambios de configuración:

systemctl restart nginx

Puedes verificar el estado de Nginx con el siguiente comando:

systemctl status nginx

Deberías ver la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-04 14:51:10 UTC; 7s ago
       Docs: man:nginx(8)
    Process: 7644 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 7645 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 7646 (nginx)
      Tasks: 3 (limit: 4579)
     Memory: 3.3M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ??7646 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??7647 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??7648 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Sep 04 14:51:10 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 04 14:51:10 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

Ahora puedes acceder a tu JasperReports utilizando la URL http://jasper.example.com.

Conclusión

En este post, has aprendido a instalar JasperReports en Ubuntu 22.04. También has aprendido a configurar Nginx como proxy inverso para JasperReports. Ahora puedes utilizar esta herramienta para generar e incrustar informes en aplicaciones Java o no Java.

Scroll al inicio