<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yo, programador &#187; phpmyadmin</title>
	<atom:link href="http://albertovilches.com/tag/phpmyadmin/feed" rel="self" type="application/rss+xml" />
	<link>http://albertovilches.com</link>
	<description>El pequeño Weblog de Alberto Vilches</description>
	<lastBuildDate>Mon, 30 Aug 2010 08:47:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Debian, Apache 2 y Tomcat 6 usando múltiples dominios, partes 3 y 4</title>
		<link>http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-partes-3-y-4</link>
		<comments>http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-partes-3-y-4#comments</comments>
		<pubDate>Sun, 31 Jan 2010 12:41:29 +0000</pubDate>
		<dc:creator>Alberto Vilches</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://albertovilches.com/?p=829</guid>
		<description><![CDATA[Continuación del tutorial iniciado hace un par de semanas en este mismo blog en: Debian, Apache 2 y Tomcat 6 usando múltiples dominios, parte 1 y 2 (de 4)
Parte 3: Configuración de software
Configurando Apache2 para que funcione con varios dominios (virtual host)
Aunque estemos trabajando inicialmente con una máquina virtual y tenga poco sentido tener varios [...]]]></description>
			<content:encoded><![CDATA[<p>Continuación del tutorial iniciado hace un par de semanas en este mismo blog en: <a href="http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-parte-1-y-2-de-4">Debian, Apache 2 y Tomcat 6 usando múltiples dominios, parte 1 y 2 (de 4)</a></p>
<h1>Parte 3: Configuración de software</h1>
<h2>Configurando Apache2 para que funcione con varios dominios (virtual host)</h2>
<p>Aunque estemos trabajando inicialmente con una máquina virtual y tenga poco sentido tener varios dominios, debemos pensar que es solo un lugar de entrenamiento antes de hacer la instalación en un hosting real accesible desde internet. Lo normal es que queramos instalar varias aplicaciones, y que cada una de ellas sea accesible desde un dominio distinto. Vamos a suponer, por ejemplo, que hemos comprado los siguientes dominios: floristeria.com y guerraespacial.com. Estos dos dominios apuntan al mismo servidor, pero cada uno de ellos deberá tener su propia carpeta de Apache2 con sus contenidos estáticos (html, php, imagenes, etc) y su aplicación Tomcat con un war que desplegar.</p>
<p>Primero vamos a hacer que Apache2 muestre un contenido distinto en función del dominio de entrada que se haya utilizado.</p>
<p>Inicialmente, apache2 solo funciona con un dominio, o más bien, con cualquier dominio y siempre muestra el mismo contenido, lo que haya en la carpeta /var/www. Si vamos a esta carpeta, veremos un simple html con la famosa frase &#8220;It works!&#8221;.</p>
<p>La configuración de apache2 está en /etc/apache2. Nos movemos a esta carpeta y hacemos un ls, y veremos algo así:</p>
<pre>
debian:/etc/apache2# ls -l
total 40
-rw-r--r-- 1 root root 10104 jul 14 22:00 apache2.conf
drwxr-xr-x 2 root root  4096 oct 23 21:16 conf.d
-rw-r--r-- 1 root root   378 jul 14 22:00 envvars
-rw-r--r-- 1 root root     0 oct 23 20:40 httpd.conf
drwxr-xr-x 2 root root  4096 oct 23 20:40 mods-available
drwxr-xr-x 2 root root  4096 oct 23 20:40 mods-enabled
-rw-r--r-- 1 root root   513 jul 14 22:00 ports.conf
drwxr-xr-x 2 root root  4096 oct 23 20:40 sites-available
drwxr-xr-x 2 root root  4096 oct 23 20:40 sites-enabled</pre>
<p>En sites-available es donde se definen todos los sites que existen en la máquina y en sites-enabled es donde están todos los sites que están realmente funcionando ahora mismo. La idea es crear un site por cada dominio en sites-available, y después enlazar dicho site en sites-enabled para habilitarlo. Si quisiéramos deshabilitar temporalmente un site, lo que hacemos es moverlo de sites-enabled a sites-availables sin necesidad de borrarlo. Existen una serie de comandos que nos ayudan mover los sites de sites-enabled a sites-available, por lo que no es necesario hacerlo a mano (aunque podríamos). Estos comandos son:</p>
<pre>
a2ensite nombredelsiteahabilitar
a2dissite nombredelsiteadeshabilitar
</pre>
<p>Más información en: <a href="http://www.debian-administration.org/articles/207">http://www.debian-administration.org/articles/207</a></p>
<p><span id="more-829"></span></p>
<p>Para crear un site debemos hacerlo a mano. Un site no es más que un fichero con la configuración de un virtualhost. Crearemos ahora dos sites (dos ficheros), uno para floristeria.com y otro para guerraespacial.com. Pero antes, prepararemos la carpeta con los contenidos html que deberán servir cada uno. Nos vamos a /var/www y creamos tres directorios default, guerraespacial.com y floristeria.com con estos comandos:</p>
<pre>cd /var/www
mkdir guerraespacial.com
mkdir floristeria.com
mkdir default</pre>
<p>Y movemos el index.html que habia en /var/www a /var/www/default. La carpeta default contiene lo que se servirá cuando se acceda al servidor a través de su ip directamente, o con localhost, o de cualquier otra manera que no sea con un dominio que hayamos definido previamente (en nuestro caso floristeria.com y guerraespacial.com, aunque podríamos tener muchos más).</p>
<pre>mv index.html default</pre>
<p>Tambien vamos a crear un fichero de prueba en cada carpeta para que más tarde podamos comprobar que la configuración es correcta:</p>
<pre>cd /var/www
echo "guerraespacial.com funciona" &gt; guerraespacial.com/index.html
echo "floristeria.com funciona" &gt; floristeria.com/index.html
</pre>
<p>Ahora vamos a modificar la carpeta del site default, que ahora mismo apunta a /var/www para que apunte a /var/www/default. Para ello hacemos lo siguiente: modificamos el fichero /etc/apache2/sites-available/default para que las etiquetas <code>DocumentRoot /var/www</code> y <code>&lt;Directory /var/www&gt;</code> pasen a ser <code>DocumentRoot /var/www/default</code> y <code>&lt;Directory /var/www/default&gt;</code>, respectivamente. Y el resto lo dejamos como está.</p>
<p>Ahora vamos a crear los siguientes ficheros nuevos. Primero creamos /etc/apache2/sites-available/guerraespacial.com.conf con el siguiente contenido:</p>
<pre>
&lt;VirtualHost *:80&gt;
        DocumentRoot "/var/www/guerraespacial.com"
        ServerName guerraespacial.com
        ServerAlias *.guerraespacial.com

        &lt;Directory "/var/www/guerraespacial.com"&gt;
                Options -Indexes FollowSymLinks MultiViews
                allow from all
        &lt;/Directory&gt;

        ErrorLog /var/log/apache2/guerraespacial.com.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/guerraespacial.com.access.log combined
        ServerSignature On

&lt;/VirtualHost>
</pre>
<p>Y ahora creamos /etc/apache2/sites-available/floristeria.com.conf con el siguiente contenido:</p>
<pre>
&lt;VirtualHost *:80&gt;
        DocumentRoot "/var/www/floristeria.com"
        ServerName floristeria.com
        ServerAlias *.floristeria.com

        &lt;Directory "/var/www/floristeria.com">
                Options -Indexes FollowSymLinks MultiViews
                allow from all
        &lt;/Directory&gt;

        ErrorLog /var/log/apache2/floristeria.com.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/floristeria.com.access.log combined
        ServerSignature On

&lt;/VirtualHost&gt;
</pre>
<p>Los dos ficheros son practicamente idénticos, solo cambia el dominio que aceptan como entrada, la carpeta de donde van a coger los recursos estáticos y el nombre de los ficheros de log.<br />
El dominio que aceptan como entrada se define en las etiquetas <code>ServerName</code> y <code>ServerAlias</code>. Estas etiquetas son utilizadas por Apache para averiguar a que site estás intentando acceder desde tu navegador. La carpeta con los recursos que se sirven se define en <code>DocumentRoot</code>.<br />
El * delante del dominio en <code>ServerAlias</code> sirve para que podamos introducir cualquier subdominio, como www.floristeria.com, pedidos.floristeria.com o cualquier subdominio. Si deseáramos tener sites distintos, uno para cada subdominio, lo que haríamos sería crear nuevos ficheros de configuración con otro <code>ServerName</code> y <code>ServerAlias</code> que apuntasen a otro <code>DocumentRoot</code> distinto.<br />
La opción <code>-Indexes</code> en la etiqueta <code>Options</code> hace que <strong>no</strong> se muestre un listado con todos los recursos del directorio actual si no existe un fichero index.html. Esto significa que, por ejemplo, si tenemos una carpeta con solo imagenes y alguien accede a esa carpeta, no se listen todas las imagenes.</p>
<p>Cuando hayamos acabado, activamos los dos sitios (recordad que los hemos creado en sites-available, pero no entrarán en funcionamiento hasta que no exista un enlace simbólico en sites-enabled) y recargamos la configuración de apache con:</p>
<pre>
a2ensite floristeria.com.conf
a2ensite guerraespacial.com.conf
/etc/init.d/apache reload</pre>
<p>Si listamos ahora el contenido de sites-enabled, vemos que están los dos nuevos sitios que hemos creado, apuntando a sites-available.</p>
<pre>ls -l /etc/apache2/sites-enabled
total 0
lrwxrwxrwx 1 root root 26 oct 23 20:40 000-default -&gt; ../sites-available/default
lrwxrwxrwx 1 root root 39 oct 24 15:43 floristeria.com.conf -&gt; ../sites-available/floristeria.com.conf
lrwxrwxrwx 1 root root 42 oct 24 15:44 guerraespacial.com.conf -&gt; ../sites-available/guerraespacial.com.conf
</pre>
<p>Ahora si que podemos abrir un navegador y entrar en las siguientes direcciones, mostrando la página correspondiente a cada una de ellas: http://floristeria.com:8888, http://guerraespacial.com:8888 y http://localhost:8888</p>
<p><a href="http://albertovilches.com/wp-content/uploads/359-412664110f27104f.png"><img class="aligncenter size-full wp-image-832" title="359-412664110f27104f" src="http://albertovilches.com/wp-content/uploads/359-412664110f27104f.png" alt="" width="534" height="255" /></a><a href="http://albertovilches.com/wp-content/uploads/359-412664110f3944a5.png"><img class="aligncenter size-full wp-image-831" title="359-412664110f3944a5" src="http://albertovilches.com/wp-content/uploads/359-412664110f3944a5.png" alt="" width="534" height="255" /></a><a href="http://albertovilches.com/wp-content/uploads/359-412664110f4b78fc.png"><img class="aligncenter size-full wp-image-830" title="359-412664110f4b78fc" src="http://albertovilches.com/wp-content/uploads/359-412664110f4b78fc.png" alt="" width="534" height="255" /></a></p>
<p>Más información en: <a href="http://httpd.apache.org/docs/2.0/mod/core.html#virtualhost">http://httpd.apache.org/docs/2.0/mod/core.html#virtualhost</a></p>
<h2>Situación actual</h2>
<p>Llegados a este punto, deberíamos tener lo siguiente:</p>
<ul>
<li>Dos dominios configurados, cada uno apuntando a su directorio correspondiente.
<ol>
<li>guerraespacial.com apuntando a /var/www/guerraespacial.com</li>
<li>floristeria.com apuntando a /var/www/floristeria.com</li>
</ol>
</li>
<li>El dominio por defecto (entrando a través de la IP o de localhost) debería estar protegido con el usuario y password de /etc/phpmyadmin/htpasswd.setup. Dentro de este dominio, se puede acceder a /phpmyadmin para manipular MySql. Para entrar en phpmyadmin, utilizaremos el login y password que hemos definido durante la instalación de MySql.</li>
</ul>
<h2>Configurando Tomcat 6 para que arranque automáticamente</h2>
<p>Creamos enlaces simbólicos a este fichero en las carpetas rc1.d y rc2.d para que Tomcat se pare y arranque automáticamente cuando se reinicie el sistema:</p>
<pre>
ln -s /usr/sbin/catalina /etc/rc1.d/K99catalina
ln -s /usr/sbin/catalina /etc/rc2.d/S99catalina</pre>
<p>Podemos probar si tomcat para y arranca automáticamente reiniciando el sistema con el comando reboot halt o manualmente parando y arrancando la máquina virtual desde Virtual Box.</p>
<h2>Configurando un host de Tomcat 6 por dominio</h2>
<p>El directorio /usr/local/tomcat/webapps aloja todas las aplicaciones web que vienen preinstaladas con Tomcat en el dominio por defecto &#8216;localhost&#8217;. Cada vez que Tomcat arranca, busca en este directorio carpetas o archivos .war para desplegar y los pone en funcionamiento. Lo que vamos a hacer es crear dos nuevos directorios para aplicaciones y mapearlos para que cada uno de ellos funcionen con cada uno de los dos dominios de ejemplo de este tutorial.<br />
Primero vamos a crear los dos directorios en /var/www con los siguientes nombres guerraespacial.com-webapps y floristeria.com-webapps:</p>
<pre>
cd /var/www
mkdir guerraespacial.com-webapps
mkdir floristeria.com-webapps
</pre>
<p>Cada uno de estos directorios alojara todos los archivos .war o carpetas que deseemos para cada uno de los dominios.</p>
<p>Ahora vamos a crear los dos hosts en la configuración de Tomcat para que apunten a estos dos directorios. Editamos el fichero /usr/local/tomcat/conf/server.xml y buscamos, al final del fichero, el cierre de la ultima etiqueta  y añadimos debajo estas dos entradas  :</p>
<pre>
&lt;Host name="floristeria.com" appBase="/var/www/floristeria.com-webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false"&gt;
&lt;/Host&gt;
&lt;Host name="guerraespacial.com" appBase="/var/www/guerraespacial.com-webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false"&gt;
&lt;/Host&gt;
</pre>
<p>Más información: <a href="http://tomcat.apache.org/tomcat-6.0-doc/config/host.html">http://tomcat.apache.org/tomcat-6.0-doc/config/host.html</a></p>
<p>Vamos a suponer que tenemos, por lo menos, dos aplicaciones web: guerraespacial.war y floristeria.war, cada una con sus JSP, su WEB-INF, etc. una para funcionar dentro de cada dominio (aunque podríamos tener más).<br />
Las subimos del servidor físico a la máquina virtual mediante scp, copianda cada archivo war a su carpeta correspondiente. Scp es un sistema de subida y bajada de archivos seguro que funciona mediante ssh (por lo que debemos utilizar el puerto 2222 solo si estamos trabajando con la máquina virtual, si es un servidor real en un hosting, usaremos el puerto por defecto 22). Para Windows puedes usar el WinSCP (bajándotelo desde http://sourceforge.net/projects/winscp/ y para MacOS/Linux, puedes usar los siguientes comando:</p>
<pre>scp -P 2222 guerraespacial.war root@localhost:/var/www/guerraespacial.com-webapps
scp -P 2222 floristeria.war root@localhost:/var/www/floristeria.com-webapps</pre>
<p>Ahora tenemos dos arhivos war, cada uno de ellos dentro de su carpeta correspondiente. El nombre de cada archivo war es el nombre de su contexto, por lo que al haberlos copiado con los nombres guerraespacial.war y floristeria.war significa que para entrar en la aplicación, deberemos utilizar las siguientes ruta: http://guerraespacial.com:9999/guerraespacial y http://floristeria.com:9999/floristeria . Para evitar esto, lo que hacemos es renombrar los dos archivos war con el nombre ROOT.war quedando de la siguiente forma (podemos renombrarlos directamente con WinSCP, o desde la línea de comandos con mv floristeria.war ROOT.war y mv guerraespacial.war ROOT.war</p>
<pre>/var/www/floristeria.com-webapps/ROOT.war
/var/www/guerraespacial.com-webapps/ROOT.war
</pre>
<p>El nombre ROOT es un nombre especial para Tomcat que equivale a decir que el contexto de la aplicación es &#8220;/&#8221;, o lo que es lo mismo, que no necesitamos ir a ningún directorio para ver la aplicación ya que está instalada en la raíz.</p>
<p>Vamos a comprobar que hemos creado los hosts correctamente y desplegado bien las aplicaciones. Primero reiniciamos tomcat con</p>
<pre>catalina stop
catalina start</pre>
<p>Y abrimos un navegador para ver las siguientes direcciones http://guerraespacial.com:9999 y http://floristeria.com:9999<br />
Si deseáramos instalar más aplicaciones en cada uno de los dos dominios, tan solo tendríamos que copiarlas a sus respectivos directorios y Tomcat las desplegará automáticamente.</p>
<h2>Conectando Apache a Tomcat 6</h2>
<p>El escenario actual es que tenemos, por un lado Apache 2, corriendo por el puerto 80, y por otro lado Tomcat 6, corriendo por el puerto 8080. La idea es utilizar los dos servidores a la vez de la siguiente manera: todas las peticiones http serán recibidas por Apache, el cual redirigirá a Tomcat 6 las peticiones solo si es necesario. Los beneficios que este sistema dual de servidores ofrece son:</p>
<ul>
<li>Apache sirve, entre otras cosas, páginas php, por lo que podemos instalar un wiki, un blog o phpMyAdmin en el mismo servidor (también cgis, perl, python)</li>
<li>Apache ofrece modulos y plugins muy iteresantes como mod_rewrite, mod_alias, realms</li>
<li>Apache puede actuar como un balancedor de peticiones entre múltiples tomcats. Piensa que puedes tener varios Tomcat instalados en varias máquinas, y Apache puede redirigir las peticiones a todos ellos de una manera balanceada. Si un Tomcat se cayera, Apache lo detectaría y dejaría de enviarle peticiones solo a ese Tomcat y seguiría usando el resto, por lo que no habría una perdida de servicio.</li>
</ul>
<p>Lo primero que debemos hacer es activar los modulos proxy, proxy_ajp y proxy_balancer y reiniciar Apache 2, con los siguientes comandos:</p>
<pre>
a2enmod proxy
a2enmod proxy_ajp
a2enmod proxy_balancer
/etc/init.d/apache2 restart
</pre>
<p>AJP13 es un protocolo de comunicación interno y muy rápido que utiliza Apache para comunicarse con Tomcat usando conexiones TCP persistentes. El puerto por defecto de Tomcat por el que se accede a este servicio es el 8009 (puedes ver los puertos de Tomcat y cambiarlos en el fichero /usr/local/tomcat/conf/server.xml)</p>
<p>Más información: <a href="http://tomcat.apache.org/connectors-doc-archive/jk2/common/AJPv13.html">http://tomcat.apache.org/connectors-doc-archive/jk2/common/AJPv13.html</a></p>
<p>Editaremos el fichero /etc/apache2/sites-enabled/guerraespacial.com.conf y /etc/apache2/sites-enabled/floristeria.com.conf y le añadiremos el siguiente fragmento (el mismo fragmente a los dos ficheros sirve) dentro de la sección <code>&lt;VirtualHost&gt;</code> :</p>
<pre>
&lt;Proxy balancer://tomcat_cluster&gt;
        Order allow,deny
        Allow from all
        BalancerMember ajp://localhost:8009
&lt;/Proxy&gt;
ProxyPreserveHost On
ProxyPass        / balancer://tomcat_cluster/
ProxyPassReverse / balancer://tomcat_cluster/
</pre>
<p>Y reiniciamos tomcat con:</p>
<pre>
/etc/init.d/apache2 restart
</pre>
<p>En este momento, ya podemos entrar en nuestras aplicaciones a través de Apache: http://guerraespacial.com:8888 y http://floristeria.com:8888 (o directamente por el puerto 80 si estamos ante un servidor real en un hosting).</p>
<p>La etiqueta <code>&lt;Proxy balancer://tomcat_cluster&gt;</code> se encarga de definir un conjunto de servidores a los que redirigir las peticiones, dandoles un nombre de cluster, que puede ser cualquiera (en el ejemplo se ha utilizado &#8220;tomcat_cluster&#8221;, pero podríamos haber elegido cualquiera). Dentro de la definición del Proxy, la etiqueta BalanceMember define cuales son los miembros del cluster. En este caso solo tenemos uno, por lo que solo hay una entrada de BalanceMember, pero si tuvieramos varios nodos más en cluster, tan solo tendríamos que añadir más líneas BalanceMember, indicando el protocolo, host y puerto de cada una de ellas. Ahora el host es localhost, pero hay que tener en cuenta que podríamos tener un cluster con los nodos repartidos en varias máquinas distintas, por lo que en vez de localhost, habría que poner una ip (o el nombre del host). En cuanto al protocolo, si utilizamos ajp el puerto es 8009, y si usamos http el puerto es el 8080 (de nuevo, la definición de puertos de Tomcat se puede ver y cambiar en el fichero /usr/local/tomcat/conf/server.xml)</p>
<p>Las etiquetas <code>ProxyPass</code> y <code>ProxyPassReverse</code> indican a Apache a partir de que ruta debe redirigir las peticiones (en este caso a partir de la raiz, por eso se indica &#8220;/&#8221;) y a donde deben redirigirse, en este caso al balanceador con el nombre que le hemos dado. Finalmente, la etiqueta <code>ProxyPreserveHost On</code> mantiene la cabecera http host original, en vez de reescribirla.</p>
<p>Un apunte muy interesante es que si queremos que una carpeta concreta no pase por el proxy y, por lo tanto, no sea gestionada por Tomcat, sino que la sirva Apache, lo podemos hacer con esta etiqueta: <code>ProxyPass /ruta !</code></p>
<h2>Resumen de configuración</h2>
<p>Este es el estado final que podría tener el fichero de /etc/apache2/sites-enabled/guerraespacial.com.conf (el fichero floristeria.com.conf sería muy parecido):</p>
<pre>
&lt;VirtualHost *:80&gt;
        DocumentRoot "/var/www/guerraespacial.com"
        ServerName guerraespacial.com
        ServerAlias *.guerraespacial.com

        &lt;Directory "/var/www/guerraespacial.com"&gt;
                Options -Indexes FollowSymLinks MultiViews
                allow from all
        &lt;/Directory&gt;

        &lt;Proxy balancer://tomcat_cluster&gt;
                Order allow,deny
                Allow from all
                BalancerMember ajp://localhost:8009
        &lt;/Proxy&gt;
        ProxyPreserveHost On
        ProxyPass        /css/ !
        ProxyPass        /images/ !
        ProxyPass        /js/ !
        ProxyPass        / balancer://tomcat_cluster/
        ProxyPassReverse / balancer://tomcat_cluster/

        ErrorLog /var/log/apache2/guerraespacial.com.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/guerraespacial.com.access.log combined
        ServerSignature On

&lt;/VirtualHost&gt;
</pre>
<p>Con este ejemplo final, vemos que las peticiones que se hagan a los recursos /images/*, /js/* y /css/* serán servidos por Apache, por lo que serán buscados en la ruta que se haya especificado en <code>DocumentRoot "/var/www/guerraespacial.com"</code>. El resto de recursos serán servidor por Tomcat, ya que la etiqueta <code>ProxyPass / balancer://tomcat_cluster/</code> lo especifica claramente.</p>
<p>A partir de este punto, podemos hacer algunas modificaciones interesantes, ya que podemos cambiar el <code>DocumentRoot</code> para que apunte al directorio donde está nuestra aplicación Web. De esta manera, tendríamos un único directorio que será utilizado por Apache 2 y Tomcat a la vez, tan solo especificando que directorios se deben servir por Tomcat (por defecto todos) y cuales por Apache (indicando que <strong>no</strong> los sirva Tomcat con <code>ProxyPass /directorio !</code>). Por ejemplo:</p>
<pre>
&lt;VirtualHost *:80;&gt;
        DocumentRoot "/var/www/guerraespacial.com-webapps/ROOT"
...
        ProxyPass        /css/ !
        ProxyPass        /images/ !
        ProxyPass        /js/ !

        ProxyPass        / balancer://tomcat_cluster/
        ProxyPassReverse / balancer://tomcat_cluster/
&lt;/VirtualHost&lt;&gt;
</pre>
<p>Más información<br />
<a href="http://httpd.apache.org/docs/2.1/mod/mod_proxy.html#proxypass">http://httpd.apache.org/docs/2.1/mod/mod_proxy.html#proxypass</a>, <a href="http://httpd.apache.org/docs/2.1/mod/mod_proxy.html#proxypassreverse">http://httpd.apache.org/docs/2.1/mod/mod_proxy.html#proxypassreverse</a>, <a href="http://httpd.apache.org/docs/2.1/mod/mod_proxy.html#proxypreservehost">http://httpd.apache.org/docs/2.1/mod/mod_proxy.html#proxypreservehost</a>, <a href="http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html">http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html</a></p>
<p><a href="http://blog.indigio.com/index.php/2007/12/06/easier-production-releases/">http://blog.indigio.com/index.php/2007/12/06/easier-production-releases/</a>, <a href="http://bliki.rimuhosting.com/space/knowledgebase/linux/miscapplications/ruby+on+rails">http://bliki.rimuhosting.com/space/knowledgebase/linux/miscapplications/ruby+on+rails</a>, <a href="http://docs.codehaus.org/display/JETTY/Configuring+AJP13+Using+mod_jk">http://docs.codehaus.org/display/JETTY/Configuring+AJP13+Using+mod_jk</a></p>
<h1>Parte 4: Seguridad</h1>
<h2>Bloqueando accesos inseguros a phpMyAdmin</h2>
<p>Por defecto, phpMyAdmin se autoconfigura con Apache para que funcione en el directorio virtual /phpmyadmin de cualquier host, ya que se configura con un Alias a nivel global, afectando a todos los dominios. Esto significa que, tanto si entramos en http://localhost:8888/phpmyadmin/  como si usamos cualquier otro dominio, podemos entrar en la aplicación phpMyAdmin. (En realidad ahora no es posible entrar en phpMyAdmin desde cualquier dominio, ya que los dominios  guerraespacial.com y floristeria.com de las partes anteriores del tutorial están configurados para redirigir cualquier petición a partir de &#8220;/&#8221; hacia Tomcat, por lo que el recurso /phpmyadmin también lo intentará servir Tomcat, pero no funcionará.)<br />
Pero supongamos que creamos nuevos dominios en Apache para servir contenidos estáticos o php, estos nuevos dominios tendrían accesible phpMyAdmin a traves de la dirección /phpmyadmin. Y nosotros no queremos eso, solo queremos que phpMyAdmin sea accesible a través de la IP o a través de localhost, es decir, a través del dominio por defecto, pero nunca a través de cualquier otro dominio o site que hayamos configurado en el sistema.</p>
<p>Así que vamos a hacer lo siguiente. Editamos el fichero /etc/apache2/conf.d/phpmyadmin.conf y comentamos la siguiente línea (comentar significa ponerle el caracter # delante para que Apache la ignore):</p>
<pre>
# Alias /phpmyadmin /usr/share/phpmyadmin
</pre>
<p>De paso, también podemos quitar la documentación de apache, que es accesible desde cualquier dominio a través de la carpeta virtual /manual. Para ello, editamos el fichero /etc/apache2/conf.d/apache2-doc y comentamos la primera línea:</p>
<pre>
# Alias /manual /usr/share/doc/apache2-doc/manual/
</pre>
<p>Ahora, para añadir phpMyAdmin solo al site por defecto (al que se accede cuando no usamos un dominio, solo la IP o localhost), editamos el fichero /etc/apache2/sites-available/default y añadimos las dos líneas del fichero anterior que acabamos de comentar dentro de la etiqueta <code>&lt;VirtualHost *:80&gt;</code>:</p>
<pre>
&lt;VirtualHost *:80&gt;
ServerAdmin webmaster@localhost
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /manual /usr/share/doc/apache2-doc/manual/
....
</pre>
<p>De esta manera, la definicion de la carpeta virtual /phpmyadmin (y de /manual) solo tiene efecto dentro del virtual host por defecto, el que no tiene asociado ningún nombre de dominio. Ahora solo es posible entrar en phpmyadmin a los que conozcan la IP. En el caso de que estemos trabajando con una máquina virtual, solo es accesible a través de localhost, pero si fuera un servidor real en un hosting, sería la IP pública de la máquina que nos han asignado. Cualquiera que conozca la IP (o que la adivine de casualidad) y acceda al directorio phpmyadmin, podrá acceder a nuestra base de datos (siempre que conozca el login y password de mysql).</p>
<h2>Protegiendo con password realm el virtual host por defecto</h2>
<p>El virtual host por defecto es aquel al que entramos cuando accedemos al Apache de la máquina usando un dominio o IP que todavía no hemos configurado como virtual host. Este acceso a través de IP debería estar restringido solamente al administrador de la máquina, pues ahí es donde se instalan las aplicaciones de gestión, como phpMyAdmin. Podemos bloquear con una contraseña cualquier acceso al virtual host por defecto. Así, cualquier que intente acceder a cualquier recurso o carpeta usando solo la IP (o localhost) le pedirá login y password.</p>
<p>Para ello, vamos a crear un acceso protegido, editando el fichero /etc/apache2/sites-available/default y añadiendo el siguiente fragmento:</p>
<pre>
&lt;Location /&gt;
       AuthName "Prohibido pasar"
       AuthType Basic
       AuthUserFile /etc/apache2/htpasswd.setup
       Require Valid-user
&lt;/Location&gt;
</pre>
<p>Con esto hacemos que cualquier acceso a partir de &#8220;/&#8221;, es decir, a partir de la raiz, lo que abarca a todos los recursos y directorios del host, utilice el login y password situados en el fichero de configuración /etc/apache2/htpasswd.setup. Si solo quisiéramos proteger un directorio determinado, bastaría con cambiar la etiqueta <code>&lt;Location / &gt;</code> por <code>&lt;Location /directorio &gt;</code></p>
<p>Ahora lo que hacemos es crear ese fichero con el login y password que deseemos con el siguiente comando:</p>
<pre>
htpasswd -c /etc/apache2/htpasswd.setup usuario
</pre>
<p>Cambiamos la palabra <code>usuario</code> por el login que deseamos utilizar para autenticarnos. Nos pedirá después la password dos veces, y creará el fichero /etc/apache2/htpasswd.setup con el usuario y la clave. Recargamos la configuración de Apache2 con /etc/init.d/apache2 reload</p>
<p>Ahora podemos intentar entrar en el host por defecto, por ejemplo, http://localhost:8888/phpmyadmin/ y ver que para entrar, nos pedirá el login y password que acabamos de crear.</p>
<h2>Fin</h2>
<p>Y con esto finaliza el tutorial. Todavía es posible introducir más seguridad en nuestro servidor, pero no es mi objetivo (en parte porque no soy un experto en seguridad ni de lejos). Como recomendación final diría que se debe intentar siempre tener el sistema operativo actualizado para evitar que nadie explote cualquier agujero de seguridad, revisar los accesos en los ficheros de logs para detectar intrusiones, no tener password débiles (números, letras, simbolos y con más de 10 caracteres, y cambiarlas de vez en cuando), usar certificados para entrar por ssh, bloquear el acceso a todas las IPs menos a un cierto número determinado de confianza, sentido común y un poco de suerte. Hay una gran cantidad de blogs y documentación sobre seguridad en internet.</p>
<p>Espero que haya sido de utilidad: y si te ha gustado o te ha servido, un comentario siempre se agradece. :)</p>
<img src="http://albertovilches.com/?ak_action=api_record_view&id=829&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-partes-3-y-4/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Debian, Apache 2 y Tomcat 6 usando múltiples dominios, parte 1 y 2 (de 4)</title>
		<link>http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-parte-1-y-2-de-4</link>
		<comments>http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-parte-1-y-2-de-4#comments</comments>
		<pubDate>Mon, 04 Jan 2010 22:27:37 +0000</pubDate>
		<dc:creator>Alberto Vilches</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[virtual box]]></category>

		<guid isPermaLink="false">http://albertovilches.com/?p=817</guid>
		<description><![CDATA[Presentación
Hace ya bastante tiempo que administro varias máquinas Linux con la misma configuración: Debian, Apache2, Tomcat 6,  MySql y varios dominios con virtual host. Como casi todo el mundo, tengo en varios sitios apuntado desde direcciones con artículos sobre como instalar algunas cosas, comandos más útiles, hasta scripts típicos que siempre utilizo. Como a veces pasa [...]]]></description>
			<content:encoded><![CDATA[<h1>Presentación</h1>
<p>Hace ya bastante tiempo que administro varias máquinas Linux con la misma configuración: Debian, Apache2, Tomcat 6,  MySql y varios dominios con virtual host. Como casi todo el mundo, tengo en varios sitios apuntado desde direcciones con artículos sobre como instalar algunas cosas, comandos más útiles, hasta scripts típicos que siempre utilizo. Como a veces pasa mucho tiempo hasta que vuelvo a tocar o a instalar un nuevo entorno, siempre tengo que tirar de internet buscando tutoriales o guías, así que, harto de leer siempre la información de otros para hacer siempre las mismas tareas simples (instalar, configurar, parar y arrancar), he decidido crear mi propia guía donde reúna toda esa información que siempre utilizo, de una manera que pudiera leerse como un tutorial, con pasos y explicando las cosas con detalle.</p>
<p>El hecho de escribir este tutorial me sirve a mí mismo para afianzar mis propios conocimientos, además de poder leerlo cuando quiera sin necesidad de buscar en internet casi todas las cosas. Para que el tutorial lo pudiese leer y practicar cualquiera sin necesidad de usar una máquina real, lo he adaptado a una máquina virtual en Virtual Box. Además, le he dado formato, lo he corregido y lo he probado (es decir, cuando he acabado de hacerlo, lo he seguido al pie de la letra de principio a fin). Y ahora lo comparto con quien quiera que le pueda interesar. Como es un poco largo, lo publicaré en dos posts, uno ahora y otro la semana que viene. ¡Espero que le sea útil a alguien!</p>
<h1>Introducción</h1>
<p>El objetivo del tutorial es explicar como hacer una instalación y configuración de un servidor Linux con Debian 5, MySql, Apache 2 y Tomcat 6 desde cero. Para hacerlo más práctico y parecido a una posible configuración real, vamos a suponer los siguientes puntos:</p>
<ul>
<li>Que tenemos dos dominios ficticios llamados guerraespacial.com y floristeria.com.</li>
<li>Que tenemos dos aplicaciones web java (war), una para cada dominio.</li>
<li>Que queremos acceder a cada aplicación a través de su propio dominio.</li>
<li>Que estas aplicaciones usan MySql, y así que para administrar la base de datos usaremos phpMyAdmin, por lo que necesitaremos Apache con php5.</li>
<li>Que queremos usar Apache 2 para servir contenidos estáticos (css, javascript, imágenes&#8230;) y como frontal para balancear Tomcat 6</li>
<li>Y que queremos darle un mínimo de seguridad al sistema.</li>
</ul>
<p>La instalación de Debian la haremos en una máquina virtual creada con Virtual Box. Es decir, en vez de utilizar un servidor real (de un hosting dedicado que hayamos contratado o un servidor de la oficina, por ejemplo), utilizaremos Virtual Box para crear una máquina ficticia en la que instalaremos Debian 5. De esta manera conseguiremos aprender a realizar todo el proceso de instalación sin necesidad de tener acceso real a un servidor, lo que nos ayuda a practicar de una manera mucho más segura, pues si se comenten errores en una máquina virtual, no pasa absolutamente nada. Además, al usar Virtual Box como software de virtualización, el único requisito para seguir el tutorial es tener Windows, Linux o Mac, pues funciona en todos estos sistemas operativos y, además, es gratuito y de código abierto (no hay excusas)</p>
<p>El tutorial se compone de las siguientes partes:</p>
<p><strong>Parte 1: Creación de una máquina virtual Linux con Virtual Box e instalación de Debian 5</strong></p>
<p>Descarga de Virtual Box y Debain 5<br />
Creación de máquina virtual.<br />
Instalación de Debian 5.0 (lenny) en la máquina virtual.<br />
Apertura de puertos http y ssh en Virtual Box con nat.<br />
Instalación de ssh.<br />
Configuración de dominios en el dns local (etc/host) para que apunten a la máquina virtual</p>
<p><strong>Parte 2: Instalación de software</strong><br />
Actualización del sistema. Instalación de Apache 2, MySql, phpMyAdmin, JDK6 y Tomcat 6 en Debian 5.</p>
<p><strong>Parte 3: Configuración de software</strong></p>
<p>Configurando Apache2 para que funcione con varios dominios (virtual hosts)<br />
Configurando Tomcat 6 para que arranque automáticamente (scripts)<br />
Configurando un host de Tomcat 6 por dominio (en config.xml)<br />
Conectando Apache a Tomcat 6 (con mod_proxy)</p>
<p><strong>Parte 4: Seguridad</strong></p>
<p>Bloqueando accesos inseguros a phpMyAdmin<br />
Protegiendo con password realm el virtual host por defecto</p>
<p>Se puede hacer el tutorial sin Virtual Box en una máquina real, instalando Debian 5 desde cero tambien, o desde un hosting (dedicado o VPS) mientras tengamos acceso completo al servidor. En este caso, deberíamos empezar por la parte 2, ignorando la parte 1 que trata sobre la creación de la máquina virtual con Virtual Box. Además, tener en cuenta que se deben usar siempre los puertos reales del servidor, y no los que se han mapeado en Virtual Box.<br />
<span id="more-817"></span></p>
<h1>Parte 1: Creación de máquina virtual e instalación de Debian 5</h1>
<h2>Descarga de Virtual Box y Debian 5</h2>
<p>Primero descargar el software de virtualizacion de Sun (en el momento de este post, la versión 3.0.8) de esta dirección: <a href="http://www.virtualbox.org/wiki/Downloads">http://www.virtualbox.org/wiki/Downloads</a></p>
<p>Después nos bajaremos la última versión de Debian de aquí: (en el momento de este post, la versión 5.0 &#8220;lenny&#8221;): <a href="http://www.debian.org/releases/">http://www.debian.org/releases/</a><br />
Podemos optar por bajarnos las ISOs en tamaño CD o DVD. En mi caso solo me bajo el primer DVD.</p>
<h2>Creación de la máquina virtual</h2>
<ol>
<li>Instalamos Virtual Box y lo arrancamos.</li>
<li>Después, creamos una nueva maquina virtual con el nombre &#8220;MiDebian&#8221;, de tipo Linux y version Debian.</li>
<li>Le asignamos 256Mb de Ram (o 512Mb, si queremos que vaya un poco más rapido)</li>
<li>Le creamos un disco duro nuevo de tipo &#8220;expansión dinámica&#8221; de 8Gb de tamaño (realmente no ocupará 8Gb, sino que ocupará mucho menos: el disco duro irá creciendo a medida que se vaya necesitando, hasta los 8Gb. Podemos asignarle más si lo deseamos).</li>
</ol>
<h2>Instalación de Debian 5.0 (lenny) en la máquina virtual</h2>
<ol>
<li>Una vez creada la máquina virtual, hacemos click en &#8220;Configuración&#8221; y en CD/DVD-Rom montamos una unidad a partir de la ISO que nos hemos descargado (ya sea la versión Netinst de 180Mb, un CD normal o un DVD). En mi caso, usaré la versión DVD, de la que solo tengo la primera imagen.</li>
<li>Arrancamos la máquina virtual &#8220;MiDebian&#8221;, la cual arrancará desde el CD/DVD que hemos montado.</li>
<li>Nos mostrará un menú en el que elegiremos la primera opción: &#8220;Install&#8221;.</li>
<li>Después seleccionamos el idioma, el país y el teclado que más nos guste.</li>
<li>Le damos un nombre a la máquina: &#8220;debian&#8221; (el que viene por defecto).</li>
<li>Nombre de dominio: virtual (o el que queramos)</li>
<li>Tipo de particionado de discos: guiado &#8211; utilizar todo el disco (la primera opción) y dejar todas las opciones por defecto hasta que nos pregunte si &#8220;desea escribir los cambios en el disco&#8221;, donde le decimos que si.</li>
<li>Nos preguntará la password 2 veces para el superusuario (root), introducimos la que más nos guste.</li>
<li>Después nos preguntará el nombre completo y el nombre de usuario para crear un usuario normal distinto al de root. En mi caso pondré &#8220;avilches&#8221; y le asignaré otra password distinta.</li>
<li>Si nos hemos bajado más CDs o DVDs, podemos analizarlos para que el gestor de paquetes los tenga en cuenta durante el resto de la instalación. En mi caso solo me he bajado el primer DVD, así que no analizaré más. Tampoco analizaré la red para la réplica de paquetes.</li>
<li>En la selección de programas, elegimos &#8220;Servidor de web&#8221;, &#8220;Base de datos SQL&#8221; y &#8220;Sistema estándar&#8221;. Podemos marcar más, mientras que dejemos desmarcado &#8220;Entorno de escritorio&#8221;, ya que no queremos instalar el entorno gráfico para poder emular fielmente a un servidor real.</li>
<li>A la pregunta sobre si deseas instalar GRUB, respondemos que si.</li>
<li>Al finalizar la instalación, desmontamos la unidad (en el menú Dispositivos, opción Desmontar CD/DVD Rom) y pulsamos aceptar para reiniciar.</li>
</ol>
<h2>Apertura de puertos con http y ssh en Virtual Box con nat</h2>
<p>Por defecto, la configuración de red de Virtual Box viene definida como NAT, lo que significa que la máquina virtual está inaccesible desde fuera de Virtual Box mientras no establezcamos una ruta desde un puerto local de la máquina física a un puerto de la máquina virtual.</p>
<p>Sin embargo, nosotros queremos entrar en la máquina virtual desde fuera, por lo menos por http, para ver el servidor web, y por ssh, para poder abrir varias sesiones de administración sin tener que usar la propia consola principal de Virtual Box, donde es más dificil copiar y pegar comandos, etc.</p>
<p>Para hacer esto, abriremos tres  puertos en la máquina física: el 8888 y 9999 para http; y el 2222 para ssh. Los enrutaremos a los puertos 80 y 8080 para http y 22 para ssh de la máquina virtual (80 es para Apache y 8080 es para Tomcat).</p>
<p>Abrimos una consola o terminal (simbolo del sistema en Windows) y nos situamos en la carpeta de instalación si estamos en Windows:</p>
<pre>cd "C:\Archivos de programa\Sun\VirtualBox"</pre>
<p>Y si estamos en MacOs:</p>
<pre>cd /Applications/VirutalBox.app/Contents/MacOS</pre>
<p>Ejecutamos:</p>
<pre>VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2222
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/HostPort" 8888
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort" 80
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/Protocol" TCP
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/tomcat/HostPort" 9999
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/tomcat/GuestPort" 8080
VBoxManage setextradata MiDebian "VBoxInternal/Devices/pcnet/0/LUN#0/Config/tomcat/Protocol" TCP</pre>
<p>(<em>MiDebian </em>es el nombre de la máquina virtual que le hemos dado al crearla. Si tu máquina virtual tiene otro nombre, cámbiaselo)<br />
El resultado de estos comandos es que ahora, si lanzámos un navegador desde nuestra máquina física y ponemos http://localhost:8888 o http://localhost:9999 en realidad estamos navegando por el servidor web o el servidor Tomcat de la máquina virtual, situados en el puerto 80 y 8080, respectivamente. Lo mismo sucede con el ssh, si abrimos un sessión ssh al puerto 2222 de localhost en la máquina física, en realidad estamos abriendo la sesión ssh en la máquina virtual por el puerto 22. Pero todavía no funcionará ya que ni Tomcat ni el demonio ssh están instalado todavía en la máquina virtual (aunque el servidor web Apache 2 si, por lo que podemos probar a navegar por http://localhost:8888 y ver el mensaje &#8220;It works&#8221;!).</p>
<p>Un requisito imprescindible para que VirtualBox reconozca las modificaciones de enrutado hechas con el comando VBoxManage es que se haga un reinicio completo del programa, así que este es un buen momento para cerrar VirtualBox y volverlo a arrancar antes de continuar.</p>
<p>Más información en: <a href="http://mydebian.blogdns.org/?p=148">http://mydebian.blogdns.org/?p=148</a></p>
<h2>Instalación de SSH</h2>
<p>Una vez reiniciado, entramos con nuestro usuario de root y su contraseña en nuestra recien instalada Debian en nuestra máquina virtual. Si tecleamos uname -a nos devolverá un mensaje como el que sigue:</p>
<pre>Linux debian 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686 GNU/Linux</pre>
<p>Instalamos SSH con el siguiente comando:</p>
<pre>apt-get install openssh-server</pre>
<p>Una vez instalado, para ver si se ha instalado y esta funcionando, intentamos conectarnos desde el siguiente comando:</p>
<pre>ssh localhost</pre>
<p>Si nos permite la conexión, es que todo funciona correctamente (podemos cancelar el comando con ctrl+c).<br />
Y para comprobar si es accesible desde fuera de la máquina virtual, podemos:<br />
Desde Mac o Linux, con el comando ssh -p 2222 localhost<br />
Desde Windows, con un cliente ssh (por ejemplo, putty en windows), usando como host localhost y el puerto 2222.</p>
<p>Deberíamos conseguir entrar con nuestro usuario root y nuestra password tal y como entramos directamente en la máquina virtual.</p>
<p>Descargar putty (cliente ssh para Windows) en: <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a><br />
Más información <a href="http://richieblog.wordpress.com/2008/11/05/como-configurar-ssh-en-debian/">http://richieblog.wordpress.com/2008/11/05/como-configurar-ssh-en-debian/</a></p>
<h2>Configurando los dominios para que apunten a la máquina virtual en el dns local</h2>
<p>Estamos configurando un servidor web dentro de una máquina virtual, y no en un servidor real que nos ofrece un proveedor de hosting, por lo que, ahora que hemos creado los dos sites y configurado todas las carpetas, antes de abrir nuestro navegador para probar si todo funciona, tenemos que simular que los dominios floristeria.com y guerraespacial.com no están en internet, sino que están en nuestro propio ordenador, dentro de la máquina virtual.</p>
<p>Modificamos el fichero hosts de nuestro ordenador físico (fuera de la máquina virtual) que en Windows está en:</p>
<pre>C:\WINDOWS\system32\drivers\etc\hosts</pre>
<p>Y en Linux o MacOs está en:</p>
<pre>/etc/hosts</pre>
<p>Y le añadimos la siguiente línea al final:</p>
<pre>127.0.0.1  floristeria.com www.floristeria.com guerraespacial.com www.guerraespacial.com</pre>
<p>Esto hace que cuando utilicemos el navegador de nuestro ordenador y vayamos a cualquiera de esas direcciones, en vez de buscar en el dns de nuestro ISP para ver en que lugar de internet están dichos dominios, se vaya directamente a la ip 127.0.0.1, que es la ip local de nuestro ordenador (y cuyos puerto 8888 y 9999 están enrutado a la máquina virtual).</p>
<h1>Parte 2: Instalación de software</h1>
<h2>Antes de empezar, actualizar</h2>
<p>Lo primero que tenemos que hacer siempre nada más instalar una nueva versión, y también de vez en cuando para mantener el sistema al día de parches de seguridad, es actualizar el sistema operativo a la última versión con el siguiente comando:</p>
<pre>apt-get update &amp;&amp; apt-get upgrade &amp;&amp; apt-get dist-upgrade</pre>
<h2>Apache2</h2>
<p>Aunque Apache2 debería venir ya instalado, podemos saber si está instalado tecleando apache2 -version, lo que nos debería mostrar un mensaje como el siguiente</p>
<pre>Server version: Apache/2.2.9 (Debian)
Server built:    Jul 14 2009 20:03:28</pre>
<p>Si no estuviera instalado (cosa rara), tecleamos apt-get install apache2. Podemos probar que funciona si accedemos desde un navegador a localhost:8888 si es una máquina virtual. O si es un hosting, debería estar accesible desde la ip de la máquina en el puerto 80 (o sin puerto, ya que en los navegadores, el puerto 80 es el puerto por defecto y no hace falta indicarlo).</p>
<p>Parar y arrancar apache2 es tan facil como:</p>
<pre>/etc/init.d/apache2 status
/etc/init.d/apache2 start
/etc/init.d/apache2 stop
/etc/init.d/apache2 restart
/etc/init.d/apache2 reload</pre>
<h2>MySql y phpMyAdmin</h2>
<p>Tecleamos apt-get install phpmyadmin. Si nos sale un menú preguntándonos qué servidor http queremos configurar, elegimos apache2<br />
Tecleamos apt-get install mysql-server. Nos pedirá una password de root de MySql (no confundir con la password de root del sistema).</p>
<p>Los comandos para parar, arrancar, reiniciar MySql son:</p>
<pre>/etc/init.d/mysql status
/etc/init.d/mysql stop
/etc/init.d/mysql start
/etc/init.d/mysql restart</pre>
<p>Para probar phpMyAdmin, abrimos un navegador apuntando a http://localhost:8888/phpmyadmin si es una máquina virtual, o a http://tudominio/phpmyadmin si es un servidor en un hosting.</p>
<h2>Instalación del JDK6</h2>
<p>Modificamos el fichero /etc/apt/sources.list y le añadimos estas dos líneas al final:</p>
<pre>deb http://ftp.us.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.us.debian.org/debian/ lenny main contrib non-free</pre>
<p>Y tecleamos los siguientes comandos para que reconozca este nuevo repositorio:</p>
<pre>apt-get update
apt-get install sun-java6-jdk</pre>
<p>Sólo si es una instalación virtualizada local, nos pedirá que insertemos el primer DVD (o CD). Lo montamos y pulsamos enter. Si es una instalación en un servidor real de un hosting, los paquetes necesarios se descargarán de internet.</p>
<p>Finalizada la instalación, si tecleamos java -version nos deberá salir un mensaje parecido al siguiente:</p>
<pre>Java(TM) SE Runtime Environment (build 1.6.0._12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)</pre>
<h2>Instalando Tomcat 6</h2>
<p>Primero debemos saber la ruta exacta de descarga a la última versión de tomcat. Para ello la buscamos en esta dirección: <a href="http://tomcat.apache.org/download-60.cgi">http://tomcat.apache.org/download-60.cgi</a></p>
<p>Y vemos que la última versión (en el momento de escribir este tutorial) es la 6.0.20. Miramos en el apartado Binary Distributions, versión Core en formato tar.gz y vemos que la url de descarga es: <a href="http://apache.rediris.es/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz">http://apache.rediris.es/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz</a></p>
<p>Así que volvemos a nuestra máquina virtual con Debian, nos descargamos el software y lo descomprimimos con estos comando (si no tuvieras el comando wget, instalalo con apt-get install wget):</p>
<pre>cd /usr/local
wget http://apache.rediris.es/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz
gunzip apache-tomcat-6.0.20.tar.gz
tar -xvf apache-tomcat-6.0.20.tar
ln -s apache-tomcat-6.0.20 tomcat</pre>
<p>El desempaquetado con el tar nos habrá creado una carpeta con Tomcat 6.0.20 en /usr/local/apache-tomcat-6.0.20 , pero nosotros hemos creado un enlace simbolico /usr/local/tomcat  que apunta a dicha carpeta. Esto sirve para que más adelante podamos actualizar la versión de Tomcat tan solo modificando este enlace simbólico para que apunte a la nueva versión.</p>
<p>Ahora creamos un enlace simbólico al script de control de Tomcat en /usr/sbin (el cual forma parte del PATH)</p>
<pre>ln -s /usr/local/tomcat/bin/catalina.sh /usr/sbin/catalina</pre>
<p>Por lo que ya podemos utilizar los siguientes comandos para arrancar y parar tomcat:</p>
<pre>catalina start
catalina stop</pre>
<p>Arrancamos tomcat con catalina start . Para comprobar que está funcionando Tomcat, abrimos la siguiente dirección desde un navegador: http://localhost.com:9999  y deberíamos ver la página de inicio de Tomcat 6. Si estamos en un servidor real de un hosting, podríamos ver tomcat en la dirección http://nuestrodominio.com:8080 cambiando nuestrodominio.com por el dominio registrado que tengamos asociado al hosting o por la ip directamente.</p>
<p>Y esto es todo por hoy, la semana que viene, las partes 3 y 4. Si encontráis algún fallo en el tutorial, ponedme un comentario y lo corrijo. ¡Muchas gracias!</p>
<p>ACTUALIZACIÓN: Continúa en: <a href="http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-partes-3-y-4#more-829">Debian, Apache 2 y Tomcat 6 usando múltiples dominios, partes 3 y 4</a></p>
<img src="http://albertovilches.com/?ak_action=api_record_view&id=817&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://albertovilches.com/debian-apache-2-y-tomcat-6-usando-multiples-dominios-parte-1-y-2-de-4/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
