viernes, 19 de agosto de 2011

Entorno de desarrollo LAMP (II) - Servidores web

En este artículo voy a mostrar cómo instalar un servidor LAMP/WAMP completo: Apache + PHP + MySQL.

Como no pretendo montar un supertutorial y repetir toda la información disponible por la red sólo voy a comentar los enlaces y dar ciertas indicaciones en casos especiales.

Tampoco, en este artículo, entraré en discusiones sobre si es mejor Apache como servidor web o debería usar Lighttpd porque es la bomba, o si MySQL, Oracle o PostgreSQL como motor de base de datos. Mi intención, ahora mismo es tener un entorno (de desarrollo, integración e incluso producción) funcionando. Si el desarrollo se realiza de forma correcta la migración a otros entornos no debería traer demasiados dolores de cabeza.

Empezaremos con el servidor LAMP/WAMP: Apache, PHP y MySQL. Las instrucciones las daré para Windows y Linux (en principio ubuntu y derivados)

Windows

Para Windows yo suelo utilizar WampServer, no porque sea mejor o peor sino porque es sencillo de instalar y estoy acostumbrado a su panel de control. A algunos les gusta más XAmpp pero yo sólo he usado éste para crear “demos” y llevármelas en un lápiz usb.

Como la página principal es muy explicativa y la instalación es sencillísima no voy a entrar en más detalles. Sólo hay que ir a http://www.wampserver.com/en/ y seguir las instrucciones.


Página web de WampServer

Tras hacer la instalación tendremos un icono nuevo, llamado WampServer, y al lanzarlo nos aparecerá un nuevo “applet” en la barra de herramientas desde donde podremos lanzar/apagar el servidor y realizar algunas tareas de configuración.

Icono WampServer y panel de control


A través de los menús podremos activar y desactivar módulos de Apache y PHP así como acceder al gestor de bases de datos PHPMyAdmin. Activar un módulo es tan simple como hacer click sobre él; WampServer se reiniciará y el módulo estará disponible al momento.

También se puede realizar lo mismo a través de los ficheros de configuración correspondientes (httpd.conf, php.ini, my.ini) a los que se puede acceder a través del panel de control de WampServer.

Editando httpd.conf

Para comprobar que está correctamente instalado (tanto el servidor web como PHP) simplemente se ha de crear un fichero con el nombre, por ejemplo, info.php con el siguiente contenido:
<?phpphpInfo();
?>

Este fichero ha de guardarse en el directorio “root” de apache. Si no se han tocado demasiado las rutas será algo como c:\wamp\www. Una vez allí sólo habrá que dirigirse a http://localhost/info.php y comprobar que se obtiene alguna pantalla similar a la mostrada.

phpInfo()


Otro paso es comprobar la base de datos y ésto se puede hacer con phpMyAdmin desde el panel de control de WampServer. Debería aparecer algo similar a la imagen de abajo.

phpMyAdmin

Si algo falla habrá que bucear en internet para descubrir qué es, a menos que uno sea adivino. Se pueden consultar los logs de cada aplicación desde el panel de control de Wamp. Muchas veces serán problemas de módulos de Apache/PHP mal configurados (por lo que recomiendo desactivarlos todos e ir activándolos uno a uno hasta llegar al culpable) o conflictos con puertos (por ejemplo tener instalado el IIS a la vez que el Wamp)

Apache error log




Linux

Como he dicho me voy a basar en Ubuntu y sus derivadas y presupondré que se saben instalar programas para este sistema operativo. Como no soy tan mala persona como parezco ahí va una pista: en esta página hay muchísima información sobre ubuntu y cómo trastear con él - Slice of Linux.

Normalmente al instalar Linux se pueden seleccionar los paquetes a agregar así que es probable que alguna parte de los componentes esté presente ya. Aunque se lance la reinstalación la mayoría de sistemas de empaquetado de Linux son lo bastante inteligentes como para comprobar antes si ya existe el programa.

Yo soy de los que prefiere comenzar con una instalación básica sin demasiada porquería e ir añadiendo a mano lo que necesite. Como buena parte de lo que hago va a estar en servidores y abierto a internet me parece muy peligroso meter toda la mierda de golpe y dejarla descontrolada. Linux es seguro, sí, pero yo no pondría la mano en el fuego porque ningún programa no te vaya a abrir un puerto que no deseas o bajar una configuración que dé acceso a los “programas de hacking” que ejecutan los script kiddies por ahí.

