Geoserver en entorno de producción (I): Instalación básica

Este post inicia un serie de otros post que vendrán más adelante, en los cuales voy a detallar como voy a diseñar e introducir un servidor de mapas ( en un entorno de producción. Esta guía trata de resumir todo lo que he investigado, a lo largo de unas semanas, para realizar todo lo mejor posible, y con el mayor rendimiento posible también.

En este post, sólo voy a instalar Geoserver y dejarlo funcionando como una aplicación de Tomcat. Nada más. En siguientes post, hablaremos de la arquitectura de red que plantearemos, las librerías que pueden mejorar el rendimiento, y como añadir alguna funcionalidad extra.

Para empezar, voy a explicar porqué elegimos Geoserver, entre tantos y tantos servidores de mapas. Aunque este servidor, esta desarrollado en Java, resulta ser bastante rápido, cuando se configura correctamente, plantando cara a Mapserver, que se encuentra desarrollado en C++ (se pueden ver muchas comparativas sobre estos dos servidores de mapas), y además esta avanzando a pasos agigantados versión tras versión. Es (como no) software libre, con una gran comunidad detrás, que suelen dar soluciones a todos los problemas encontrados. Aparte de ser “relativamente sencillo” su manejo.

En cuanto al sistema operativo, me decanto por un linux, en mi caso un “Ubuntu Server 9.10“, simplemente por costumbre, ya que se podría usar cualquier otra distribución de linux para hacer la implantación.

Bueno, manos a la obra. Os detallo los pasos a seguir, para realizar una instalación básica:

  1. Instalar “Java JDK“, primero comprobaremos que no está ya instalada (en mi caso ya está instalado el Java):
    linux@svrmapas:~$ dpkg --get-selections | grep sun-java
    sun-java6-bin                                   install
    sun-java6-jdk                                   install
    sun-java6-jre                                   install
    

    En caso de no tenerlo instalado, lo hacemos vía “apt“:

    sudo apt-get install sun-java6-jdk
    

    Actualización Ubuntu 10.04: Parece que con los problema que está habiendo con Oracle, y que demuestran que es el mal supremo (apreciación mía), se han movido los paquetes oficiales (que siguen llamándose “sun-java” curiosamente) a un repositorio externo que no viene por defecto. Así que tocará añadirlo en el fichero “/etc/apt/sources.list“, descomentando dos líneas que vienen comentadas por defecto:

    ## Uncomment the following two lines to add software from Canonical's
    ## 'partner' repository.
    ## This software is not part of Ubuntu, but is offered by Canonical and the
    ## respective vendors as a service to Ubuntu users.
    deb http://archive.canonical.com/ubuntu lucid partner
    deb-src http://archive.canonical.com/ubuntu lucid partner
    
    

    Recuerda lanzar un “update” de “apt-get” para reflejar los cambios

    Si todo ha ido bien, encontraras algo parecido a esto al teclear el siguiente comando:

    linux@svrmapas:~$ java -server -version
    java version "1.6.0_0"
    OpenJDK Runtime Environment (IcedTea6 1.6.1) (6b16-1.6.1-3ubuntu1)
    OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)
    

    Si tienes cualquier otra salida a este comando, tienes que revisar tu instalación de Java ya que es muy importante para el rendimiento usar la versión de Sun más moderna posible.

  2. Ahora toca el Tomcat, y es muy recomendable usar el “Tomcat 6“, aunque creo que es el que se instala por defecto desde la “Ubuntu 9.04“.
    sudo apt-get install tomcat6 tomcat6-admin tomcat6-common tomcat6-user tomcat6-docs tomcat6-examples
    
  3. Tenemos Tomcat funcionando, solo nos queda configurar quien tiene acceso al “Gestor de aplicaciones” de Tomcat, mediante la ruta: “http://tuserver:8080/manager/html“. Si entras, te pedirá un usuario y una clave. ¿Pero si no me la han preguntado?. Tranquilo, ve al fichero “/etc/tomcat6/tomcat-users.xml“, editarlo como sigue:
    <tomcat-users>
      <role rolename="tomcat"/>
      <role rolename="role1"/>
      <role rolename="manager"/>
      <user username="tomcat" password="tomcat" roles="tomcat,manager"/>
      <user username="both" password="tomcat" roles="tomcat,role1"/>
      <user username="role1" password="tomcat" roles="role1"/>
    </tomcat-users>
    

    Hemos hecho lo siguiente, definir un nuevo rol, llamado “manager“, el cual es el necesario para manejar las aplicaciones instaladas, y luego al usuario genérico “tomcat” le hemos datos el rol de “manager“. Revisa que no este comentado (por defecto vienen comentados todos los usuarios), ya que si no, no hacemos nada.
    Muy importante: Esto que he hecho no es seguro, solo para comprobar que todo funciona, tendrías que crear un usuario/password seguros si vas a dar acceso a tu servidor a todo el mundo, una vez comprobado que todo funciona, ya que si no sería muy fácil que alguien “malo” adivine lo que has hecho y pueda acceder a este gestor… e imagino que no quieres que ocurra.

    Actualización Ubuntu 10.04: Algunos cambios surgidos en la versión de Tomcat que se instala, hacen más recomendable este fichero de configuración, que le da permisos a un usuario para manejar todo el tomcat sin problemas:

    <?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
      <role rolename="manager" />
      <role rolename="admin" />
      <user username="mi_usuario_administrador" password="password" roles="admin,manager" />
    </tomcat-users>
    
  4. Ahora reiniciamos el servidor Tomcat:
    sudo /etc/init.d/tomcat6 restart
    
  5. Ya podremos acceder al “manager“, con el usuario con el rol de “manager“, mediante la dirección: “http://tuserver:8080:/manager/html“. Ahora nos vamos a la web oficial de Geoserver y nos bajamos la versión “Web Archive“, como indica la siguiente captura de la web (cuando redacto esto, vamos por la versión 2.0.1):
    Descargar Geoserver
    Ya tenemos, el archivo “war” (te bajaras un .zip, mira dentro), y la intentamos desplegar (es decir, algo parecido a instalar) en nuestro servidor Tomcat, mediante el siguiente interfaz que nos sale por defecto en el  gestor de aplicaciones: Desplegar War
    Una vez hecho, solo nos queda buscar “geoserver” en el listado de aplicaciones, y dar a arrancar… y tras unos instantes: FALLO. Bueno, todo no podía ser tan sencillo, pero no os pongáis nerviosos, está controlado. El error que lanza el interfaz es algo así:

    FALLO – No se pudo arrancar la aplicación en trayectoria de contexto /geoserver

    Actualización Geoserver 2.0.2: Parece que todo esto ya es cosa del pasado, ya que se se despliega sin problemas, y sin dar mas permisos en Tomcat.

  6. El problema anterior, es un problema de permisos, ya que por razones desconocidas, Tomcat viene con los permisos muy recortados y Geoserver necesita prácticamente todos los permisos. Por lo tanto, nos vamos a “/etc/tomcat6/policy.d/04webapps.policy” y al final del fichero (justo antes de cerrar la llave) incluimos esta línea:
    permission java.security.AllPermission;
    

    Volvemos a reiniciar el Tomcat, y probamos de nuevo. No me voy a meter si esto es bueno o malo, si relaja mucho las políticas de seguridad… simplemente hace que funcione.
    Tras esto, al dar a arrancar a la aplicación, nos encontramos con:

    OK – Arrancada aplicación en trayectoria de contexto /geoserver

  7. Accedemos a la aplicación Geoserver, en “http://tuserver:8080/geoserver“. Cruza los dedos, y allí tendrás tu panel de administración de Geoserver.
