tecnica:gps_cartografia_gis:gis_server_centos

Server CentOS 5.2 per web GIS

Software installato

  • Postgres (pacchetto postgresql-server-8.3.5-1PGDG.rhel5)
  • Postgis (pacchetto postgis-1.3.3-2.rhel5)
  • GDAL (/usr/local/lib/libgdal.so.1 da src in /usr/local/gdal-1.5.3/)
  • OGDI (pacchetto ogdi-3.2.0-0.12.beta2.el5)
  • mapserver (in /var/www/cgi-bin/mapserv da src in /usr/local/mapserver-5.2.1/)
  • p.mapper (in /var/www/pmapper con alias /pmapper in httpd.conf, src in /root/pmapper-3.2.0.zip)
  • mapbender (in /var/www/mapbender/http, con alias /mapbender, src in /root/mapbender_2.5.zip)
    TODO: configurazione di Owsproxy
  • Geoserver (geoserver-1.7.1-bin.zip, unzip in /usr/local/lib/geoserver/)
  • Geonetwork (geonetwork-install-2.2.0.jar)
  • Mod_JK Apache Tomcat Connector (1.2.26, src in /root/download/mod_jk)
  • SUN Java 1.6.0 (da jdk-6u10-linux-i586.bin + rpmbuild, src in /usr/src/redhat → /root/redhat)
  • Tomcat 5.5 (pacchetto tomcat5-5.5.23-0jpp.7.el5_2.1 e altri)

PostgreSQL + PostGIS

Creato un template per database geografici, di nome template_gis:

postgres=# CREATE DATABASE template_gis TEMPLATE template0;
[root@guest-34 ~]# su - postgres
-bash-3.2$ createlang plpgsql template_gis
-bash-3.2$ psql -f /usr/share/pgsql/contrib/lwpostgis.sql -d template_gis
-bash-3.2$ psql -f /usr/share/pgsql/contrib/spatial_ref_sys.sql -d template_gis
postgres=# UPDATE pg_database SET datistemplate='t' WHERE datname = 'template_gis';

p.Mapper

Il file di configurazione e il file .map in uso sono rispettivamente:

  • /var/www/pmapper/config/config_default.ini,
  • /var/www/pmapper/config/default/pmapper_demo.map.

Impostato in /etc/httpd/conf/httpd.conf un:

Alias /pmapper /var/www/pmapper
<Directory /var/www/pmapper>
    Options MultiViews
    DirectoryIndex index.phtml
    Order allow,deny
    Allow from all
</Directory>

Configurato /etc/php.ini in modo che gli errori PHP vengano loggati in /var/log/php/error.log. Rotazione dei log aggiunta a /etc/logrotate.d/httpd.

File temporanei in /var/www/html/tmp/, directory con permessi 1777. Creato cronjob di pulizia periodica /etc/cron.d/mapserver-clean.

MapBender

Download di mapbender_2.5.zip da www.mapbender.org, unzip in /var/www/mapbender/, la directory di log deve essere scrivibile all'utente Apache:

chown -R apache /var/www/mapbender/log

Impostato in /etc/httpd/conf/httpd.conf un:

Alias /mapbender /var/www/mapbender/http
<Directory /var/www/mapbender/http>
    Options MultiViews
    DirectoryIndex index.php
    Order allow,deny
    Allow from all
    php_flag short_open_tag off
</Directory>

Editare la configurazione conf/mapbender.conf, in particolare verificare le impostazioni di accesso al database:

define("DBSERVER", "localhost");
define("PORT", "5432");
define("DB", "mapbender");
define("OWNER", "mapbender");
define("PW", "MySecret");

Per poter sfruttare il password recovery via mail bisogna configurare un indirizzo email per l'utente ed aver abilitato le opzioni mail:

define("MAILHOST", "smpt.domain.org");
define("MAILADMIN", "admin@domain.org");
define("MAILADMINNAME", "Mapbender Admin");

Creare un database PostgreSQL, caricare lo schema, i dati e i vincoli (scegliere la versione PostgreSQL con encoding utf-8):

  • resources/db/postgresql/pgsql_schema.sql
  • resources/db/postgresql/utf8/pgsql_data.sql
  • resources/db/postgresql/pgsql_serial_set_sequences.sql

