!!! Installazione Tomcat / Apache  :

! Prerequisiti :

#JDK : l'instalazione del motore Java SE Development Kit (JDK) 6 [installazione java|pagename].
# Download da tomcat.apache.org i binary di tomcat (ad esempio file: apache-tomcat-6.0.18.tar.gz) 
# Apache : versione proposta dal OS (apache2).
# Il connector libapache2-mod-jk si può scaricare [mod_jk|http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/] oppure utilizzare la versione proposta nativamente sal Sistema operativo.\\ Attenzione: il connector di tomcat con apache dipende dal version di apache. 

! Installazione :
# unpack tomcat in /opt/ e rinominare in /opt/tomcat
# Assicurarsi che il connecton mod_jk sia visibile da apache solo nel caso non sia stata utilizzata l'installazione nativa del modulo.

! Tomcat come servizio 
Per attivare tomcat come servizio nel caso di installazione indipendente dal sistema bisogna create il file /etc/init.d/tomcat che implementi i tre comandi fondamentali di servizo (start-stop-restart). Per ubuntu vedere [ubuntu|http://www.wiki.telnext.com/Wiki.jsp?page=Ubuntu] gestione servizi.\\ Lo script di [avvio di tomcat |avviotomcat] può contenere il comando (in fase di start)
%%prettify 
{{{
cat /opt/template/inizio.xml /etc/apache2/conf.d/vhost.xml/*xml /opt/template/fine.xml
> /opt/tomcat/conf/server.xml
}}}
/%
che ricrea il file di configurazione server.xml di tomcat includendo eventuali nuovi siti.\\

Inoltre può contenere le JAVA_OPTS come ad esempio
%%prettify 
{{{
export JAVA_OPTS="-server -Xms512M -Xmx512M -Xss128K"
}}}
/%

! Configurazione :

Script per la configurazione degli host(apache) e dei contesti(tomcat)\\ \\
- creare la directory /home/www/ \\ \\
- Creare la cartella /opt/script/ e creare il file [addvirtual]\\ \\
- creare la cartella /opt/template/ con i seguenti file. Per i file .xml partire dal server.xml (farsene una copia di backup poichè verrà sovrascritto) di default della versione di tomcat che si sta installando.
# inizio.xml
# fine.xml
# template_db2.xml, template_ps.xml,... (la configurazione di questi dipende con quale database si intende fare connessione via jdbc)
# [logrotate.conf]
# [virtual.conf]
# [webalizer.conf]

! Funzionalità Script Addvirtual
Lo script addvirtual crea automaticamente tutte le configurazioni necessarie ad apache (Virtual Host) e a tomcat (context).

__Convenzione: __i file che descrivono al configurazione apache e tomcat vengono creati nelle directory /etc/apache2/conf.d/vhost.d per i virtual host di apache e /etc/apache2/conf.d/vhost.xml per il contesto Tomcat.

Nel dettaglio addvirtual si occupa di :
# creare directoty per sito (/home/www/www.nostrosito.it/htdocs). Necessita della directory skel in /home/www/.
# file configurazione Virtual Host Apache (/etc/apache2/conf.d/vhost.d/www.nostrosito.it.conf)
# file configurazione Context Tomcat (/etc/apache2/conf.d/vhost.xml/nostrosito.it.xml)
# crea utente ftp per gestione sito
# file di configurazione logrotate
# file di configurazione webalizer


L'utilizzo dello script è il seguente :
%%prettify 
{{{
Usage : addvirtual dominio utente nomedatabase tipodatabase (db2,ps,...)
es : addvirtual nostrosito.it webnostrosito nomenostrodb db2
}}}
/%
!! Tomcat

! Files /opt/template/inizio.xml e /opt/template/fine.xml
I due file contengono la parte iniziale e la parte finale del file di configurazione di tomcat server.xml. Il file dipende dalla versione dell'applicatione server perciò è necessario adattare i due file. 

! Files /opt/template/template_XX.xml
Il/I file contengono la definizione dell'Host. Il nome del file e il suo contenuto dipendono principalmente dal tipo di database a cui si intende effettuare una connessione via jdbc. Per vedere i vari parametri messi a disposizione da tomcat per la definizione di un Host si rimanda alla documentazione ufficiale di tomcat.

!!Apache

! Connettore apache-tomcat (mod_jk)

#Procedura manuale (sconsigliata)
##rinominare il connettore scaricato in mod_jk.so e metterlo ad esempio in /usr/lib/apache2/modules/
##editare /etc/apache2/apache2.conf e aggiungere in fondo LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so 
#Procedura automatica: utilizzare gli strumenti che la tua distribuzione linux offre per installare un pacchetto (ad esempio per ubuntu aptitude install libapache2-mod-jk). Verificare che il modulo sia poi presente tra quelli enabled (ad esempio in /etc/apache2/mods-enabled)

A questo punto è necessario configurare:
#[worker.properties] e metterlo in /opt/tomcat/conf
#editare /etc/apache2/apache2.conf e aggiungere 
%%prettify 
{{{
JkWorkersFile "/opt/tomcat/conf/workers.properties"
JkLogFile "/opt/tomcat/logs/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
}}}
/%

Infine per indicare ad apache dove prelevare le definizioni dei VirtualHost occorre editare /etc/apache/apache2.conf e 
%%prettyif
{{{
commentare le seguenti
#Include /etc/apache2/conf.d/[^.#]*
e anche
#Include /etc/apache2/sites-enabled/[^.#]*

aggiungere la seguente

Include /etc/apache2/conf.d/vhost.d/*.conf
}}}
/%

! File [virtual.conf]

Il file contiene la configurazione del virtual host di apache.\\
Nella definizione del VirtualHost si fa riferimento alla variabile 'qui' (al posto di un IP secco o di un nome di dominio) che deve essere settata in /etc/hosts:
%%prettify 
{{{
IPMACCHINA	qui
}}}
/%
\\
Inoltre sempre in /etc/hosts per evitare questo possibile errore in avvio/stop di apache:\\
'could not determine the server's fully qualified domain name using 127.0.0.1 for servername'

aggiungere 
%%prettify 
{{{
127.0.0.1       localhost.localdomain   localhost       NOMEMACCHINA(es mix4)
}}}
/%
NOTA: togliere anche 127.0.1.1 NOMEMACCHINA che di default esiste

!!Webalizer
E' un tool di creazione statistiche web. le relative configurazioni sono comprese nel file /opt/template/[webalizer.conf].\\
Per lanciare l'aggiornamento delle statistiche creare un file in /opt/script/[runstat] da lanciare con un cron tutte i giorni.
 
!!Logrotate 
Tool di rotazione dei file di log access.log ed error.log. La relativa configurazione è compresa nel file [logrotate.conf].

!! Errori o Warning all'avvio di Tomcat o Apache

Se all'avvio di tomcat da un info di questo tipo:\\
17-mar-2008 16.20.08 org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "listeners.ContextListener" is already configured for this context. The duplicate definition has been ignored.\\
17-mar-2008 16.20.08 org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "listeners.SessionListener" is already configured for this context. The duplicate definition has been ignored.\\
Togliere o commentare da:\\
/opt/tomcat/webapps/examples/WEB-INF/web.xml\\
i riferimenti a 
%%prettyif
{{{
 <!--Define example application events listeners//-->
    <listener>
        <listener-class>listeners.ContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>listeners.SessionListener</listener-class>
    </listener>

}}}
/%
Comunque è un baco di tomcat che in qualsiasi web.xml compare un listener cerca di caricarlo 2 volte.
-------------------------------------------------------------
Se in fase di avvio di apache risponde: API module structure `jk_module' in file /usr/lib/apache2/modules/mod_jk.so is garbled - perhaps this is not an Apache module DSO? Vuol dire che il mod_jk installato non è adeguato alla versione di apache... sostituirlo con un connector della versione giusta.
-------------------------------------------------------------
se nell'error.log di apache compare spesso\\ \\

error client 1 Directory index forbidden by Options directive srvwwwhtdocs\\ \\

in /srv/www/htdocs aggiungere un file index.htm\\ \\


Questo sembrerebbe dovuto a:\\ \\

Requests From the Server to Itself
When the Apache HTTP Server manages its child processes, it needs a way to wake up processes that are listening for new connections. To do this, it sends a simple HTTP request back to itself. This request will appear in the access_log file with the remote address set to the loop-back interface (typically 127.0.0.1 or ::1 if IPv6 is configured). If you log the User-Agent string (as in the combined log format), you will see the server signature followed by "(internal dummy connection)" on non-SSL servers. During certain periods you may see up to one such request for each httpd child process. \\ \\

These requests are perfectly normal and you do not, in general, need to worry about them. They can simply be ignored. \\ \\

If you wish to exclude them from your log, you can use normal conditional-logging techniques. For example, to omit all requests from the loopback interface from your logs, you can use \\ \\

SetEnvIf Remote_Addr "127\.0\.0\.1" loopback\\ 
and then add env=!loopback to the end of your CustomLog directive. \\ \\

In 2.2.6 and earlier, in certain configurations, these requests may hit a heavy-weight dynamic web page and cause unnecessary load on the server. You can avoid this by using mod_rewrite to respond with a redirect when accessed with that specific User-Agent or IP address.
-------------------------------------------------------------------------------