Instalar Servidor LAMP (Linux Apache2 Mysql5 Php5) con Virtualhosts

El acrónimo LAMP se refiere a un conjunto de subsistemas de software necesarios para alcanzar una solución global, en este caso configurar sitios web o Servidores dinámicos con un esfuerzo reducido.

En las tecnologías LAMP esto se consigue mediante la unión de las siguientes tecnologías:

La combinación de estas tecnologías es usado primariamente para definir la infraestructura de un servidor web, utilizando un paradigma de programación para desarrollo.

A pesar de que el origen de estos programas de código abierto no han sido específicamente diseñado para trabajar entre sí, la combinación se popularizó debido a su bajo coste de adquisición y ubicuidad de sus componentes (ya que vienen pre-instalados en la mayoría de las distribuciones linux). Cuando son combinados, representan un conjunto de soluciones que soportan servidores de aplicaciones.

Extraído de Wikipedia (http://es.wikipedia.org/wiki/LAMP)

Observaciones:

El tutorial supone que el usuario tiene conocimientos básicos de consola y tiene una versión de Ubunu 8.04  (seguramente es aplicable a otras versiones) funcionando correctamente.

Procedimiento:

El primer paso a realizar es actualizar la lista de paquetes que están disponibles en el repositorio.

< sudo apt-get update

Finalizada la instalación se debe ejecutar el siguiente comando para instalar los paquetes.

< sudo apt-get install apache2 php5 mysql-server php-pear php5-mysql
> Reading package lists... Done
> Building dependency tree
> Reading state information... Done
> The following extra packages will be installed:
> apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 libapr1 libaprutil1 libdbd-mysql-perl
> libdbi-perl libmysqlclient15off libnet-daemon-perl libpcre3 libplrpc-perl libpq5 libxml2 mysql-client-5.0
> mysql-common mysql-server-5.0 php5-cli php5-common
> Suggested packages:
> apache2-doc dbishell libcompress-zlib-perl mysql-doc-5.0 tinyca php5-dev php4-dev
> Recommended packages:
> xml-core libhtml-template-perl mailx
> The following NEW packages will be installed:
> apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 libapr1 libaprutil1
> libdbd-mysql-perl libdbi-perl libmysqlclient15off libnet-daemon-perl libpcre3 libplrpc-perl libpq5 libxml2
> mysql-client-5.0 mysql-common mysql-server mysql-server-5.0 php-pear php5 php5-cli php5-common
> 0 upgraded, 23 newly installed, 0 to remove and 0 not upgraded.
> Need to get 46.5MB of archives.
> After this operation, 134MB of additional disk space will be used.
> Do you want to continue [Y/n]? < Y

Finalizada la descarga (puede llevar varios minutos dependiendo de la velocidad de la conexión) de los componentes, el sistema solicitará definir la constraseña del usuario root del mysql.  Es conveniente definirla aunque no es obligatorio (el sistema al usuario root cuando se conecte en forma local no le solicitará contraseña).

Configurando el apache para varios dominios (se desactiva el dominio por defecto).

La primera actividad a realizar es editar el archivo '/etc/apache2/apache2.conf'

< sudo nano /etc/apache2/apache2.conf

e insertar (sobre el final del archivo) entre las líneas originales (en negrita), las dos líneas que habilitan la utilización de host virtuales para el puerto 80 y 443 (que esta comentada ya que en esta instancia no se va a utilizar).

# Include the virtual host configurations:
NameVirtualHost *:80
#NameVirtualHost *:443
Include /etc/apache2/sites-enabled/

A continación se deshabilitará el sitio que se configura por defecto.

< sudo a2dissite default

Y se crearán 2 sitios nuevos (a.dominio.com y b.dominio.com).

Para crear el sitio a.dominio.com

< sudo nano /etc/apache2/sites-available/a.dominio.com

Con el siguiente contenido.

<VirtualHost *:80>
ServerName a.dominio.com
ServerAdmin webmaster@a.dominio.com

DocumentRoot /var/www/htdocs/a.dominio.com
CustomLog /var/log/apache2/a.dominio.com.access.log combined
ErrorLog /var/log/apache2/a.dominio.com.error.log
LogLevel warn

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory /var/www/htdocs/a.dominio.com/>
Options Indexes FollowSymLinks MultiViews
Order deny,allow
Allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
</Directory>
</VirtualHost>

Y el mismo procedimiento pero par ael sitio b.dominio.com

< sudo nano /etc/apache2/sites-available/b.dominio.com

Con el siguiente contenido.

<VirtualHost *:80>
ServerName b.dominio.com
ServerAdmin webmaster@b.dominio.com

DocumentRoot /var/www/htdocs/b.dominio.com
CustomLog /var/log/apache2/b.dominio.com.access.log combined
ErrorLog /var/log/apache2/b.dominio.com.error.log
LogLevel warn

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory /var/www/htdocs/b.dominio.com/>
Options Indexes FollowSymLinks MultiViews
Order deny,allow
Allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
</Directory>
</VirtualHost>

Finalizada la edición de los archivos se deben habilitar los sitios en la configuración de apache.

< sudo a2ensite a.dominio.com
< sudo a2ensite b.dominio.com

Finalizada la instalación se deben crear los sitios y contenidos para que el apache los pueda mostrar.

< sudo mkdir -p /var/www/htdocs/a.dominio.com
< sudo mkdir -p /var/www/htdocs/b.dominio.com
< echo '<html><body>a.dominio.com - FUNCIONA</body></html>' |sudo tee -a /var/www/htdocs/a.dominio.com/index.html
< echo '<html><body>b.dominio.com - FUNCIONA</body></html>' |sudo tee -a /var/www/htdocs/b.dominio.com/index.html

Una ver creado el contenido para las pruebas se debe reiniciar el apache.

< sudo /etc/init.d/apache2 restart
> * Restarting web server apache2 [ OK ]

Para hacer las pruebas se procede a instalar la aplicación links (un navegador de consola).  Si ustedes esta trabajando en un equio local y quiere utilizar otro navegador puede saltear este paso.

< sudo apt-get install links

Dado que hay una dependencia entre los virtualhost y los dns (ya que el apache sabe a que sitio apuntar según el nombre del dominio), hay que agregar al archivo hosts las entradas a los dominios que se crearon.

< echo -e '127.0.0.1\ta.dominio.com' |sudo tee -a /etc/hosts
< echo -e '127.0.0.1\tb.dominio.com' |sudo tee -a /etc/hosts

Para realizar la prueba, se debe poder entrar con el links a los dominios a.dominio.com y b.dominio.com y cada uno imprimir en pantalla su nombre ( 'a.dominio.com - FUNCIONA' y 'b.dominio.com - FUNCIONA').

< links http://a.dominio.com
< links http://b.dominio.com

Drupal MultiSite

Drupa es un sistema de gestión de contenido para sitios Web. Permite publicar artículos, imágenes, u otros archivos y servicios añadidos como foros, encuestas, votaciones, blogs y administración de usuarios y permisos. Drupal es un sistema dinámico: en lugar de almacenar sus contenidos en archivos estáticos en el sistema de ficheros del servidor de forma fija, el contenido textual de las páginas y otras configuraciones son almacenados en una base de datos y se editan utilizando un entorno Web incluido en el producto.

Drupal se distribuye bajo la licencia GNU GPL, y por lo tanto es software libre.

Extraído de Wikipedia (http://es.wikipedia.org/wiki/Drupal

Requerimientos:

Se debe tener instalado un servidor LAMP como esta indicado en este tutorial.

Observaciones:

Al momento de redactar este tutorial la última versión de drupal es la 6.14, debe prestarse atención en adaptar los nombre de los archivos/directorios en caso de que se este trabajando con una versión más nueva.

Procedimiento:

El primer paso a realizar es descargar Drupal.  Para realizar esto se debe acceder al sitio de drupal y descargar la versión más nueva.  La forma más fácil para realizar esto es copiar el link con el navegar y descargarlo con el wget.

< cd /tmp
< wget http://ftp.drupal.org/files/projects/drupal-6.14.tar.gz
> --11:08:50--  http://ftp.drupal.org/files/projects/drupal-6.13.tar.gz
>            => `drupal-6.13.tar.gz'
> Resolving ftp.drupal.org... 140.211.166.134
> Connecting to ftp.drupal.org|140.211.166.134|:80... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 1,080,373 (1.0M) [application/x-gzip]
> 
> 100%[==================================>] 1,080,373    202.74K/s    ETA 00:00
> 
> 11:08:55 (202.32 KB/s) - `drupal-6.14.tar.gz' saved [1080373/1080373]

Si no se tiene instalado wget se puede instalar ejecutando.

< sudo apt-get install wget

Finalizada la descarga se debe proceder a descomprimir el tar.gz que contiene el drupal.  Esto se va a realizar en el opt (esto se hace para simplificar a futuro las actualizaciones de drupal).

< sudo mkdir -p /opt/drupal
< sudo mkdir -p /var/www/htdocs
< cd /opt/drupal < sudo tar -xzf /tmp/drupal-6.14.tar.gz

Es conveniente instalar las librerías gd para el tratamiento de imágenes en php.

< sudo apt-get install php5-gd

Se debe crear un link simbólico en el directorio donde se alojan los sitios webs en el servidor.

< sudo ln -s /opt/drupal/drupal-6.14/ /var/www/htdocs/drupal-produccion

Si se quiere instalar drupal en español, se debe descargar el paquete de la traducción e instalarlo.  Se debe ubicar la traducción que se quiere instalar la sección traducciones del sitio de drupal y copiar el link de descarga.

< cd /tmp
< wget http://ftp.drupal.org/files/projects/es-6.x-1.3.tar.gz
< cd /opt/drupal/drupal-6.14/
< sudo tar -xzf /tmp/es-6.x-1.3.tar.gz

A continuación se configurará el motor de base de datos para permitir la conexión de un usuario a una base de datos para Drupal.

 


Para conectarse a la base de datos se debe ejecutar el comando:

< mysql -u root -p

El sistema solicitará la contraseña que se definió para el usuario root en el momento de la instalación del mysql.

Dentro de la consola de mysql se debe ejecutar.

> Welcome to the MySQL monitor.  Commands end with ; or \g.
> Your MySQL connection id is 19
> Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
 
> Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
< mysql> create database drupal;
> Query OK, 1 row affected (0.00 sec)
 
< mysql> grant all privileges on drupal.* to drupalsites@localhost \
identified by 'cambiame'; > Query OK, 0 rows affected (0.00 sec) < mysql> flush privileges; > Query OK, 0 rows affected (0.00 sec) < mysql> quit

Se debe configurar al Drupal para que funcione con dos sitios (drupal1.dominio.com y drupal2.dominio.com).

< cd /var/www/htdocs/drupal-produccion/sites
< sudo cp -r default/ drupal1.dominio.com
< sudo cp -r default/ drupal2.dominio.com
< sudo cp drupal1.dominio.com/default.settings.php drupal1.dominio.com/settings.php
< sudo cp drupal2.dominio.com/default.settings.php drupal2.dominio.com/settings.php

Se le debe cambiar el owner a los directorios creados para que el asistente de configuración pueda escribir en los mismos cuando se realice la configuración web.

< sudo chown www-data.www-data -R drupal1.dominio.com/
< sudo chown www-data.www-data -R drupal2.dominio.com/

Para que los sitios sean accesibles se deben crear los archivos de configuración de apache para cada sitio.

Para drupal1.dominio.com

< sudo nano /etc/apache2/sites-available/drupal1.dominio.com

Con el siguiente contenido:

<VirtualHost *:80>
        ServerName drupal1.dominio.com
        ServerAdmin webmaster@dominio.com

        DocumentRoot /var/www/htdocs/drupal-produccion
        CustomLog /var/log/apache2/drupal1.dominio.com.access.log combined
        ErrorLog /var/log/apache2/drupal1.dominio.com.error.log
        LogLevel warn

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  
        <Directory /var/www/htdocs/drupal-produccion/>
                Options Indexes FollowSymLinks MultiViews
                Order deny,allow
                Allow from all
                # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
        </Directory>
</VirtualHost>

y prácticamente lo mismo para drupal2.dominio.com

< sudo nano /etc/apache2/sites-available/drupal2.dominio.com

Con el siguiente contenido:

<VirtualHost *:80>
        ServerName drupal2.dominio.com
        ServerAdmin webmaster@dominio.com

        DocumentRoot /var/www/htdocs/drupal-produccion
        CustomLog /var/log/apache2/drupal2.dominio.com.access.log combined
        ErrorLog /var/log/apache2/drupal2.dominio.com.error.log
        LogLevel warn

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  
        <Directory /var/www/htdocs/drupal-produccion/>
                Options Indexes FollowSymLinks MultiViews
                Order deny,allow
                Allow from all
                # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
        </Directory>
</VirtualHost>

Como se esta trabajando con hostvirtuales los dominios drupal1.dominio.com y drupal2.dominio.com deben ser dados de alta en el dns, o agregados en el archivo hosts de los equipos que los van a consumir. 

En este caso para llevar adelante la instalación se agregarán los registros en el archivo "/etc/hosts" del cliente (en mi caso la notebook de trabajo).  Es necesario saber la ip ('xxx.xxx.xxx.xxx') del equipo donde se esta instalando drupal.

< echo -e 'xxx.xxx.xxx.xxx\tdrupal1.dominio.com' |sudo tee -a /etc/hosts
< echo -e 'xxx.xxx.xxx.xxx\tdrupal2.dominio.com' |sudo tee -a /etc/hosts

A continuación en el servidor se procederá a habilitar el sitio drupal1 y se recargará la configuración de apache.

< sudo a2ensite drupal1.dominio.com
< sudo /etc/init.d/apache2 reload

Para continuar con la instalación se debe entrar con el navegador (firefox) a la url 'http://drupal1.dominio.com' donde se mostrará la siguiente pantalla:

El primer paso a realizar es selecionar el idioma.

 Si se superar todos los quererimientos del sistema el siguiente paso a definirir es la base de datos.

Se debe desplegar las opciones avanzadas en la base de datos para poder definir el prefijo de la base de datos (esto permite poder tener varios drupals en la misma base).

El siguiente paso es definir el nombre del sitio (que aparece en la parte superior izquierda del theme por defecto).  Y el usuario administrador del sistema (con la contraseña del mismo).

Finalizada la instalación el sistema muestra una pantalla confirmado la instalación exitosa del cms.

Vista final del sitio finalizada la configuración del mismo.

Finalizada la configuración del sitio drupal1 se debe proceder a configurar el sitio drupal2 y recargar la configuración de apache.

< sudo a2ensite drupal2.dominio.com
< sudo /etc/init.d/apache2 reload

Para continuar con la instalación se debe entrar con el navegador (firefox) a la url 'http://drupal2.dominio.com' los pasos a seguir son los mismo que con el sitio drupal1, salvo el parámetro que de prefijo de las tablas en la base de datos, que en esta caso es 'drupal2' (en lugar de 'drupal1').

Definición del prefijo de base de datos para el sitio drupal2.dominio.com

Vista de ventanas superpuestas de los sitios configurados.

Wordpress MU (MultiUsuario)

WordPress es un sistema de gestión de contenido enfocado a la creación de blogs (sitios web periódicamente actualizados). Desarrollado en PHP y MySQL, bajo licencia GPL, tiene como fundador a Matt Mullenweg. WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a Movable Type en el CMS más popular de la blogosfera. Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus características como gestor de contenidos.

Otro motivo a considerar sobre su éxito y extensión, es la enorme comunidad de desarrolladores y diseñadores, que se encargan de desarrollarlo en general o crear plugins y temas para la comunidad (que ascendían a 2.524 y 1.320 respectivamente en julio de 2008).

Extraído de Wikipedia (http://es.wikipedia.org/wiki/WordPress).

Requerimientos:

Se debe tener instalado un servidor LAMP como esta indicado en este tutorial.

Procedimiento:

El primer paso a realizar es descargar el Wordpress, la descarga se va a realizar dentro del /tmp.  Wordpress facilita un link para descargar siempre la última versión ("http://es.wikipedia.org/wiki/WordPress").

< wget http://mu.wordpress.org/latest.tar.gz
> --15:39:33--  http://mu.wordpress.org/latest.tar.gz
>           => `latest.tar.gz'
> Resolving mu.wordpress.org... 72.233.56.139, 72.233.56.138
> Connecting to mu.wordpress.org|72.233.56.139|:80... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: unspecified [application/x-gzip]
 
>     [                     <=>             ] 2,186,172    327.82K/s            

> 15:39:47 (162.95 KB/s) - `latest.tar.gz' saved [2186172]

Si no se tiene instalado wget se puede instalar ejecutando.

< sudo apt-get install wget

Finalizada la descarga se debe proceder descomprimir el wordpress.

< cd /opt
< tar -xzf /tmp/latest.tar.gz
< sudo ln -s /opt/wordpress-mu/ /var/www/htdocs/wordpress.dominio.com 
< sudo chmod 777 -R /var/www/htdocs/wordpress.dominio.com

A continuación se configurará el motor de base de datos para permitir la conexión de un usuario a una base de datos para WordPress.

Para conectarse a la base de datos se debe ejecutar el comando:

< mysql -u root -p

El sistema solicitará la contraseña que se definió para el usuario root en el momento de la instalación del mysql.

Dentro de la consola de mysql se debe ejecutar.

> Welcome to the MySQL monitor.  Commands end with ; or \g.
> Your MySQL connection id is 19
> Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
 
> Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
< mysql> create database wordpressmu;
> Query OK, 1 row affected (0.00 sec)
 
< mysql> grant all privileges on wordpressmu.* to wordpressmu@localhost identified by 'cambiame';
> Query OK, 0 rows affected (0.00 sec)

< mysql> flush privileges;
> Query OK, 0 rows affected (0.00 sec)

< mysql> quit

A continuación se debe crear la definición del host virtual para el apache.

< sudo nano /etc/apache2/sites-available/wordpress.dominio.com

Y habilitar el host virtual

< sudo a2ensite wordpress.dominio.com

Para el correcto funcionamiento de WordPress se debe habilitar el módulo "rewrite".

< sudo a2enmod rewrite

Es conveniente (no tenerlo me trajo problemas durante una actualización) definir el servidor virtual en el archivo "/etc/hosts" del servidor donde vive el WordPress.

< echo -e '127.0.0.1\twordpress.dominio.com' |sudo tee -a /etc/hosts

Como se esta trabajando con hostvirtuales el dominio wordpress.dominio.com debe ser dado de alta en el dns, o agregados en el archivo hosts de los equipos que los van a consumir. 

En este caso para llevar adelante la instalación se agregarán los registros en el archivo "/etc/hosts" del cliente (en mi caso la notebook de trabajo).  Es necesario saber la ip ('xxx.xxx.xxx.xxx') del equipo donde se esta instalando WordPress.

< echo -e 'xxx.xxx.xxx.xxx\twordpress.dominio.com' |sudo tee -a /etc/hosts

A continuación se recargará la configuración de apache.

sudo /etc/init.d/apache2 restart

Finalizada la configuración se debe  realizar la instalación a través de la interfase web.  Esto de realiza ingresando "http://wordpress.dominio.com" en la barra de dirección del navegador.  Donde presentara una pantalla donde se deben definir los datos de conexión a la base de datos y la forma de trabajo del WordPressMu (en este caso se configuro para trabajar con directorios en lugar de subdominios).

En la segunda y última pantalla se muestran los datos con las credenciales de acceso al portal.  Si no esta correctamente configurado el servidor de correo, se debe copiar la contraseña (el sistema manda automáticamente un email a la dirección de correo del administrador, configurada en la pantalla anterior).

Vista de la pantalla de administración.