Abilitare il database all'estensione PostGIS.

Per verificare le impostazioni spostare tools/mapbender_setup.php in http/tools/mapbender_setup.php ed aprirlo con il browser.

  1. Il test short_open_tag non è affidabile perché fa il test con get_cfg_var() invece che con ini_get(). Controllare con phpinfo() lo stato reale, conviene che sia Off (vedi direttiva in httpd.conf).
  2. Il test segnala un problema di ERROR LOGGING se LOG_LEVEL è impostato a qualcosa minore di notice, perché il test si basa sulla possibilità di loggare con priorità notice.

Finto il test togliere il file mapbender_setup.php da http/tools/.

Per abilitare OWSProxy vedere le istruzioni (in tedesco): http://www.mapbender.org/Owsproxy.

Alcune prove con MapBender

Loggarsi come utente root, password di default root:

  • Dal menu admin2_en creare un nuovo utente.
  • Copy GUI: come esempio usare quella predefinita di nome gui, abbastanza completa.
  • Allow one user to access several GUIs: permettere al nuovo utente di accedere alla nuova GUI.
  • Edit GUI elements: per esempio aggiungere il modulo owsproxy copiandolo dalla GUI admin1.
  • Load WMS: selezionare una GUI, immettere un WMS GetCapabilities URL. Il WMS viene aggiunto al volo alla GUI.

Java SUN

Per mantenere l'installazione sotto il controllo del gestore pacchetti si è adottata la procedura HowTo Install Java on CentOS.

In sintesi:

yum install rpm-build
cd /usr/src/redhat/SOURCES
wget http://cds.sun.com/is-bin/.../jdk-6u10-linux-i586.bin
wget http://mirrors.dotsrc.org/jpackage/1.7/generic/SRPMS.non-free/java-1.6.0-sun-1.6.0.10-1jpp.nosrc.rpm
rpmbuild --rebuild java-1.6.0-sun-1.6.0.10-1jpp.nosrc.rpm
cd /usr/src/redhat/RPMS/i586
yum --nogpgcheck localinstall java-1.6.0-sun-1.6.0.10-1jpp.i586.rpm
yum --nogpgcheck localinstall java-1.6.0-sun-fonts-1.6.0.10-1jpp.i586.rpm
yum --nogpgcheck localinstall java-1.6.0-sun-devel-1.6.0.10-1jpp.i586.rpm
alternatives --config java
java -version

Geoserver

:!: Questa installazione è stata abbandonata e non viene avviata al bootstrap! :!:

Un'installazione di prova di Geoserver è stata fatta con la versione UNIX binary che in un unico archivio fornisce l'applicativo e Jetty (server web e Java servlet engine). Sebbene l'installazione sia più semplice (richiede solo la presenza di Java, non necessita di Apache e Tomcat) non è indicata in ambiente di produzione. Ulteriore problema è che l'applicativo gira come utente root.

Lo script di start/stop /etc/init.d/geoserver poteva essere simile a questo:

#!/bin/sh
#
# geoserver    Startup script for Geoserver
#
# chkconfig: 2345 85 15
# description: Geoserver is a open source software server \
#              written in Java that allows users to share \
#              and edit geospatial data.
 
# Where to search for the ./bin/java binary:
export JAVA_HOME="/usr/lib/jvm/java"
export GEOSERVER_HOME="/usr/local/lib/geoserver"
LOG="/var/log/geoserver/geoserver.log"
ERR_LOG="/var/log/geoserver/error.log"
 
case "$1" in
    start)
        "$GEOSERVER_HOME"/bin/startup.sh < /dev/null >> "$LOG" 2>> "$ERR_LOG" &
        ;;
    stop)
        "$GEOSERVER_HOME"/bin/shutdown.sh
        ;;
    *)
        echo "Usage: $0 {start|stop}"
esac

L'installazione in sintesi:

wget http://downloads.sourceforge.net/geoserver/geoserver-1.7.1-bin.zip
cd /usr/local/lib
unzip /root/geoserver-1.7.1-bin.zip
mv geoserver-1.7.1 geoserver
vi /etc/init.d/geoserver
chkconfig --add geoserver
mkdir /var/log/geoserver
/etc/init.d/geoserver start

