Setup rápido servidor web Debian based

Me dispongo a escribir este post, que ya iré enriqueciendo, para comentar cómo realizar un setup básico de un servidor web (Debian based) ya que llevo en marcha un proyecto, y aunque suelo trabajar en máquinas virtuales para no sobrecargar mis equipos, estoy notando que Prestashop va lento, lento, … al tirar de máquina y atacar desde el anfitrión, cómo no dispongo de mucho tiempo voy a instalar en el portatil (Debian Wheezy) lo justo y necesario para terminar el proyecto.

Lo primero actualizar el sistema:

apt-get update && apt-get upgrade

A continuación, aunque detecto que ya tengo algunos paquetes instalados, lanzo un churro para instalar todo lo que voy a necesitar:

apt-get install vsftpd apache2 php5 mysql-server php5-mysql phpmyadmin

Durante la instalación / configuración de paquetes aparece un diálogo de consola preguntando el servidor web para el que estamos setupeando phpmyadmin, evidentemente elegimos Apache:

Phpmyadmin

Phpmyadmin

Aparece también un mensaje relacionado con dbconfig-common, al que contesto que sí:

dbconfig-common

dbconfig-common

Pregunta tanto por la clave del servidor MySQL, como por la del usuario phpmyadmin. En mi caso ya tenía el servidor de MySQL instalado por lo que simplemente me la pregunta para poder acceder como root, dar de alta el usuario para la aplicación phpmyadmin y otros menesteres. Si estáis instalando en este momento el servidor MySQL os la pedirá por primera vez y cómo siempre dos veces.

Password MySQL Server

Password MySQL Server

Password usuario phpmyadmin

Password usuario phpmyadmin

Para este último pide confirmación:

Password usuario phpmyadmin (confirmación)

Password usuario phpmyadmin (confirmación)

Añado un usuario que haga de webmaster. A mi me gusta meter todos los Virtual Host dentro de una subcarpeta de /var/www, concretamente vhosts:

useradd -s /bin/bash -d /var/www/vhosts -m webmaster

Las opciones del comando useradd, aunque fuera del alcance de este articulo, os las comento por encima:

Con -s establezco el Shell del sistema que utilizará el usuario, con -d especifico la carpeta Home del mismo, y con -m se fuerza a que, si esta carpeta no existía, se cree en este momento.

Al que doy clave y añado al grupo de Apache2:

passwd webmaster

usermod -aG www-data webmaster

He descargado del servidor “real” una copia de seguridad de la carpeta con el CMS Prestashop, en un tar.gz, así como un volcado de la base de datos. Se trata de un proyecto que ya está en producción, pero al que se quiere hacer un “re-styling”.

Con el comando tar descomprimo el backup del sitio web:

tar xzf tienda-08-03-15.tar.gz

Ahora abro un navegador y accedo a phpmyadmin para hacer el setup de la base de datos. Los puristas dirán que porque no tiro de consola y uso el comando mysql, y yo digo, me da pereza. En otra ocasión os lo explico. Para ello accedo a la url http://localhost/phpmyadmin/

phpmyadmin panel

phpmyadmin panel

Introduzco las credenciales y accedo, desde la opción “Privilegios” voy a dar de alta un usuario, el mismo que en el servidor “real” y crearé una base de datos que se llame igual, donde después haré la importación de los datos actuales. Para ello averiguo las credenciales del mismo, en el fichero de prestashop:

prestashop/config/settings.inc.php

Concretamente las variables:

define('_DB_NAME_', 'tienda');
define('_DB_USER_', 'tienda');
define('_DB_PASSWD_', '***');

Doy de alta el usuario, creando una base de datos con el mismo nombre:

Crear usuario base de datos

Crear usuario base de datos

Y a continuación importo el fichero zip con los datos:

Importar datos desde fichero ZIP

Importar datos desde fichero ZIP

Es posible, que como a mi, si no habéis seleccionado la base de datos recién creada os de un error que precisamente dice eso:

 MySQL said: Documentation
#1046 - No database selected

Segundo intento:

Importar datos segundo intento

Importar datos segundo intento

Esta vez sí, recibimos el mensaje de OK:

Importación de datos con éxito

Importación de datos con éxito

Una vez reproducido el “alojamiento” y la “base de datos” todavía quedan unos pequeños detalles, no por ello menos importantes. Tratándose de una web que ya está en producción,  a la que se accede mediante un nombre de dominio, subdominio mejor dicho (tienda.nutsanddelights.com) voy a dar de alta en apache el virtualhost necesario y voy a trucar los DNS de mi máquina de desarrollo editando el fichero /etc/hosts para poder atacar al subdominio.

Estas cositas han de hacerse como root o sudoer, así que, aunque no lo he dicho, deberíamos estar trabajando como usuario webmaster para no romper permisos, voy a suplantar a root momentáneamente para hacer estos dos setups y algún otro que seguro me he dejado.

