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 />¿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‘).
Puesto que tenía en mente hacer una instalación de un servidor web voy a seguir lo que expones.
Hecho en falta, por mi desconocimiento abrumador de linux, una aclaración de como aumentar/montar más espacio en la tarjeta SD. La compartición de ficheros por red también puede ser útil, estoy pensando en páginas con gran cantidad de información.
Cuando se quiere cambiar el tamaño de una partición se suele llamar “reparticionamiento” ó “resize partition”, la nueva versión de Debian (por ahora está en fase beta) tiene un asistente inicial que redimensiona la partición /boot para hacerla lo más pequeña posible y dejar todo el espacio a la partición principal. Pero para añadir más espacio lo mejor (y más recomendado) es utilizar un disco duro USB que se alimente por el USB (consumen menos energía que los alimentados con una fuente externa). Al utilizar un HUB con corriente aumentará el coste energético a cambio de obtener muchos gigas de espacio.
En todo caso, y es algo que no mencioné en el artículo, las tarjetas SD no están preparadas para “demasiados” ciclos de lectura/escritura así que no durará eternamente sin fallar, por lo que las copias de seguridad frecuentes son casi obligatorias (mínimo 3 a la semana). En Linux hay cientos de programas para automatizar las copias de seguridad.
Resumiendo, y lo que yo haría: Tarjeta SD con el servidor instalado, HUB USB con el disco duro de 2.5″ (que son los alimentados por el USB) donde se almacenan los archivos de las páginas web y una memoria USB donde se harían las copias de seguridad diarias (aunque lo ideal sería un 2º disco duro para hacer también copia de seguridad del disco principal).
Para la compartición de archivos ya dependen más factores, pues la conexión de casa es un gran cuello de botella. Desconozco el uso concreto que vas a darle, pero si es para archivos personales existe un CMS con el que se puede crear una nube personal (similar a Dropbox/Box y similares), se llama OwnCloud (http://owncloud.org/) y se puede instalar en el Raspberry Pi.
Simple y sencilla tu recomendación del disco duro, la seguiré aunque creo que, más temprano que tarde, deberé adquirir un concentrador USB alimentado.
Respecto a compartir ficheros quería hecerlo en una LAN de casa con varios ordenadores (windows) el raspi y algún otro aparatito conectado. Tengo una cantidad importante de información personal, 5 TB, que la quiero hacer accesible al raspi y su futuro servidor web.
Lo que quieres se puede hacer instalando y configurando Samba.
O si quieres destinar el Raspberry a compartir archivos en la red de casa lo que quieres es montar un NAS, en http://elinux.org/R-Pi_NAS encontrarás cómo hacerlo.
O_O
Dios mío, ¿dónde has estado tú toda mi vida?
Por cierto. Al asignar los permisos en Samba, si se contradicen con los permisos de Unix, mandan los de Unix, por lo tanto, si una carpeta no tiene permisos de escritura en Unix (Raspbian en este caso), aunque le demos permisos en Samba para escribir, no nos dejará modificar los archivos.
No sé si me explico 😛
Lo primero, ¡CoyáN gracias por este post! 😀
Lo segundo, por si le sirve de ayuda a alguien más:
-Yo puse ip estática a la raspi modificando el archivo /etc/network/interfaces.
– Al instalar mysql-server no terminaba la instalación y me daba el siguiente error:
“invoke-rc.d: initscript mysql, action “start” failed”
Y después de mucho buscar encontré la solución aquí: http://www.raspberrypi.org/phpBB3//viewtopic.php?f=50&t=14316
Era añadir “lo” a la línea dónde pone auto.
Quedando asi: auto lo eth0
Espero que si a alguien le pasa lo que a mi, esto le sirva de ayuda.
Un saludo y gracias de nuevo.
Me funciona todo menos mysql. Se instala perfectamente pero da error cuando lo arranco. He actualizado y nada. ¿Alguna idea?
Con tan pocos datos no sabría decirte. En esas ocasiones lo mejor es introducir el texto del error en el buscador de internet y seguramente des con la solución, pues tiene pinta de ser un error genérico y no específico de la Raspberry.
Gracias por la aportación.
Mi router me permite asignar una IP fija a un dispositivo y no me di cuenta de ese paso. Pero es cierto que poder disponer de una IP fija en el Raspberry te permite luego abrir puertos en el router sólo para el rasPi, para por por ejemplo para poder acceder por SSH desde fuera de casa.
Increíble!!, Grande Grande Grande, un tutorial perfecto como pocos!! Si señor a esto le llamo yo un tutorial. Un 10 para ti.
hola
si pincho en los enlaces[web original en ingles] me sale otra web.
Para intalar apache, mysql ¿me los tengo que bajar a la tarjeta ? o los descarga solos escribiendo
sudo apt-get install mysql-server mysql-client php5-mysql
gracias
Muchas gracias por este magnifico trabajo.
He aplicado todo el manual, por LAN todo perfecto, pero no consigo entrar desde fuera, hay algo que se me escapa y no consigo dar con ello. No me da ningún error, así que, continuaré intentando. Gracias de nuevo.
Efectivamente la web original ya no está disponible. He actualizado el enlace utilizando la WayBackMachine (una web que recopila las páginas web y permite visitar las que ya no existen).
Y por supuesto, al escribir los comandos el programa se baja e instala en la tarjeta SD. Sólo con ejecutar los comandos ya se instalan los programas.
Hola Enrique.
Yo intentaría mirar el tema de los puertos del Router, pues tiene toda la pinta de ser eso. Lo más seguro es que tengas que abrir el puerto de la Raspberry, si es para colocar una página web lo normal es utilizar el puerto 80.
Gracias por tu respuesta. Ya tengo abierto el puerto 80 y estoy intentando todo. Espero dar con ello en breve, yo tambien creo que es del router, pero no hay forma de conectar. Intentaré probar con otro router.
Buenas.
Estoy pensando en comprar un raspberry v2.0 para usarlo como servidor de descargas 24/7 junto con transmission y amule.
Pero la duda que tengo es su comportamiento y su rendimiento.
Si no es molestia, como se comportar el raspberry como servidor web?? Tiene mucha carga??
Gracias si puedes solucionarme esta duda…
Hola…
tengo un problemita cuando comienzo a instalar el apache, cuando coloco:
sudo groupadd www-data
me dice que ya existe.
luego coloco usermod -a -G www-data www-data
me dice permiso denegado.
“usermod: permission denied.
usermod: cannot lock /etc/passwd; try again later”
si sabes que ocurre xfis te agradeceria que me ayudaras 🙂
Graciiaass XD
Faltaba añadir “sudo” en la segunda línea. Ya lo he corregido en el texto de arriba. Gracias por el aviso.
La carga del Apache se nota bastante en la Raspberry, para webs personales con pocas visitas al día es una buena opción pues es muy barata y se aprende muchísimo. Pero para webs con muchas visitas, o si pretendes que sea algo más “estable” te recomiendo utilizar un alojamiento compartido.
chevere ahora si corrio fino…
Otra cosita por casualidad no tienes alguna informacion de como controlar los gpio por php?
XD gracias…
En los talleres que realicé en el IEEEsb-UniOvi utilizamos WiringPi pero si no quieres complicarte demasiado también existe una librería que directamente trabaja en una web, se llama webIOpi.