raspberry_cloud

Convierte tu Raspberry Pi en tu propia nube privada desde cero

Una de las bondades que nos ofrece una Raspberry (este tutorial es compatible con todos los modelos) es la posibilidad de, con un coste mínimo de electricidad, montar nuestra propia nube de ficheros privada, o mejor dicho, en un servidor de ficheros con permisos y gestión de usuarios. Esto nos permitirá tener un ecosistema para compartir ficheros entre amigos o familiares sin tener que gastar un euro en ningún servicio de almacenamiento online y con toda la seguridad que nos ofrece conservarlo en el ámbito privado.

En el tutorial voy a explicar paso a paso el proceso, de la forma más sencilla posible, si bien se presupone que se tienen unos mínimos conocimientos de informática disponiendo de una Raspberry Pi y dispuesto a montar una plataforma online. La mayor limitación que tendremos es la potencia del dispositivo (mala por ejemplo para meter varios ficheros en un comprimido) y el puerto de red, limitando la subida a 100Mbps. Por lo demás, para un uso doméstico o familiar, es perfecto. ¡Vamos allá!

 

Parte 1: Instalación y configuración básica de la Raspberry Pi y el servidor VNC

El primer paso es acudir a la página de descargas de Raspberry y bajar la última versión de la distribución NOOBS, ya que nos facilitará la instalación. Si bien podemos escoger entre varias distribuciones (Raspbian, Ubuntu Mate, Fedora, etcétera), en nuestro caso iremos con Raspbian, ya que nos ofrece todo lo que necesitamos y al mismo tiempo es la distribución (hasta la fecha) más optimizada para el dispositivo, permitiendo así que posteriormente todo el sistema web funcione de forma más fluida.

Una vez tengamos NOOBS descargado (o la distribución que queramos usar directamente), procedemos a instalarlo en la MicroSD siguiendo los pasos que están en el fichero de instrucciones.

Consejo: Si bien el sistema funcionará fluido en muchas tarjetas MicroSD, será de vital importancia contar con una tarjeta rápida para que todas las operaciones de entrada y salida se realicen de forma eficaz. En este sentido, si bien las tarjetas como las Evo Pro de Samsung nos van a ofrecer un muy buen rendimiento, la relación calidad / precio óptima son las tarjeta Evo normales. Normalmente, con 32GB será más que suficiente para el sistema y futuras instalaciones. Podéis echar un ojo a estas tarjetas aquí.

Una vez tengamos la MicroSD preparada, la insertamos en nuestra Raspberry  y empezaremos con el proceso de instalación. Es aconsejable conectar el cable de red desde un inicio, ya que nos ofrecerá las últimas actualizaciones. La plataforma nos mostrará una pantalla con varios instaladores, en nuestro caso escogeremos Raspbian. Recordad que podéis conectar cualquier teclado USB y realizar las operaciones con el mismo hasta que nos conectemos en remoto, aunque a mi particularmente me resultan muy útiles los pequeños teclados inalámbricos, ideales para este tipo de acciones ya que son compatibles con todos los sistemas operativos y plataformas. Yo particularmente estoy muy satisfecho con este.

El instalador comenzará el proceso y él mismo se encargará de darle formato a nuestra tarjeta en ext4, así como de “expandir” el sistema operativo para ocupar toda la MicroSD, y ahora solo queda esperar a que finalice y tendremos ya disponible la primera entrada al escritorio de nuestra Raspberry. El primer paso es abrir un terminal y escribir “ifconfig” para conocer la dirección IP local que tenemos en nuestro dispositivo. Esta dirección vendrá asignada por el router de forma automática, y puesto que va a ser un dispositivo fijo en nuestra red, es imprescindible que configuremos una dirección IP estática, ya sea mediante el propio dispositivo (normalmente) o mediante el router, si disponemos de alguno más avanzado que el habitual de las teleoperadoras.

Una vez tengamos la IP estática asignada de una forma u otra, vamos a proceder a instalar un servidor VNC en nuestra Raspberry, para poder conectarnos de forma sencilla sin necesidad de tenerla conectada a una pantalla. Para ello, ejecutamos una terminal e introducimos:

sudo apt-get update

sudo apt-get install tightvncserverTerminal

Con esto habremos actualizado el sistema y tendremos nuestro servidor VNC instalado. A continuación escribimos en la terminal “vncserver :1” (es importante el espacio entre la r y el doble punto, así como el NO espacio entre el doble punto y el 1, si no, no funcionará) y nos preguntará por una contraseña de acceso. Posteriormente nos preguntará si queremos una contraseña de solo lectura, que en este caso, no.

A continuación, arrancaremos de forma definitiva nuestro servidor VNC, con el siguiente comando:

vncserver :1 geometry 1920×1080 depth 24 -dpi 96Terminal

El número nos está indicando al escritorio al que nos conectamos (podríamos crear tantos escritorios como nos fuese necesario), la geometría la resolución, la profundidad es el color y los puntos por pulgada, ya que si no se vería todo el texto muy pequeño. En estos momentos ya podríamos conectarnos a nuestra Raspberry, pero nos falta un último detalle, y es que el servidor arranque de forma automática cada vez que se reinicie la Raspberry. Para ello introduciremos en la terminal “nano /etc/init.d/vncboot” y pegaremos el siguiente código:

#!/bin/sh
### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
 
USER=root
HOME=/root

export USER HOME

case "$1" in
 start)
   echo "Arrancando servidor VNC"
   #Puedes adaptar el escritorio o la resolución a tus necesidades
   /usr/bin/vncserver :1 -geometry 1920x1080 -depth 24 -dpi 96
   ;;

 stop)
   echo "Stopping VNC Server"
   /usr/bin/vncserver -kill :0
   ;;

 *)
   echo "Usage: /etc/init.d/vncboot {start|stop}"
   exit 1
   ;;
esac

exit 0

Terminal

Pulsamos control + o para guardar y a continuación escribimos los siguientes comandos:

chmod 755 /etc/init.d/vncboot

sudo update-rc.d vncboot defaults

Terminal

A continuación reiniciamos nuestra Raspberry Pi y mientras descargaremos un cliente de VNC para el control remoto desde nuestro PC. En mi caso he optado por Tight VNC para Windows, pero podéis elegir el que más os guste (Real VNC, Ultra VNC, etcétera) y los hay tanto para Linux como para MacOS también. Para conectarnos, usaremos la dirección IP local de nuestra Rasp y le añadiremos el escritorio, por ejemplo: 192.168.1.20:1

Screenshot_19

Si la conexión no funcionase, significaría que la ejecución automática no ha funcionado correctamente. Es lo más problemático de la instalación y tiene algunos problemas. En este caso podemos simplemente volver a ejecutar en un terminal “vncserver :1 -geometry 1920×1080 -depth 24 -dpi 96” para poder realizar la conexión.

Parte 2: Servidor web

Antes de proceder con la nube privada, primero tenemos tres tareas por hacer: servidor web, servidor MySQL y PHP, así que ejecutamos los siguientes comandos del tirón:

sudo groupadd www-data

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

sudo apt-get install apache2

sudo apt-get install php5

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

sudo apt-get install mysql-server mysql-client php5-mysql (Leer a continuación)

Terminal

Este último paso nos preguntará por la contraseña de root para MySQL. Es importante que la recordemos posteriormente, ya que si no resultará imposible operar con ello. En estos momentos tenemos casi todo lo necesario instalado, así que vamos a proceder a reiniciar nuestra Raspberry para continuar con el proceso de configuración, y de esta forma nos aseguramos de que todo ha ido correctamente.

Una vez reiniciado, vamos a instalar PHPMyAdmin para poder gestionar en el futuro las bases de datos de forma adecuada. Para ello introduciremos en la consola “sudo apt-get install php5-mysql phpmyadmin“. Se nos preguntará por el servidor usado (Marcamos Aapache) y por el uso de una base de datos (Sí), así como la contraseña que introdujimos en el paso anterior. Por último, nos preguntará por la contraseña que PHPMyAdmin tendrá para acceder a la base de datos, que puede ser idéntica o diferente a la de root.

A continuación editaremos el fichero de configuración de PHP con “sudo nano /etc/php5/apache2/php.ini” y le añadimos en cualquier línea “extension=mysql.so“. Por ser un poco organizados, lo ideal es guardarlo al final del todo, para que así en el futuro de un solo vistazo podamos ver fácilmente que hemos añadido o quitado respecto a la configuración original.

Para comprobar si todo ha funcionado correctamente, desde nuestro ordenador habitual podemos acceder al navegador e introducir IPRaspberry/phpmyadmin/, siendo el usuario root y la contraseña la introducida en el paso anterior.

El último paso de configuración será asegurar nuestra base de datos. Para ello introduciremos en el terminal “mysql_secure_installation” y mediante un menú interactivo debemos contestar, como mínimo, sí a la eliminación del usuario anónimo y de las tablas de pruebas. Si queréis usar PHPMyAdmin y otros servicios desde vuestro ordenador habitual en lugar de tener que conectaros por VNC a la Raspberry, contestad no a la pregunta de deshabilitar el login remoto de root.

Como paso adicional, si queremos usar nuestra Raspberry desde cualquier lugar del mundo y no solo desde nuestra red local, y no disponemos de una dirección IP estática, tendremos que configurar un servicio de DNS dinámico en nuestra red entre los muchos disponibles y abrir nuestro puerto en el router. Si necesitáis realizar este paso, podéis consultar un tutorial desde aquí.