Como considero un mea culpa el no haberos comentado que dentro de /var/www/vhosts deberíamos haber trabajado cómo webmaster, vamos a repasar los permisos de esta carpeta y de la carpeta prestashop que hay dentro.

Lo primero es suplantar a root, después ir a la carpeta mencionada y con un listado largo comprobar permisos:

su root
cd /var/www/
ls -l
drwxrwxr-x 3 jose www-data 4096 mar 11 17:41 vhosts

Ahí ya vemos el primer problema, la carpeta vhosts debería pertenecer al usuario webmaster y ser del grupo www-data, en el que sirve ficheros apache2, vamos a corregirlo con el comando chown:

chown -R webmaster:www-data vhosts

Ahora sí:

drwxrwxr-x 3 webmaster www-data 4096 mar 11 17:41 vhosts

Seguimos como root para crear el Virtual Host

Creación del Virtual Host en Apache2

Con vuestro editor preferido, yo utilizo nano, editamos el fichero /etc/apache2/sites-available/default donde residen los Virtual Host y que en un instalación por defecto tiene esta pinta:

nano /etc/apache2/sites-available/default
<VirtualHost *:80>
 ServerAdmin webmaster@localhost
DocumentRoot /var/www
 <Directory />
 Options FollowSymLinks
 AllowOverride None
 </Directory>
 <Directory /var/www/>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride None
 Order allow,deny
 allow from all
 </Directory>
...
</VirtualHost>

He dejado en negrita las directivas importantes que cambiaremos. No está completo, he puesto puntos suspensivos en la información que de momento no importa. A mi me gusta dejar la configuración por defecto y hacerme uno nuevo, y así lo haremos. Copy&Pasteando el existente, debajo del mismo, debajo de donde se cierra el

</VirtualHost>

abrimos uno nuevo y lo construimos tal que así:

<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 ServerName tienda.nutsanddelights.com
 DocumentRoot /var/www/vhosts/prestashop
 <Directory />
 Options FollowSymLinks
 AllowOverride None
 </Directory>
 <Directory /var/www/vhosts/prestashop/>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride None
 Order allow,deny
 allow from all
 </Directory>
...
</VirtualHost>

De nuevo en negrita lo importante.

Trucar las DNS en /etc/hosts

Para que al poner en el navegador la url real nos cargue el proyecto de desarrollo y no el de producción, vamos a engañar al sistema operativo editando el fichero /etc/hosts:

nano /etc/hosts
Modificación del fichero /etc/hosts

Modificación del fichero /etc/hosts

Reseteamos el servicio apache:

service apache2 restart

Abrimos un navegador y cargamos la url pertinente:

Fallo not found debido a que no hemos activado modrewrite

Fallo not found debido a que no hemos activado modrewrite

Lo dicho anteriormente, algo siempre falta. Prestashop como otros muchos CMS, utiliza el modulo rewrite de apache2 para la sobreescritura de urls. Vamos a activarlo, y posiblemente también haya que permitir la lectura de ficheros .htaccess. Primero con el comando apache a2enmod y siendo root activamos el modulo para la sobreescritura:

a2enmod rewrite

Cómo sugiere reseteamos el servicio y volvemos a probar en el navegador:

Activar módulo rewrite

Activar módulo rewrite

service apache2 restart

Sigue sin funcionar, editemos el vhost y en la línea AllowOverride del directory correcto permitamos los .htaccess:

AllowOverride All

AllowOverride All

Tras cualquier cambio en las tripas de apache2 reseteamos el servicio:

service apache2 restart
Problema de permisos de escritura para el grupo de apache

Problema de permisos de escritura para el grupo de apache

Ahora carga sin el not found, pero no renderiza nada y va a ser por tema de permisos para el grupo www-data donde sirve los ficheros apache2, veamoslo:

Hacemos un listado largo de la carpeta vhosts:

ls /var/www/vhosts/ -l
drwxr-xr-x 23 webmaster www-data 4096 ene 2 13:26 prestashop

Lo dicho, vamos a utilizar el comando chmod, para dar permisos de escritura al grupo (en negrita, se observa que falta la w):

chmod -R 775 /var/www/vhosts/prestashop/

Ahora sí:

Ya tenemos la web funcionando en nuestro entorno de desarrollo

Ya tenemos la web funcionando en nuestro entorno de desarrollo

Pues esto es todo, siento que se haya hecho tan largo, pero son cosas del directo. Espero que os guste y sobre todo que os sirva.

Edito el post para ir incluyendo algunos enlaces que me parecen interesantes para compartir con vosotros:

http://debian-handbook.info/browse/es-ES/stable/sect.http-web-server.html

2 comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.