L'applicativo è raggiungibile all'indirizzo http://localhost:8080/geoserver/, username admin e password geoserver.

Volendo cambiare la porta di default (TCP 8080, la stessa usata da Tomcat), modificare $GEOSERVER_HOME/etc/jetty.xml.

Tomcat

Installato Tomcat fornito da CentOS:

yum install tomcat5.i386
chkconfig --level 2345 tomcat5 on

Il server http di Tomcat risponde all'indirizzo http://localhost:8080/, volendo modificare la porta TCP si edita il file /etc/tomcat5/server.xml. Tomcat utilizza anche la porta TCP 8005 (ma solo su 127.0.0.1) per la sua procedura di shutdown. Tomcat apre anche la porta TCP 8009 per il connector usato da Mod_JK (vedi avanti), oltre alle porte 2100 TCP e 9157 TCP per :?:

Le pagine di amministrazione web di Tomcat sono fornite dai seguenti pacchetti

yum install tomcat5-webapps
yum install tomcat5-admin-webapps

Per accedere a Status e Tomcat Manager è richiesto il ruolo di manager, per accedere a Tomcat Administration è richiesto il ruolo di admin. I ruoli sono definiti nel file $CATALINA_HOME/conf/tomcat-users.xml (riavviare Tomcat dopo averlo modificato), ecco un esempio:

<tomcat-users>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="admin" password="secret" roles="admin,manager"/>
</tomcat-users>

Tomcat produce il suo log in /var/log/tomcat5/catalina.out.

Geonetwork

Un'installazione di Geonetwork per un ambiente di produzione richiede Java, Apache, Tomcat e Mod_JK. Un po' di istruzioni su come installare Geonetwork su Ubuntu.

Scaricato l'installer geonetwork-install-2.2.0.jar, si tratta purtroppo di un installer grafico che richiede X. Dovrebbe poter funzionare via SSH con l'X11Forwarding (verificare di aver installato i font per Java).

java -jar geonetwork-install-2.2.0.jar

Si è scelta come directory /usr/local/lib/geonetwork, le componenti installate sono:

  • Core
  • Sample metadata
  • GeoServer web map server
  • CSW 2.0.1 test client

Anche senza grafica è possibile replicare un'installazione fatta in precedenza: è sufficiente avere l'accortezza di salvare nell'ultimo passo dell'installazione un file xml di setup. Con tale file è possibile replicare l'installazione sulla nuova macchina:

java -jar geonetwork-install-2.2.0.jar geonetwork_install.xml

Geonetwork ha bisogno di un database, creato in PostgreSQL:

postgres=# CREATE DATABASE geonetwork OWNER geouser;

Configurare Tomcat

Geonetwork fornisce ben tre applicativi: geonetwork, intermap e geoserver, si deve informare Tomcat della loro presenza. In /etc/tomcat5/server.xml si aggiunge nella sezione <Host> i tre contesti:

  <Context path="/geonetwork"
   docBase="/usr/local/lib/geonetwork/web/geonetwork/"
   crossContext="false"
   debug="0"
   reloadable="false" />
  <Context path="/intermap"
   docBase="/usr/local/lib/geonetwork/web/intermap/"
   crossContext="false"
   debug="0"
   reloadable="false" />
  <Context path="/geoserver"
   docBase="/usr/local/lib/geonetwork/web/geoserver/"
   crossContext="false"
   debug="0"
   reloadable="false" />

Inoltre l'utente tomcat deve avere permesso di lettura/scrittura sulle directory delle webapps:

chown -R tomcat /usr/local/lib/geonetwork/web

In /etc/sysconfig/tomcat5 si imposta JAVA_HOME e - tanto per non smentire la fama di baraccone insicuro di Tomcat+Java - si aggiungere a la direttiva TOMCAT5_SECURITY:

JAVA_HOME="/usr/lib/jvm/jre"
export TOMCAT5_SECURITY=no

Con questa configurazione le applicazioni sono raggiungibili agli URL:

  • http://localhost:8080/geonetwork/
  • http://localhost:8080/intermap/
  • http://localhost:8080/geoserver/

