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:
Aparece también un mensaje relacionado con dbconfig-common, al que contesto que sí:
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.
Para este último pide 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/
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:
Y a continuación importo el fichero zip con los datos:
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:
Esta vez sí, recibimos el mensaje de OK:
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
Reseteamos el servicio apache:
service apache2 restart
Abrimos un navegador y cargamos la url pertinente:
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:
service apache2 restart
Sigue sin funcionar, editemos el vhost y en la línea AllowOverride del directory correcto permitamos los .htaccess:
Tras cualquier cambio en las tripas de apache2 reseteamos el servicio:
service apache2 restart
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í:
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
Pingback: Servidor Web Apache – SOSpedia punto net
Pingback: Servidor Web Apache – SOSpedia