A continuación se documenta el proceso de levantar un servicio geoserver en un servidor Ubuntu 20.04. La idea será configurarlo con los siguientes principios:
- El servicio es manejado por su propio usuario (geoserver).
- El servicio está disponible en un dominio o subdominio en el puerto 80 con nginx como proxy reverso.
- Systemd está a cargo de gestionar el proceso de geoserver.
- Cambiaremos la contraseña por defecto para proteger la instalación.
- la instalación se realizará como un usuario normal pero que pertenezca al grupo sudo
Para este fin comenzaremos con la instalación de algunos paquetes necesarios
sudo apt install -y wget unzip openjdk-11-jdk gdal-bin
Luego, asegurando que estemos en la carpeta $HOME del usuario en uso procederemos a descargar geoserver y descomprimirlo:
cd ~ mkdir tmp cd tmp wget http://sourceforge.net/projects/geoserver/files/GeoServer/2.19.1/geoserver-2.19.1-bin.zip
Creamos el usuario geoserver que manejará la instalación y la carpeta en que vivirá.
sudo mkdir -p /opt/geoserver sudo useradd --home-dir /opt/geoserver --system --shell /bin/bash --user-group geoserver
Movemos el archivador descargado a su última morada
sudo mv geoserver-2.19.1-bin.zip /opt/geoserver/
Y nos preparamos a descomprimirlo y eliminarlo para que no estorbe.
sudo chown -R geoserver:geoserver /opt/geoserver sudo su geoserver cd unzip geoserver-2.19.1-bin.zip rm geoserver-2.19.1-bin.zip exit
Lo siguiente será crear la unidad de systemd que manejará geoserver. Para eso editaremos con nuestro editor favorito el archivo /etc/systemd/system/geoserver.service y escribiremos el siguiente contenido
[Unit] Description=Geoserver service After=network.target [Service] User=geoserver Group=geoserver WorkingDirectory=/opt/geoserver ExecStart=/usr/bin/java -DGEOSERVER_DATA_DIR=data_dir -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar start.jar Restart=always [Install] WantedBy=multi-user.target
A continuación nos aseguraremos de que el servicio opera correctamente. Para eso primero tenemos que asegurar que nuestro usuario es parte de los grupos adm y systemd-journal que nos permitirán monitorear el servicio.
sudo usermod -aG adm $USER sudo usermod -aG systemd-journal $USER
Con esto hecho podemos proceder a cargar e inicar nuestro servicio:
sudo systemctl daemon-reload sudo systemctl start geoserver
Y comprobamos que está saludable haciendo:
systemctl status geoserver
Lo cual nos debería mostrar algo parecido a esto:
● geoserver.service - Geoserver service Loaded: loaded (/etc/systemd/system/geoserver.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2021-07-15 22:17:01 UTC; 5s ago Main PID: 1837061 (java) Tasks: 21 (limit: 2280) Memory: 81.6M CGroup: /system.slice/geoserver.service └─1837061 /usr/bin/java -DGEOSERVER_DATA_DIR=data_dir -Djava.awt.headless=true -DSTOP.PORT=8> Jul 15 22:17:01 citlaltepetl systemd[1]: Started Geoserver service. Jul 15 22:17:02 citlaltepetl java[1837061]: 2021-07-15 22:17:02.708:INFO::main: Logging initialized @1154> Jul 15 22:17:04 citlaltepetl java[1837061]: 2021-07-15 22:17:04.120:INFO:oejs.Server:main: jetty-9.4.36.v> Jul 15 22:17:04 citlaltepetl java[1837061]: 2021-07-15 22:17:04.203:INFO:oejdp.ScanningAppProvider:main: > Jul 15 22:17:06 citlaltepetl java[1837061]: 2021-07-15 22:17:06.097:INFO:oejw.StandardDescriptorProcessor>
Presionar q para salir. Si adicionalmente queremos que el servicio inicie automáticamente en caso de reiniciar el servidor haremos esto:
sudo systemctl enable geoserver
Con lo cual concluimos la instalación y procedemos a la configuración.
Configuración de nginx
Los pasos anteriores dejaron a geoserver escuchando en el puerto 8080. Para acceder debemos escribir la IP de nuestro servidor en el navegador, especificando este puerto. Si adicionalmente queremos acceder al servicio en una URL amigable y bajo https se deberán seguir estos pasos.
Antes de proceder es necesario que se cuenta con un nombre de dominio. Su obtención está fuera de los alcances de este manual.
Lo primero será crear una carpeta que funcionará como raíz de documentos para el subdominio que vamos a crear. También es posible usar el dominio pelón siguiendo casi los mismos pasos, pero aquí me voy a centrar en la opción del subdominio.
sudo mkdir /opt/geoserver/public sudo chown geoserver:geoserver /opt/geoserver/public
A continuación instalaremos nginx
sudo apt install -y nginx
Y en este punto es necesario haber decidido la ubicación de nuestro geoserver, ya sea como servicio principal de nuestro dominio (y accedemos a él mediante midominio.com) o dentro de un subdominio (y accedemos mediante subdominio.midominio.com). En lo sucesivo usaré SUBDOMINIO.MIDOMINIO.COM como ubicación del servicio de geoserver. Lo escribo en mayúsculas solamente para hacer notorio lo que hay que reemplazar por tu propio nombre de dominio. Tu debes escribirlo en minúsculas.
Dicho esto crearemos y editaremos el archivo /etc/nginx/sites-available/SUBDOMINIO.MIDOMINIO.COM con el siguiente contenido:
server { listen 80; listen [::]:80; server_name SUBDOMINIO.MIDOMINIO.COM; root /opt/geoserver/public; location / { try_files $uri @geoserver; } location @geoserver { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://localhost:8080; } }
Ahora habilitaremos este registro y recargaremos nginx para asegurarnos de que todo está funcionando:
sudo ln -s /etc/nginx/sites-available/SUBDOMINIO.MIDOMINIO.COM /etc/nginx/sites-enabled/ sudo systemctl reload nginx
Y visitaremos en el navegador http://SUBDOMINIO.MIDOMINIO.COM/geoserver para asegurarnos de que ahí está corriendo geoserver.
Para evitar ciertos errores al enviar formularios en la interfaz administrativa de geoserver hay que editar el archivo /opt/geoserver/webapps/geoserver/WEB-INF/web.xml y añadir las siguientes líneas después del último <context-param> que esté ahí.
<context-param> <param-name>GEOSERVER_CSRF_WHITELIST</param-name> <param-value>SUBDOMINIO.MIDOMINIO.COM</param-value> </context-param>
y reiniciamos geoserver para que los cambios tengan efecto:
sudo systemctl restart geoserver
Cambio de contraseñas
Geoserver tiene dos contraseñas que nos va a ser importante configurar inmediatamente después de la instalación. Una es la llave maestra y otra es la contraseña del usuario admin.
Para hacerlo escribe en el navegador la URL de geoserver (http://SUBDOMINIO.MIDOMINIO.COM/geoserver) y escribe las contraseñas por defecto en la caja de inicio de sesión que aparece en la parte superior derecha.
La contraseña por defecto del usuario admin de geoserver es geoserver, de la misma manera la contraseña maestra por defecto es geoserver. Lo siguiente que veremos es la pantalla de inicio. En ella se nos mostrarán dos avisos que nos invitan a cambiar las contraseñas por defecto. Hay que seguir cada uno
Mi recomendación es que utilices contraseñas completamente aleatorias de 16 caracteres. No trates de recordarla, usa un gestor de contraseñas.
Como un último paso para que geoserver sepa en qué url vive vamos a seguir el enlace que dice Global debajo de la sección Settings de la barra lateral izquierda. Luego en donde dice Proxy Base URL pondremos la dirección que usamos para acceder a geoserver en el navegador
Recomendaciones
- No dejes abiertos todos los puertos de tu servidor. Usa algo como ufw o iptables para solamente permitir las conexiones entrantes en los puertos que tú planees.