Parte 3: Tu nube privada

El último paso, y donde culminaremos el tutorial, es la instalación de Pydio. Disponemos de numerosas opciones para crear nuestra nube privada, siendo las alternativas más interesantes Owncloud o Pydio, y en nuestro caso vamos a optar por la segunda ya que la gestión de permisos, ficheros y las posibilidades que nos ofrece de añadir más unidades (como discos USB o discos en red) al dispositivo son mejores.Pydio está disponible en versión enterprise (de pago) y community (gratuita). La versión comunitaria dispone de las mismas funciones, por lo que no nos supondrá ningún problema. Pydio os sonará porque en el pasado era conocido como AjaxExplorer.

Para comenzar, ya desde la Raspberry, acudimos a la página de su código fuente y nos descargamos el paquete más reciente. A fecha de escritura de este post se trata de la versión 6.2.1, por lo que descargamos el paquete .tar.gz. Una vez descargado, podemos extraerlo en nuestro directorio de descargas y cambiar el nombre de la carpeta por algo más razonable, por ejemplo, gestor.

Una vez extraído, tendremos que copiar los ficheros al directorio web, para lo cual desde una terminal escribimos “sudo mkdir /var/www/html/gestor && sudo cp -R /home/pi/Downloads/gestor/* /var/www/html/gestor“, y posteriormente “sudo chmod -R 777 /var/www/html/gestor/data“.

A continuación vamos a crear una base de datos dedicada para el programa, por lo que podemos escribir en la terminal “mysql -u root -p“, y se nos preguntará por la contraseña de root de MySQL que establecimos previamente. A  continuación escribiremos una serie de comandos en MySQL, por lo que especial atención a las comillas simples y a los punto y coma de finalización. Podemos cambiar el nombre de la base de datos y del usuario (de hecho, es recomendable), y no olvidemos cambiar pydiopassword por la contraseña de verdad.

create database pydiodb;

create user pydiouser@localhost identified by ‘pydiopassword’;

 grant all on pydiodb.* to pydiouser@localhost;

FLUSH PRIVILEGES;

exitMySQL

Ahora vamos a proteger nuestro directorio de datos para evitar que sea accedido sin los permisos adecuados. Para ello, introduciremos en la terminal “sudo nano /var/www/html/gestor/data/.htaccess” y lo dejamos así.

Screenshot_20

Como paso final antes de finalizar, vamos a desactivar una directiva de PHP que nos ofrecerá mejor rendimiento en Pydio. Para ello escribimos en la terminal “sudo nano /etc/php5/apache2/php.ini” y donde pone “output_buffering = 4096” cambiamos a “output_buffering = Off” y guardamos, tras lo cual reiniciamos el servidor Apache (“sudo service apache2 restart”).

En estos momentos estamos listos para proceder con la instalación y primera ejecución de Pydio, para lo cual accederemos mediante el navegador a IPRaspberry/gestor/, y se nos ofrecerá una pantalla informativa con algunas cosas en OK y otras en Warning. Si bien es recomendable corregir los warning, podemos proceder con seguridad pulsando en “Click here to continue to Pydio”. Empezaremos ahora un recorrido de instalación verdaderamente sencillo donde iremos anotando algunos parámetros.

Screenshot_21

Screenshot_22

En esta ventana anterior tendremos que introducir el nombre de la base de datos, el usuario y la contraseña de la misma, además, podemos activar de forma segura la opción de usar MySQLi. Antes de proceder, es recomendable pulsar sobre test de conexión para verificar que la información es correcta.

Screenshot_23

En el último paso antes de finalizar la instalación, seleccionaremos la codificación por defecto (UTF-8), la ruta completa de nuestro servidor y habilitaremos la opción de envío de correo electrónico si queremos disponer de ella (podemos instalar sendmail con “sudo apt-get install sendmail” y hacer la configuración inicial con “sudo sendmailconfig“, además de escoger el idioma por defecto. Finalizaremos pulsando en instalar Pydio, y esperamos a que se complete el proceso, momento tras el cual accederemos a nuestra ventana de bienvenida donde podemos loguearnos con nuestro usuario recién creado.

A continuación podremos añadir otros espacios de trabajo, como por ejemplo, nuestro disco duro por USB o alguna unidad en red, donde tendremos todos nuestros ficheros. Y con esto finalizaría la instalación de todo el sistema en nuestra Raspberry, preparada para recibir conexiones desde cualquier lugar. Mi consejo es que juguéis todo lo que podáis con el sistema para averiguar todas sus posibilidades, y una vez esté completamente explorado, volváis a hacer una instalación limpia final.