Servidor web con Raspberry Pi

Logotipo de Raspberry Pi

Raspberry Pi girando

Antes de empezar recomiendo tener instalado y configurado la versión de Debian oficial de la web de Raspberry Pi. En la web del IEEEsb-UniOvi he escrito un artículo explicando los pasos para instalar y configurar adecuadamente el sistema.

Servidor Web

Hay que instalar/configurar 6 tipos de programas: Acceso SSH (para administrar remotamente), Apache (servidor), PHP (para las páginas dinámicas), MySQL (base de datos), phpMyAdmin (para administrar fácilmente las bases de datos) y Cliente de DDNS (para mantener actualizada la IP de casa).

Para ello usaré el manual publicado en: , y pondré aquí un resumen (recomiendo visitar la web original, pues viene todo explicado paso a paso).

Habilitar SSH

Nos permitirá ejecutar los comandos de la consola desde otro ordenador y de paso podremos acceder a los ficheros del Raspberry Pi usando un cliente de sFTP (recomiendo utilizar FileZilla).

Comandos a ejecutar (en el Raspberry Pi):

sudo service ssh start

Para iniciar el servicio ssh.

sudo insserv ssh

Para que se inicie siempre que encendamos el Raspberry Pi se pueda utilizar el SSH. Desde que ejecutamos ésto, los siguientes comandos que hay en este manual se pueden ejecutar desde el propio Raspberry Pi o desde otro ordenador (conectándonos al Raspberry Pi usando SSH).

Servidor Web – Apache

[Texto original, en inglés] Para que todo funcione se necesita instalar el propio servidor, el más común es Apache. Antes de empezar hay que prepararse para que todo funcione. Primero crearemos el grupo de usuarios para el servidor:

sudo groupadd www-data
sudo usermod -a -G www-data www-data

Y después actualizamos los repositorios para evitar fallos en la instalación:

sudo apt-get update

Llegados a este punto, y antes de empezar la instalación también recomiendo actualizar los posibles programas que tengamos sin actualizar, mediante el comando:

sudo apt-get upgrade

Ahora ya podremos instalar el Apache:

apt-get install apache2

Si todo ha ido bien, podremos visitar desde el navegador la página web de prueba, se titulará “It works!” y un par de frases más. Si no funcionara nos daría un error de no encontrado. Para poder visitar la web desde otro ordenador de nuestra habrá que conocer la IP del Raspberry Pi (en la web de las instrucciones hay capturas de pantalla más esclarecedoras) y para saber la IP se ejecutará el comando:

ifconfig

En el que el apartado “inet add:” veremos la IP (de la red eth0). Habitualmente será algo del tipo 192.168.10.xx
NOTA: La IP 127.0.0.1 es una IP reservada que se usa para conectarse al propio ordenador o para comprobar que funciona la Red, más información en la Wikipedia: Localhost.

Accedemos con el navegador a la IP del Raspberry Pi desde nuestro ordenador: http://192.168.2.105 (en tu caso será otra IP diferente). Si queremos añadir más ficheros, carpetas y similar se encontrarán en el directorio /var/www/ del Raspberry Pi. Hagamos un Hola mundo:

sudo nano /var/www/holamundo.htm

Y escribimos lo siguiente en el fichero:

<html>
<head>
<title>Titulo de la web</title>
</head>
<body>
<h1>Hola mundo</h1>
<p>Acabo de escribir mi primera web en mi Raspberry Pi.<br />&iquest;Mola, no?</p>
</body>
</html>

Para cerrarlo, como siempre, Control+X, nos preguntará si quieres guardar el búfer (pulsando la S, para decir que sí) y luego ENTER para guardar el fichero con el nombre que pusimos antes. Ahora si visitamos: http://192.168.2.105/holamundo.htm veremos nuestra página web.

SERVIDOR WEB – PHP

[WEB original, en inglés] Con Apache se pueden mostrar páginas con HTML, pero para hacer webs “de verdad” será necesario poder ejecutar contenido dinámico, y en esto el PHP es el rey. Procedamos a su instalación:

sudo apt-get install php5

Tras terminar, instalemos los demás paquetes que podríamos necesitar (en la web original ponen más paquetes, así que pongo lo que a mi me funcionó):

sudo apt-get install libapache2-mod-php5 libapache2-mod-perl2 php5 php5-cli php5-common php5-curl php5-dev php5-gd php5-imap php5-ldap php5-mhash php5-mysql php5-odbc

Tras esta segunda instalación, reiniciar (sudo reboot).
Y para comprobar que funciona, haremos la web de pruebas de PHP, que consiste en una única función (son los mismos pasos que para crear la web en html):

sudo nano /var/www/phpinfo.php

Y luego rellenar el fichero con lo siguiente:

<?php
  phpinfo();
?>

Si al entrar en http://192.168.2.105/phpinfo.php (usar la IP que corresponda) vemos una web con mucha información es que todo ha funcionado correctamente.

SERVIDOR WEB – MySQL

[WEB original, en inglés] Con Apache y PHP ya podremos hacer webs dinámicas y muy chulas, pero en cuanto nos demos cuenta, necesitaremos una base de datos, lo más normal es utilizar MySQL, instalémoslo:

sudo apt-get install mysql-server mysql-client php5-mysql

Tras la instalación, reiniciar. Y al terminar de reiniciar iniciaremos el servidor de MySQL:

sudo service mysql start

Para comprobar que funciona ejecutaremos el siguiente comando (siendo CONTRASEÑA la contraseña que hayamos puesto antes, ¡ojo, que delante de nuestra contraseña hay que poner una “p”):

mysql -uroot -pCONTRASEÑA

Si aparece “mysql>” en la pantalla es que todo ha funcionado. Para poder volver a ejecutar comandos de Linux normales pulsaremos Control+C y desaparecerá el “mysql>” para mostrar el habitual “pi@raspberrypi:~$“.

Durante la instalación preguntará por la contraseña del administrador de la base de datos, recomiendo utilizar una contraseña segura y diferente de la que usemos en el Raspberry Pi.

SERVIDOR WEB – phpMyAdmin

[WEB original, en inglés] Para administrar una base de datos MySQL lo más sencillo es utilizar phpMyAdmin, pues tiene una interfaz web con mucha ayuda y fácil de utilizar.

sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin

Durante la instalación nos preguntará qué tipo de servidor tenemos, seleccionaremos Apache (aparece un * en los corchetes, se marca/desmarca con el espacio y se acepta con el ENTER). Después preguntará si se quiere configurar la base de datos, diremos que sí. Y nos preguntará por la contraseña de MySQL (la que pusimos antes) y a continuación por una contraseña para phpMyAdmin (recomendable que sea diferente, pero si es para pruebas podemos usar la misma). Al finalizar editaremos el siguiente fichero:

sudo nano /etc/php5/apache2/php.ini

El siguiente código se puede escribir en cualquier sitio, pero para ser coherentes bajaremos unos dos tercios de la web hasta encontrar la sección “Dynamic Extensions” y escribiremos en una nueva línea (es decir, que la línea no empiece por “;”), yo lo hice justo después del título:

extension=mysql.so

Guardamos el fichero con los cambios efectuados y visitamos la siguiente web (usando la IP que tenga nuestro rasPi): http://192.168.2.105/phpmyadmin/ En este punto es muy posible que no funcione, ejecutaremos los 2 siguiente comandos:

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
sudo /etc/init.d/apache2 reload

Tras ejecutarlos actualizar en el navegador (en lugar de pulsar F5 pulsar Control+F5). Si pese a todo no funcionase, reiniciar el Raspberry Pi.

En la web del phpMyAdmin el usuario será root y la contraseña la que hayamos elegido cuando lo instalamos.

SERVIDOR WEB – IP dinámica

Con casi total seguridad en nuestra casa tendremos una IP dinámica (esto significa que cambiará de vez en cuando). Para que nuestra web esté siempre visible necesitaremos algo estable y permanente en el tiempo. Para eso existen servicios como DynDNS ó No-IP, además de crear una cuenta en esos servicios necesitaremos instalar un programa en el Raspberry Pi que mantenga actualizada nuestra IP actual [Web original]:

sudo apt-get install ddclient

Durante la instalación preguntará los datos de registro. Y si queremos ejecutar el cliente cuando establezca una conexión PPP, diremos que no, para que se ejecute como demonio, y ejecutaremos la comprobación según las veces que reiniciemos el módem ¿cada día? = comprobar cada 1h. ¿Cada mes? = comprobar cada 6h.

Si fuese necesario volver a cambiarlos podemos utilizar el siguiente comando:

sudo dpkg-reconfigure ddclient

SERVIDOR WEB – ¡FIN!

Y eso es todo, ahora tendremos un servidor web completo, no podremos tener miles de visitas, pero para hacer pruebas y publicar nuestra primera web es lo más barato que puede existir, ya que con el coste de la electricidad actual, tener el Raspberry Pi encendido las 24h durante todo el mes, nos costará un poco menos de 1,10€ mientras que cualquier hosting con características similares costará algo más del doble, entre 2 y 3€ mensuales.

Además podemos desconectar todo lo que tengamos al Raspberry Pi, pues con alimentar con un cargador de móvil (mínimo de 700mA) y poner el cable de red ya funcionará. Como tenemos el SSH no precisamos de ratón y teclado, ni mucho menos de una pantalla externa.

ERRORES ENCONTRADOS

Error – ServerName

Al iniciarse el Raspberry Pi dará un error con el siguiente texto:

“Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName”

Una manera de solucionarlo es escribiendo una nueva línea que contenga “ServerName nombre.servidordns.org” en los 2 ficheros diferentes:

  • Una nueva línea en el siguiente fichero:
sudo nano /etc/apache2/httpd.conf
  • Una línea para cada <VirtualHost …> que tengamos en:
sudo nano /etc/apache2/sites-enabled/000-default

Será necesario reiniciar Apache para que se apliquen los cambios.

REINICIO DE LOS SERVICIOS

Reinicio de Apache:

sudo /etc/init.d/apache2 restart

Reinicio de MySQL:

sudo /etc/init.d/mysql restart

Si se reemplaza “restart” por ‘stop‘ parará el servidor correspondiente (para arrancarlo sería necesario escribir ‘start‘).

Logotipo de Raspberry Pi