Configurare Mod_JK

Invece di usare il server http di Tomcat (sulla porta 8080) si vuole usare Apache (sulla porta 80), alcuni motivi per farlo sono spiegati nella FAQ. Per farlo è necessario un connector costituito dal modulo Apache Mod_JK.

Come per la maggior parte dei moduli Apache serve una direttiva per caricarlo ed alcune righe di configurazione (in /etc/httpd/conf/httpd.conf):

LoadModule jk_module modules/mod_jk.so
# Configuration for mod_jk.so.
JkWorkersFile /etc/tomcat5/workers.properties
JkLogFile     /var/log/httpd/mod_jk.log
JkShmFile     /var/log/httpd/logs/jk-runtime-status
JkLogLevel    info

Apache - tramite il modulo mod_jk - inoltra la richiesta ricevuta ad una istanza di Tomcat, tale istanza prende il nome di worker.

A noi basta definire un solo worker, lo chiameremo ajp13 perché sarà conforme all'Apache JServe Protocol versione 1.3. Le caratteristiche sono definite in /etc/tomcat5/workers.properties:

workers.tomcat_home=/var/lib/tomcat5/
workers.java_home=/usr/lib/jvm/java

worker.list=ajp13

worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13

Ci si aspetta quindi un'istanza di Tomcat (un server AJP) in ascolto sulla porta 8009 TCP, controllare che in /etc/tomcat5/server.xml esista la relativa sezione <Connector port=“8009” … >.

Configurare Apache

Infine si configura Apache, definendo alcuni alias e collegando le richieste per quelle directory al worker. Per maggiore pulizia si può tenere queste direttive in un file separato /etc/httpd/conf.d/geonetwork.conf:

<IfModule mod_jk.c>
    Alias /geonetwork /usr/local/lib/geonetwork/web/
    JkMount /geonetwork/* ajp13
    Alias /intermap /usr/local/lib/geonetwork/web/
    JkMount /intermap/* ajp13
    Alias /geoserver /usr/local/lib/geonetwork/web/
    JkMount /geoserver/* ajp13
</IfModule>

Con questa configurazione le tre webapp rispondono direttamente agli URL:

  • http://localhost/geonetwork/
  • http://localhost/intermap/
  • http://localhost/geoserver/

L'amministratore di Geonetwork ha per impostazione predefinita username admin e password admin.

Ovviamente non è necessario usare gli script start-geonetwork.sh e stop-geonetwork.sh, che servono ad eseguire il server web Jetty fornito in boundle. Nel nostro caso Jetty andrebbe in conflitto con Tomcat.

Geoserver War

L'installazione di Geonetwork fatta su Apache+Tomcat fornisce anche Geoserver, ma in versione 1.5.3.

Quindi si installa Geoserver 1.7 da geoserver-1.7.1a-war.zip (un web archive non è altro che un archivio zip, in questo caso zippato a sua volta). Il deploy in Tomcat avviene con suffisso /geoserver171a, per non disturbare geoserver 1.5.

mkdir /usr/local/lib/geoserver171a
cd /usr/local/lib/geoserver171a
unzip /root/download/geoserver/geoserver.war
chow -R tomcat:tomcat /usr/local/lib/geoserver171a

Si aggiunge il nuovo contesto Tomcat in /etc/tomcat5/server.xml (sezione <Host>):

<Context path="/geoserver171a"
  docBase="/usr/local/lib/geoserver171a/"
  crossContext="false"
  debug="0"
  reloadable="false" />

Si aggiunge un alias e un connessione a Tomcat in /etc/httpd/conf.d/geoserver171a.conf (configurazione di Apache):

<IfModule mod_jk.c>
    Alias /geoserver171a /usr/local/lib/geoserver171a/
    JkMount /geoserver171a/* ajp13
</IfModule>

Dopo aver riavviato Apache e Tomcat l'applicativo è disponibile ad entrambi gli indirizzi:

  • http://localhost:8080/geoserver171a
  • http://localhost/geoserver171a
tecnica/gps_cartografia_gis/gis_server_centos.txt · Last modified: 2009/05/04 22:36 by niccolo