Por otra parte rara será la empresa de hosting que te ofrezca un terminal remoto o un panel de control aceptable a precio razonable así que considero imprescindible, cuando instalo un entorno de integración o pre-producción, que sea lo más parecido al entorno real, sin aditivos innecesarios. Lo mejor es ver paso a paso cómo instalar un ubuntu server.

También es conveniente ver cómo instalar un sistema “AMP” paso a paso en Ubuntu 11.04 (vale también para otras versiones). Las diferencias con Debian u otras distribuciones que usan paquetes .deb son mínimas (quizás de versiones). Para el resto de distribuciones, pues habrá que buscar ayuda; yo hace años que no uso CentOS o Fedora. La culpa es vuestra por usarlas :-P

Es recomendable instalarse phpMyAdmin en Linux ya que, a diferencia de los “AMP” de Windows, no suele estar por defecto.

Prometo que, por ahora, Canonical no me paga nada para que haga publicidad de Ubuntu. Lo que pasa es que soy un poco muñón cuando toco cosas y si la cago prefiero tener dónde buscar soluciones... y los Ubuntus están hasta en la sopa. Lo fácil que es googlear “lamp ubuntu” y que te devuelva chorrocientos tutoriales y hacer lo mismo con Fedora y que se acaben en la página 1...

Bien lo importante de esta instalación es recordar que las páginas web deberán alojarse en el directorio “var/www” (o su equivalente que habrá que buscar convenientemente según la distribución usada).

En este punto tendremos un servidor Apache, con PHP y MySQL así que ya se puede empezar a trastear. Todavía no está “seguro” ya que, por ejemplo, la clave de root en MySQL es probable
que esté en blanco o que sea un verdadero coñazo ejecutar ciertos scripts desde phpMyAdmin.

Bonus - MySQL Workbench

Alguno, sobre todo los que provenimos del mundo Oracle, podría echar de menos el Toad, aunque existe una versión para MySQL. Pero, ¿para qué pagar cuando puedes tener una herramienta similar, o incluso mejor, de forma gratuita?

De las pocas cosas buenas que hizo Oracle cuando compró MySQL fue unificar todas las herramientas de cliente en una sola: MySQL Workbench. Entre las cosas malas que hicieron fue subir los precios, pero ya lo criticaré si lo veo conveniente.

Con esta herramienta se pueden ejecutar scripts, acceder a las base de datos y a sus objetos, diseñar visualmente el modelo de datos e incluso controlar los servidores (start, stop, backups...). Así que recomiendo encarecidamente que cualquiera que vaya a trastear con bases de datos se lo instale.

MySQL Workbench. Tomada de www.mysql.com

