Debian, Apache 2 y Tomcat 6 usando múltiples dominios, parte 1 y 2 (de 4)

PostedEn Tutoriales     Comments 4 comentarios
Jan
4

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 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.

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!

Introducción

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:

  • Que tenemos dos dominios ficticios llamados guerraespacial.com y floristeria.com.
  • Que tenemos dos aplicaciones web java (war), una para cada dominio.
  • Que queremos acceder a cada aplicación a través de su propio dominio.
  • Que estas aplicaciones usan MySql, y así que para administrar la base de datos usaremos phpMyAdmin, por lo que necesitaremos Apache con php5.
  • Que queremos usar Apache 2 para servir contenidos estáticos (css, javascript, imágenes…) y como frontal para balancear Tomcat 6
  • Y que queremos darle un mínimo de seguridad al sistema.

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)

El tutorial se compone de las siguientes partes:

Parte 1: Creación de una máquina virtual Linux con Virtual Box e instalación de Debian 5

Descarga de Virtual Box y Debain 5
Creación de máquina virtual.
Instalación de Debian 5.0 (lenny) en la máquina virtual.
Apertura de puertos http y ssh en Virtual Box con nat.
Instalación de ssh.
Configuración de dominios en el dns local (etc/host) para que apunten a la máquina virtual

Parte 2: Instalación de software
Actualización del sistema. Instalación de Apache 2, MySql, phpMyAdmin, JDK6 y Tomcat 6 en Debian 5.

Parte 3: Configuración de software

Configurando Apache2 para que funcione con varios dominios (virtual hosts)
Configurando Tomcat 6 para que arranque automáticamente (scripts)
Configurando un host de Tomcat 6 por dominio (en config.xml)
Conectando Apache a Tomcat 6 (con mod_proxy)

Parte 4: Seguridad

Bloqueando accesos inseguros a phpMyAdmin
Protegiendo con password realm el virtual host por defecto

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.

Parte 1: Creación de máquina virtual e instalación de Debian 5

Descarga de Virtual Box y Debian 5

Primero descargar el software de virtualizacion de Sun (en el momento de este post, la versión 3.0.8) de esta dirección: http://www.virtualbox.org/wiki/Downloads

Después nos bajaremos la última versión de Debian de aquí: (en el momento de este post, la versión 5.0 “lenny”): http://www.debian.org/releases/
Podemos optar por bajarnos las ISOs en tamaño CD o DVD. En mi caso solo me bajo el primer DVD.

Creación de la máquina virtual

  1. Instalamos Virtual Box y lo arrancamos.
  2. Después, creamos una nueva maquina virtual con el nombre “MiDebian”, de tipo Linux y version Debian.
  3. Le asignamos 256Mb de Ram (o 512Mb, si queremos que vaya un poco más rapido)
  4. Le creamos un disco duro nuevo de tipo “expansión dinámica” 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).

Instalación de Debian 5.0 (lenny) en la máquina virtual

  1. Una vez creada la máquina virtual, hacemos click en “Configuración” 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.
  2. Arrancamos la máquina virtual “MiDebian”, la cual arrancará desde el CD/DVD que hemos montado.
  3. Nos mostrará un menú en el que elegiremos la primera opción: “Install”.
  4. Después seleccionamos el idioma, el país y el teclado que más nos guste.
  5. Le damos un nombre a la máquina: “debian” (el que viene por defecto).
  6. Nombre de dominio: virtual (o el que queramos)
  7. Tipo de particionado de discos: guiado – utilizar todo el disco (la primera opción) y dejar todas las opciones por defecto hasta que nos pregunte si “desea escribir los cambios en el disco”, donde le decimos que si.
  8. Nos preguntará la password 2 veces para el superusuario (root), introducimos la que más nos guste.
  9. 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é “avilches” y le asignaré otra password distinta.
  10. 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.
  11. En la selección de programas, elegimos “Servidor de web”, “Base de datos SQL” y “Sistema estándar”. Podemos marcar más, mientras que dejemos desmarcado “Entorno de escritorio”, ya que no queremos instalar el entorno gráfico para poder emular fielmente a un servidor real.
  12. A la pregunta sobre si deseas instalar GRUB, respondemos que si.
  13. Al finalizar la instalación, desmontamos la unidad (en el menú Dispositivos, opción Desmontar CD/DVD Rom) y pulsamos aceptar para reiniciar.

