Antes de empezar, aclaramos que esta guía no es para la instalación de un servidor web accesible a través de Internet. Los aspectos de seguridad, rendimiento y conectividad no están contemplados. Con esta guía se trata de poner en marcha un servidor web Apache en un PC con sistema operativo Ubuntu 1x. Con el que tendremos un estupendo entorno de trabajo donde poder probar Drupal, Wordpress, Joomla o otras aplicaciones web que utilicen entre otros lenguajes Php y MySQL. Para los sistemas operativos Mac OS X, Windows y Solaris tenemos el instalador XAMPP.

Para empezar con Ubuntu o cualquier otra distribución Gnu-Linux antes de todo, comprobaremos que todos nuestros paquetes de código estén actualizados. Lo podemos realizar desde la pantalla de terminal o con el gestor de actualizaciones. Des del terminal lo haremos del siguiente modo:

# sudo apt-get update
# sudo apt-get upgrade

Luego instalamos el grupo de paquetes de código "Essentials". Un bonito paquete que bastantes programas requieren en el servidor. También instalaremos Curl para poder ejecutar el archivo cron.php de Drupal.

# sudo apt-get install build-essential
# sudo apt-get install curl

Recomendamos instalar Synaptic, que ya no viene instalado en el Ubuntu 11, para poder controlar cómodamente las dependencias entre los diferentes paquetes de código y escoger las versiones que mas nos interesen de Php, MySQL, otros lenguajes de programación y aplicaciones que queramos. No recomendamos instalar el Drupal directamente con el Synaptic, ya que instala un servidor web Apache en una ubicación diferente a la de /var/www y con una configuración que nos puede resultar poco práctica para llevar el mantenimiento y actualizaciones de todo el software instalado.

# sudo apt-get install synaptic

Y para abrirlo des del terminal

# sudo synaptic

De esta manera con el Synaptic ­realizaremos búsquedas de los siguientes paquetes para instalarlos:

apache2 , apache2-threaded-dev, php5 , php5-dev, php-pear, php5-gd, mysql-server , phpmyadmin y postfix.

Los más valientes pueden seguir directamente con el terminal. Pero utilizando Synaptic nos informará de las dependencias entre paquetes de código:

libgssapi-krb5-2, libk5crypto3, libkrb5-3, libkrb5support0, apache2, apache2-mpm-prefork, apache2-threaded-dev, apache2-utils, apache2.2-bin, apache2.2-common, autoconf, automake, autotools-dev, comerr-dev, dbconfig-common, krb5-multidev, libapache2-mod-php5, libapr1, libapr1-dev, libaprutil1, libaprutil1-dbd-sqlite3, libaprutil1-dev, libaprutil1-ldap, libdbd-mysql-perl, libdbi-perl, libexpat1-dev, libgssrpc4, libhtml-template-perl, libkadm5clnt-mit8, libkadm5srv-mit8, libkdb5-5, libkrb5-dev, libldap2-dev, libltdl-dev, libmcrypt4, libmysql-java, libmysqlclient-dev, libnet-daemon-perl, libpcre3-dev, libpcrecpp0, libplrpc-perl, libpq-dev, libpq5, libsqlite3-dev, libssl-dev, libssl-doc, libtool, mysql-client-5.1, mysql-client-core-5.1, mysql-server, mysql-server-5.1, mysql-server-core-5.1, php-pear, php5, php5-cgi, php5-cli, php5-common , php5-curl , php5-dbg, php5-dev , php5-gd, php5-mcrypt, php5-mysql, phpmyadmin, postfix, shtool, uuid-dev y zlib1g-dev.

Una buena práctica es instalar las mismas versiones de los paquetes que en nuestro servidor en producción. De esta manera nos aseguramos que lo mismo que funciona en nuestro servidor local, va a funcionar luego en el servidor de producción. Aquí que cada uno escoja lo que más le convenga.

Tras la instalación de todos los paquetes el sistema nos preguntará que contraseña del usuario root para el acceso a base de datos. Luego la configuración del servidor de correo Postfix y con que servidor web queremos relacionarlo. Escogeremos Apache2.

URLs limpias

Para que Drupal pueda trabajar con URLs limpias hay que habilitar el módulo de PHP llamado mod_rewrite.