En Windows es fácil: descargarse el ejecutable y lanzarlo. En Linux o bien está el programa en la lista de “instalables” o habrá de hacerse a mano (ésto para ubuntu https://help.ubuntu.com/community/MySqlWorkBench). Lo malo es que es muy probable que después de que Oracle haya metido las zarpas ya no exista un versión Open Source que pueda incluirse en los repositorios.



Bonus II - Cambio password de root (mySQL)

Tal como suelen estar las instalaciones por defecto en mysql la verdad es que de seguridad, poca. En Linux es probable que sí haya solicitado una password pero con Windows, y con el WampServer, estoy casi seguro que la password será “en blanco” (no literalmente... password vacía).

Con phpMyAdmin se puede cambiar la password sin problemas desde la pestaña de Privilegios y editando el usuario afectado.




Tras cambiar la password, phpMyAdmin dejará de funcionar y habrá que editar el archivo config.inc.php para incluir las nuevas credenciales.


Bonus III - Panel de Control Web en Linux

Cuando trabajo con servidores Linux me resulta un engorro el tener que entrar por telnet para reiniciar servidores o editar ficheros, sobre todo para lo último. Si el ordenador está cerca y es accesible al 100% no hay problema ya que siempre se puede instalar un entorno gráfico y la cosas se facilita. Si el ordenador está a 3000 km en un hosting podemos morirnos con los tiempos de latencia: movemos el ratón y, tras un café o dos, responderá al otro lado (sí, exagero).

En estos casos “remotos”, si nuestro proveedor de hosting no nos provee de un panel “chachi” como cPanel (de pago) tenemos todavía una opción free: Webmin.

Con este panel de control podemos controlarlo todo de manera visual y usando un navegador. Usa applets Java (puaj!) para ciertos servicios, pero es un mal menor. No es que la línea de comandos no sea bonita pero si nos ponen las cosas algo más fáciles acabaremos antes.



Como ya otros han escrito sobre el tema me ahorro el hacerlo yo. Para instalar: http://sliceoflinux.com/2009/09/07/instalar-webmin-en-ubuntu-paso-a-paso/. ¡Ojo! hay que tener cuidado con las versiones de Wembin o de sus dependencias. Lo mejor es ir a la página y asegurarse de que estamos descargando la versión más reciente.

Bonus IV - Activar/desactivar módulos de Apache (y PHP)

Usando WampServer en Windows es tan sencillo como poner o quitar el check en el módulo afectado (poner es pulsar una vez, quitar, es pulsar otra vez, el servidor se reiniciará cada vez que se cambie).




Sucede lo mismo para activar o desactivar módulos de PHP (excepto algunos que se verán más adelante).



Con Linux (basadas en Debian) es similar, pero en vez de usar el ratón se usarán los comandos "a2enmod" (activar) y "a2dismod" (desactivar) seguidos del nombre del comando. Por ejemplo, para activar el módulo rewrite (mod_rewrite):
a2enmod rewrite

Si nuestro Linux no dispusiese de este comando habría que buscar una alternativa o editar el fichero httpd.conf (normalmente en /etc/apache2) y comentar o descomentar la línea del módulo afectado.

En el caso de los módulos PHP no recuerdo si existe algún comando similar así que lo que se suele hacer es editar el fichero php.ini (su ubicación cambia según la distribución) y comentar o descomentar “lo que sea”.




Tras seguir todos estos pasos ya disponemos de la base para ejecutar programas con PHP. Realmente dispondremos de un servidor que podríamos publicar hacia internet y al que se podría acceder (usar la opción “Put Online” o su equivalente en castellano del panel de control de WampServer) desde fuera.

Dando acceso al servidor para internet

Es más, como tenemos un servidor Apache hecho y derecho, nada nos impediría instalar otros módulos para otros lenguajes, por ejemplo Python o Ruby. En un futuro escribiré algo sobre cómo trastear con ello y cómo trastear con otros servidores web y bases de datos.

Si a alguien le apetece jugar que pruebe a instalar un gestor de contenidos (CMS), como por ejemplo Drupal. Funcionará seguro, aunque es probable que haya que activar algún módulo.

Por ahora lo dejo aquí. Espero no haber olvidado nada.

Salut!

2 comentarios:

Edu dijo...

Lo fácil que es googlear “lamp ubuntu” y que te devuelva chorrocientos tutoriales y hacer lo mismo con Fedora y que se acaben en la página 1...

Me gustó esta puya XD

MySQL Workbench, si no recuerdo mal, está en los repositorios de Ubuntu (quizá haya que activar uno extra). En cualquier caso si supuestamente vas a escribir un programa, no creo que cueste mucho trabajo encontrar la información o de otro modo casi que mejor que te repienses eso de programar (no va por tí).

Personalmente, nunca me gustaron los paneles de administración tipo web o gráficos en Linux. Supongo que por que estoy acostumbrado a usar el terminal (curré un par de años de administrador y ahí se gestionaba todo a través SSH). Pero para según qué tareas rutinarias (gestionar usuarios, grupos, ver logs, etc) entiendo que te facilitan mucho la vida.

El artículo está muy currado. Me gustó. Pero me interesará bastante más cuando llegues a la parte de xdebug :-P

Salut

Impalah dijo...

El Wembin está cojonudo cuando no te acuerdas de la sintaxis de las cosas. Por ejemplo para configurar el crontab o para crear servicios... y para lanzar y parar servidores y toquetear las configuraciones, porque te las deja todas juntitas en un solo sitio.
Sobre el xdebug, me pongo a ello.