Apertura de puertos con http y ssh en Virtual Box con nat

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.

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.

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).

Abrimos una consola o terminal (simbolo del sistema en Windows) y nos situamos en la carpeta de instalación si estamos en Windows:

cd "C:\Archivos de programa\Sun\VirtualBox"

Y si estamos en MacOs:

cd /Applications/VirutalBox.app/Contents/MacOS

Ejecutamos:

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

(MiDebian es el nombre de la máquina virtual que le hemos dado al crearla. Si tu máquina virtual tiene otro nombre, cámbiaselo)
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 “It works”!).

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.

Más información en: http://mydebian.blogdns.org/?p=148

Instalación de SSH

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:

Linux debian 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686 GNU/Linux

Instalamos SSH con el siguiente comando:

apt-get install openssh-server

Una vez instalado, para ver si se ha instalado y esta funcionando, intentamos conectarnos desde el siguiente comando:

ssh localhost

Si nos permite la conexión, es que todo funciona correctamente (podemos cancelar el comando con ctrl+c).
Y para comprobar si es accesible desde fuera de la máquina virtual, podemos:
Desde Mac o Linux, con el comando ssh -p 2222 localhost
Desde Windows, con un cliente ssh (por ejemplo, putty en windows), usando como host localhost y el puerto 2222.

Deberíamos conseguir entrar con nuestro usuario root y nuestra password tal y como entramos directamente en la máquina virtual.

Descargar putty (cliente ssh para Windows) en: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Más información http://richieblog.wordpress.com/2008/11/05/como-configurar-ssh-en-debian/

Configurando los dominios para que apunten a la máquina virtual en el dns local

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.

Modificamos el fichero hosts de nuestro ordenador físico (fuera de la máquina virtual) que en Windows está en:

C:\WINDOWS\system32\drivers\etc\hosts

Y en Linux o MacOs está en:

/etc/hosts

Y le añadimos la siguiente línea al final:

127.0.0.1  floristeria.com www.floristeria.com guerraespacial.com www.guerraespacial.com

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).

Parte 2: Instalación de software

Antes de empezar, actualizar

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:

apt-get update && apt-get upgrade && apt-get dist-upgrade

Apache2

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

Server version: Apache/2.2.9 (Debian)
Server built:    Jul 14 2009 20:03:28

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).

Parar y arrancar apache2 es tan facil como:

/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

MySql y phpMyAdmin

Tecleamos apt-get install phpmyadmin. Si nos sale un menú preguntándonos qué servidor http queremos configurar, elegimos apache2
Tecleamos apt-get install mysql-server. Nos pedirá una password de root de MySql (no confundir con la password de root del sistema).

Los comandos para parar, arrancar, reiniciar MySql son:

/etc/init.d/mysql status
/etc/init.d/mysql stop
/etc/init.d/mysql start
/etc/init.d/mysql restart

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.

Instalación del JDK6

Modificamos el fichero /etc/apt/sources.list y le añadimos estas dos líneas al final:

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

Y tecleamos los siguientes comandos para que reconozca este nuevo repositorio:

apt-get update
apt-get install sun-java6-jdk

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.

Finalizada la instalación, si tecleamos java -version nos deberá salir un mensaje parecido al siguiente:

Java(TM) SE Runtime Environment (build 1.6.0._12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)

Instalando Tomcat 6

Primero debemos saber la ruta exacta de descarga a la última versión de tomcat. Para ello la buscamos en esta dirección: http://tomcat.apache.org/download-60.cgi

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: http://apache.rediris.es/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz

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):

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

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.

Ahora creamos un enlace simbólico al script de control de Tomcat en /usr/sbin (el cual forma parte del PATH)

ln -s /usr/local/tomcat/bin/catalina.sh /usr/sbin/catalina

Por lo que ya podemos utilizar los siguientes comandos para arrancar y parar tomcat:

catalina start
catalina stop

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.

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!

ACTUALIZACIÓN: Continúa en: Debian, Apache 2 y Tomcat 6 usando múltiples dominios, partes 3 y 4

Categorías