jueves, 11 de agosto de 2011

Instalando Apache+PHP+MySQL+Python+Herramientas en (K)Ubuntu

En mi anterior blog ya había publicado una entrada de cómo instalar Apache+PHP+MySQL+Userdir en Ubuntu. Ese post me ayudó muchas veces para poner a funcionar un servidor HTTP en Ubuntu rápidamente. Sin embargo, ha llegado la hora de actualizarlo.

Resulta que el soporte de Userdir, en mi opinión, se ha venido desmejorando en las últimas versiones de Ubuntu (desconozco si en todas las distros), por lo que al instalarlo ahora hay que configurar y toquetear más cosas. Por ejemplo, la última vez que lo instalé no funcionaba el PHP, había que configurarlo. Por esto ahora prefiero programar directamente en el /var/www.

Adicional a esto, he trabajado mucho más en python como CGI, por lo que se me ha vuelto una necesidad tener una guía de cómo configurarlo.

Comencemos

Instalando todo
Lo primero, instalar todo  lo que necesitamos. Ahí nos ayudamos con el Synaptic, o en mi caso, el KPackageKit, o el apt-get de toda la vida. Los ingredientes son:

  • apache2
  • php5
  • mysql-server
  • php5-mysql
  • python-mysqldb
  • mysql-query-browser

Deberían instalarse todas las dependencias. En la instalación nos debería aparecer un formulario donde se nos pregunta la contraseña de MySQL. Se escribe dos veces y se hace clic en Aceptar. Debemos recordarla porque la vamos a necesitar. Listo, podemos probar Apache en http://localhost, debería aparecer:



El último aplicativo de la lista (mysql-query-browser) sirve para acceder a las bases de datos de MySQL. Se encuentra en el grupo de programas "Desarrollo". Al ejecutarlo nos pide los datos de conexión:



Normalmente el nombre del servidor es localhost, el usuario root y la contraseña es la que introdujimos cuando instalamos MySQL. Algunos pueden preferir PhpMyAdmin que es una interfaz web (corriendo en nuestro servidor local) de administración de MySQL, que se instala con el paquete phpmyadmin. Una vez instalado se accede a través de http://localhost/phpmyadmin.

Creando el directorio de trabajo

Como mencioné, ya no uso Userdir, así que debemos trabajar directamente sobre el /var/www. El problema es que sólo el root tiene permisos sobre él y no está en nuestro home, que sería mucho más cómodo para acceder. Esto se resuelve dando permisos de usuario (desde el root) a la carpeta y luego creando un enlace simbólico. En mi caso, prefiero no trabajar sobre el /var/www mismo, sino sobre una subcarpeta, pero el procedimiento es igual.




Creo mi carpeta de trabajo (se lo pueden saltar si trabajan con la carpeta predeterminada): no soy un purista de la consola, así que prefiero el Nautilus o el Dolphin para estas tareas, pero debo abrirlos como root. En Ubuntu se abre con gksu nautilus y aunque desconozco la alternativa a gksu (abre una aplicación gráfica como root) en KDE, sudo dolphin funciona muy bien. Busco la carpeta y creo allí la mía (proyectos, es decir: /var/www/proyectos).

Doy permisos de usuario: ahora con el Nautilus o Dolphin en modo root, seleccionamos la carpeta con la que vamos a trabajar y hacemos clic derecho > Propiedes > Permisos. Ahora le decimos que el propietario de la carpeta es [mi nombre de usuario] y el grupo igual ([nombre de usuario]). En KDE:



Aceptar y ya tenemos los permisos para escribir en la carpeta. También lo pueden hacer desde consola con chmod.

Creo el enlace en mi home: es preferible, en mi opinión, tener la carpeta donde se trabaja en el home por varias razones (facilidad con los accesos directos, inicio del terminal, etc). Por ello es mejor que nos traigamos la carpeta de trabajo para nuestro home con un enlace simbólico. Para el novato en linux: esto es lo mismo que los accesos directos de Windows, pero con una maravillosa diferencia: se comportan como el original.

Un ejemplo vale más que mil explicaciones: voy a crear un enlace en mi home con ruta /home/[nombre de usuario]/proyectos que apunta a /var/www/proyectos. En Linux hay dos formas: con enlaces fuertes (que no voy a tratar aquí) y simbólicos. Creo mi enlace simbólico con:

ln -s /var/www/proyectos /home/[mi nombre de usuario]/proyectos

También se puede usar Dolphin llendo al home, clic derecho sobre el espacio vacío, y en el menú contextual Crear Nuevo>Enlace básico a archivo o carpeta:



Mucho más fácil.

Como mencioné antes, a diferencia de Windows, nuestro enlace es como si la carpeta /var/www/proyectos estuviera en nuestro home, ya que puedo accederla a través de cd /home/[mi nombre de usuario]/proyectos, listarla con ls, etc.

Probando PHP

Hasta el momento sólo hemos instalado el servidor y creado un directorio de trabajo en nuestro home. Ahora hay que probar el funcionamiento de PHP con un sencillo script dentro de la carpeta de trabajo. Llamémoslo test.php. Ahora lo abrirmos para escribir:

<?php
phpinfo();
?>

Lo guardamos. Si la carpeta de trabajo que enlazó es /var/www, puede acceder a este archivo con http://localhost/test.php. Yo creé una subcarpeta llamada proyectos (asumiré esta opción en adelante), así que debo acceder a ella con http://localhost/proyectos/test.php. Debe mostrar esto:



Si es así, funcionó. Si no (me ha pasado) deben reiniciar Apache con sudo service apache2 restart.

Configurando y probando Python

Debo reconocer que esta parte es la razón por la que escribo este post, es la que más olvido y, digamos, la más compleja. Lo que vamos a hacer es habilitar el uso de python como motor CGI. Debemos movernos a la carpeta /etc/apache2/sites-available ya sea con consola (cd ...) o con Nautilus o Dolphin en modo root como ya expliqué antes. Mi método preferido (no soy amigo de la consola) es abrir Kate o Gedit como root con gksu gedit (Ubuntu) o sudo kate (Kubuntu). Me abre el editor de textos de cada uno y con él busco, edito y guardo los archivos que necesito, con permisos de root.

En la carpeta que mencioné, debemos abrir el archivo default para editarlo (OJO: como root). Buscamos donde diga <Directory /var/www/> y agregamos lo siguiente:

  • Donde dice Options agregar al final (separado por espacio) +ExecCGI.
  • Agregar la línea (o reemplazarla si ya existe) AddHandler por: AddHandler cgi-script cgi py pl.

Finalmente, yo suelo cambiar todos los AllowOverride None del archivo por AllowOverride All. Esto no tiene ninguna funcionalidad para lo que estamos haciendo en este post, pero me sirve para cuando uso .htaccess.

A mí me quedó así (OJO, es sólo el fragmento del archivo):

...
<Directory /var/www/>
	Options Indexes FollowSymLinks MultiViews +ExecCGI
	AddHandler cgi-script cgi py pl
	AllowOverride All
	Order allow,deny
	allow from all
</Directory>
...

Guardamos el archivo y reiniciamos Apache con sudo service apache2 restart.

Ahora probemos python. Creamos un archivo en nuestra carpeta de trabajo, con el nombre test.py. Escribimos en él:

#!/usr/bin/python

print 'Content-type: text/plain'
print ''

for i in range(5):
  print 'Hola %i veces'%i

print 'chao'

Más adelante, en otros posts, hablaré más de python. Quien esté familiarizado con el entorno CGI de python puede escribir el script que desee, pero recuerde: debe dejar una línea vacía después del Content-type.

Guardamos y con Nautilus o Dolphin (ya no es necesario que sea como root porque tenemos permisos de usuario en la carpeta de trabajo) hacemos clic derecho sobre el archivo > Propiedades > Permisos e indicamos que es un ejecutable. En KDE:



NOTA: es muy frecuente olvidar hacer este paso de definir el archivo como ejecutable. Me he pasado amargos minutos revisando una y otra vez un script que falla, cuando lo que falta es esto.

Aceptar y ahora a probarlo: http://localhost/proyectos/test.py. Debería aparecer:



Ahora ya tenemos Apache con PHP, MySQL y Python configurado en (K)Ubuntu. Para configurar en Windows es similar, sólo que se edita el archivo httpd.conf. También se puede configurar de la misma forma para usar Perl u otro lenguaje para CGI.

No hay comentarios:

Publicar un comentario

Si deseas extender esta entrada, por favor hazlo