Table of Contents
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.
- Il test short_open_tag non è affidabile perché fa il test con
get_cfg_var()
invece che conini_get()
. Controllare conphpinfo()
lo stato reale, conviene che sia Off (vedi direttiva inhttpd.conf
). - 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