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:
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:
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.