# sudo a2enmod rewrite

Habilitar la barra de progreso de tareas

Es la barra que aparece indicando el progreso de tareas como la actualización de la base de datos con update.php o si utilizamos los módulos de Drupal FileField y Upload. Muchos proveedores de alojamiento no incluyen este detalle que no es imprescindible, pero... que cada uno decida.

# sudo pecl install uploadprogress
# sudo sed -i '/; extension_dir directive above/ a\ extension=uploadprogress.so' /etc/php5/apache2/php.ini

Configurar la zona horaria.

# sudo dpkg-reconfigure tzdata

Habilitar archivos .htaccess

Drupal utiliza archivos de permiso de acceso .htaccess. Para decirle al servidor que los utilice debemos habilitar la propiedad AllowOverride.

# sudo sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/sites-available/default

Configuración server name

# sudo gedit /etc/apache2/httpd.conf

Tras abrirse la aplicación Gedit escribir en el archivo:

ServerName localhost

Guardar el archivo y reiniciar el Apache y la base de datos:

# service apache2 restart
# service mysql restart

Para Ubuntu 14

# echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf
# sudo ln -s /etc/apache2/conf-available/fqdn.conf /etc/apache2/conf-enabled/fqdn.conf

En Ubuntu 14 tenemos el archivo de configuración del apache en etc/apache2/apache2.conf y deberia contener:

<Directory /var/www/html>

Options Indexes FollowSymLinks
AllowOverride All
Require all granted

</Directory>

Hasta aquí podemos decir que ya tenemos el servidor web Apache2 listo para ser utilizado como banco de pruebas para Drupal y otros gestores de contenidos. La carpeta donde estarán ubicados los archivos es /var/www con acceso solo para el usuario root. Para ver si todo ha ido bien, abrimos el navegador web y tecleamos localhost. Entonces deberá aparecer “It works!”. Escribiendo localhost/phpmyadmin accedemos al gestor de la base de datos MySQL. También podremos acceder desde otras maquinas de la red local, escribiendo en el navegador web la dirección IP del ordenador donde se halle instalado el servidor web; por ejemplo 192.168.1.101

Para descubrir cual puedes utilizar el terminal:

# ifconfig 

Entre otros datos, en la  ventana del terminal aparecerá algo parecido a inet addr:192.168.1.101

En el caso que trabajemos sin conexión a Internet deberemos indicar al navegador web que estamos trabajando sin conexión a Internet. En el Mozilla Firefox menú FILES > WORK OFFLINE

Trucos para aumentar el rendimiento del servidor web

Hay dos módulos del Apache que podemos deshabilitar.

# sudo a2dismod cgi
# sudo a2dismod autoindex

Para que Drupal pueda correr con más agilidad podemos incrementar algunos limites que vienen por defecto en el archivo /etc/php5/php.ini. Aumentaremos el límite de la memoria asignada al PHP hasta 128Mb y permitiremos subir archivos de hasta 128Mb:

# sudo sed -i 's/memory_limit = .*/memory_limit = 128M/' /etc/php5/apache2/php.ini
# sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 128M/' /etc/php5/apache2/php.ini
# sudo sed -i 's/post_max_size = .*/post_max_size = 128M/' /etc/php5/apache2/php.ini

Instalar un acelerador de código.

# sudo pecl install apc
# sudo sed -i '/; extension_dir directive above/ a\ extension=apc.so' /etc/php5/apache2/php.ini

Habilitar mod_deflate para comprimir las hojas de estilo CSS y código Javascript. También el módulo mod_expires para poner en cache los archivos estáticos.

# sudo a2enmod expires
# sudo a2enmod deflate

# sudo sed -i 's/DEFLATE text\/html text\/plain text\/xml/DEFLATE text\/html text\/plain text\/xml text\/css text\/javascript application\/x-javascript/' /etc/apache2/mods-available/deflate.conf

También aumentaremos la memoria cache asignada a las consultas a la base de datos MySQL.

# sudo sed -i 's/query_cache_limit = 1M/query_cache_limit = 16M\ query_cache_type = 1/' /etc/mysql/my.cnf

Para aplicar los cambios reiniciar los distintos servicios.

# service apache2 restart
# service mysql restart