Los siguientes pasos podrás leerlos en la siguiente entrada: Parte 2.

Referencias usadas:

Share

22 Responses to “Geoserver en entorno de producción (I): Instalación básica”

  1. [...] de las dos partes iniciales (I y II) sobre como estoy instalando un servidor Geoserver, dentro de mi organización con miras a que [...]

  2. ESPEJO dice:

    hola como estas, gracias por la informacion que compartes, me gustaria saber si de casualidad sabes como puedo hacer un espejo de la informacion que cargamos en geoserver, es decir, tenemos geoserver en un servidor pero queremos que al momento de cargar se vaya actualizando al mismo tiempo en otra maquina.

    lo anterior lo queremos hacer en caso de tener problemas con un servidor inmediatamente accesar al otro.

    muchas gracias y saludos.
    jose alberto

    • Taber dice:

      Gran pregunta. Aunque se aleja un poco de la temática Geoserver.

      El tema de la replicación de datos es bastante complejo, ya que depende mucho de donde alojes los datos que utiliza Geoserver. La verdad que nunca me he planteado como hacerlo, y te comento las cosas que recuerdo, aunque es posible que haya alguna solución mejor que las que te planteo.

      Si usas cartografía almacenada en una base de datos, lo más sencillo es que ambos servidores usen la mismas tablas del mismo servidor de la base de datos. Otra posibilidad es que busques alternativas de alta disponibilidad de dicha base de datos, como por ejemplo si usas Postgis, pues buscar como montar un espejo en PostgreSQL. Si tuviera dos Geoserver separados y quisiera cargar en ambas máquinas la misma base de datos (en servicios de BBDD distintos), pues montaria un espejo con las bases de datos, habría una base de datos maestra, donde incluiría los nuevos datos, y otra esclava en la cual solo podría leer. Este es un doc que explica bastante bien el tema:

      http://rockfloat.com/howto/gentoo-postgres-replication-native.html#create-dbs

      En cambio si lo que usas es cartografía cargada desde un directorio (en tu GEOSERVER_DATADIR), la replicación se podría realizar mediante cualquier herramienta tipo rsync, para mover los datos de un servidor a otro. ES IMPORTANTE __NO__ compartir el directorio de datos entre dos instancias de Geoserver, ya que cada instancia espera el uso exclusivo de dicho directorio de datos.

      La ultima idea que se me ocurre basada en Geoserver, es usar la API de Geoserver, basada en peticiones REST. La verdad que no he mirado mucho este tema, pero permite subir información… Esto requiere que os hagáis unos scripts, o programar un poco, pero puede ser lo más potente a largo plazo.

      http://docs.geoserver.org/stable/en/user/extensions/rest/index.html

      Otra idioma mucho más general, es montar los servidores en alta disponibilidad con lo que se puede montar cualquier servicio como servidores web, bases de datos,… y estar seguro que estará siempre online (salvo que ambos servidores caigan xD).
      Básicamente funcionaria así: 2 maquinas en la que solo funciona una y cuando cae esta, la segunda entra como si fuera la primera. Casi todas las herramientas que podéis encontrar están en esta web:

      http://www.linux-ha.org/

      Espero orientaros un poco.

  3. Marcoselche dice:

    Buenas,disculpa Taber por comentar algo más fuera de tu tema, es que tengo el mismo dilema que ESPEJO, necesito replicar datos espaciales por alli escuche acerca simmetricds pero no he podido dar la talla para que me lo permita, sabes si pgpool, o pgcluster replican datos espaciales, bueno mas bien si hay diferencia entre replicar datos espaciales y datos normales, Gracias

  4. Joel dice:

    Gracias por la excelente información!!
    TEngo un problema con el acceso al manager de tomcat, hice los pasos que das y todo ok..pero al momento de logearme en el manager de tomcat ningún usuario y contraseña me funciona. ¿¿POdrias hecharme una manito porfavor?? de antemano muchas gracias.
    JOel

  5. Joel dice:

    ESTIMADOS!!
    Solucioné mi problema de acceso y era solo el tema de la creación de cuenta del manager. Seguiré con esta interesante web. SALUDOS Y GRACIAS.

  6. Juan dice:

    hola Laber: He seguido todos tus pasos para instalar geoserver y me fue muy bien!!! muchas gracias.
    Ahora te hago una pregunta….
    Como hago para modificar el mapa de geoserver? me refiero a cambiar el titulo, sacar o agregar algunos iconos de zoom,modificar el tamaño de visualización, etc.
    No pude encontrar ninguna carpeta a donde se encuentre el código para modificar.
    Estoy usando ubuntu 11.04, espero que me puedas ayudar. Gracias!!!!
    Saludos

    • Taber dice:

      Buenas. Hace varias preguntas y muy diversas, pero voy a intentar responder todo lo que sepa :)

      a) ¿Modificar el mapa?. ¿Te refieres a una capa raster o shape?. Para modificar una capa (es decir cambiar un punto se sitio, añadirlo, definir una polilínea, etc…), que yo recuerde, sólo lo puedes hacer sobre una capa shape mediante el protocolo WFS mediante transacciones (http://docs.geoserver.org/stable/en/user/services/wfs/reference.html#transaction). Si te refieres a “adornar” las capas, tienes que utilizar el SLD para WMS, que define el estilo de las capas que muestras (http://docs.geoserver.org/stable/en/user/styling/index.html).
      b) Para cambiar los “estilos”, se puede hacer desde el propio interfaz de Geoserver en el apartado “Styles”, que ahora mismo no recuerdo donde se encontraba, y que se puede elegir entre los diferentes “estilos” cuando publicas una nueva capa.

      Te recomendaría que revisaras SLD, y todo su potencia, ya que al principio puede parecer complicado, pero luego es tremendamente sencillo y puede hacer que tus capas queden muy chulas.

      Espero que sea de ayuda mi respuesta.

  7. Juan dice:

    hola Taber: perdón por la demora y muchas gracias por la respuesta tan detallada que me diste.
    Te comento… no me refería específicamente a lo que me contestas, en realidad la modificación del shape lo realizo con el GVsig. Eh leído también acerca de SLD y traté de modificar la apariencia en “Style” pero no logro lo que quiero hacer.
    Acá te dejo una imagen de las cosas que quiero cambiar, quizás así te resulte más fácil entenderme.

    http://img135.imageshack.us/img135/2479/paraenviar.jpg
    Muchas gracias y saludos!!!

  8. Juan dice:

    Hola Taber: el link que te dejé se cayó. Te dejo el nuevo…Gracias!

    http://jackimages.netai.net/?v=nueva.jpg

    • Taber dice:

      Perdona por mi tardanza también :P

      Ahora todo esta más claro :)

      Para modificar esas imágenes solo tienes que crear un “tema” de interfaz para los controles.

      Sinceramente nunca lo he hecho, pero recuerdo encontrarme con las imágenes en el directorio “theme\default\img” de OL. No puedo ayudarme mucho más pero recuerdo ver muchos ejemplos con el control personalizado.

  9. d dice:

    taber sabes algo de migrar de postgis 1.3.6 a 1.4.2 en un postgres 8.3?
    ya que he buscando infinidad de informacion, pero hasta ahora no he encontrado nada.
    gracias de antemano

  10. Sheo dice:

    Que tal, exelente informaci{on, muchas gracias..

    Necesito una ayudita mas, ya le logre hacer desplegar la aplicacion, y solamente me despliega una pagina con tres links, pero esa parte que indicas del estado del servidor nose en donde o como le hago que me aparesca..
    Ademas con que username y clave me autenfico…?
    Gracias por la respuesta….!!

  11. Daeron dice:

    Hola, tengo una consulta. Tengo instalado Apache tomcat 7 y quiero cargar el archivo war de geoserver 2.1.2. Sin embargo el servidor me devuelve un error diciendo que el archivo war es mas grande que el tamaño que acepta tomcat., he probado descomprimir el archivo war y comprimirlo aun mas, pero si bien me lo carga, no lo ejecuta. Como si el archivo estuviera malo.

    He probado con versiones anteriores, de geoserver, específicamente con la 2.1.1 y la 2.1.0 pero me lanza el mismo error de tamaño..

    Mi consulta es como puedo saltarme esa limitacion de tamaño para cargar el archivo war, o si hay una alternativa para cargarlo.

  12. Anava dice:

    Hola, tengo una cuestión que lanzar,

    por qué al hacer una página web con un visor en Openlayer, capas base de Google y raster en Geoserver,y dando una url que apunta a mi ordenador mis compañeros no visualizan el mapa gestionado en geoserver y las capas bases sí. ¿Es cuestión de seguridad en las reglas de acceso a los servicios?

    Gracias y saludos

    • Taber dice:

      Me das pocas pistas :)

      Te digo lo que se me ocurre a voz de pronto:

      1) ¿Estás accediendo a la URL de Geoserver correctamente?.

      2) Si hay una configuración erronea en Geoserver, dale a guardar la imagen de error en openlayers (si no recuerdo mal se pone en rosa), y luego abrela, ya que suelen ser mensajes de error en XML que te pueden dar pistas (o bien, mira la url de una de las imagenes que carga OL y trata de acceder tu desde un navegador):

      3) Las capas base delimitan la proyección, sobretodo si usas Google Maps… ¿Tus capas se pueden servir en la proyección lon/lat?

      Coméntame si alguna de estas ideas te ha ayudado.

      • Anava dice:

        Gracias por la contestación.

        He configurado un WMS. Yo accedo bien a la página web constituida por capas bases de Google y superpuesto, por 1 vectorial de provincias y 1 raster de una variable cuantitativa en forma de grupo de capas en Geoserver.

        Quienes no acceden son mis compañeros de trabajo con la misma url que pongo yo, los cuales ven las capas bases de Google pero no ven las capas gestionadas en geoserver.

        ¿PUede ser cuestión de seguridad en el servicio?

        Indícame, por favor, si necesitas algún dato más, soy nueva en esto y se me escapan muchos detalles.

        Saludos

        • Taber dice:

          ¿Lo has desplegado sobre un Tomcat o JBoss o sobre otro servidor de apliaciones?.
          Si es así, el problema puede residir sobre la seguridad de Tomcat, JBoss, etc… Todo será mira la documentación, sobre las ips desde donde acepta conexiones.

          En Openlayers usa el nombre DNS que puedan resolver todos los ordenadores, o incluso mejor la IP si tienes dudas.

          ¿Lo tienes montado sobre tu propio ordenador?, puede que tu lo veas porque está en tu propio ordenador (sobre localhost) y algún firewall esté parando la conexión.

          ¿Tienen acceso tus compañeros a Geoserver?, ¿por el puerto 8080?.

          Cuéntame si te ha ayudado.

  13. Anava dice:

    Voy a revisar la documentación sobre el acceso desde fuera a Geoserver. Parece ser que no es problema de algún cortafuegos

    Entiendo que está desplegado sobre Tomcat.

    Muchísimas gracias por las indicaciones. Cuando sepamos qué pasa os los comunicaré….menos mal que existen estos foros!!!

    Ana

  14. Anava dice:

    Hola,

    el Geoserver que tengo instalado está sobre Jetty (no sobre Tomcat)y el problema que tenía es que en el html,al hacer la llamada al mapa indicaba “localhost” en vez de mi ip, de tal manera que yo accedía pero mis compañeros en intranet no….

    Muchísimas gracias por todas las ideas!!!

    Saludos,

    Ana

Leave a Response