Nextcloud 14 en la Raspberry PI con PHP 7.2 (3). Servidor web, PHP 7.2 y base de datos

Raspbian Stretch es una versión de Debian 9 optimizada para el procesador de la Raspberry, que no es uno normal de ordenador (x86 o x86_64), sino más parecido a los de los móviles (arm). Al estar basada en Debian, nos vamos a encontrar versiones muy probadas de las aplicaciones, pero en versiones no muy modernas. Por ejemplo, a fecha de hoy (29 de noviembre de 2018) PHP sigue en la versión 7.0.

Por su parte, MariaDB es una bifurcación (fork) de MySQL que tiene todas las características de MySQL y alguna más, aparte de (según parece) ser más rápida.

Y, por último, Apache es el servidor web, el programa que recibe las peticiones de otros ordenadores y manda páginas web. Hay otros servidores más ligeros (Nginx, lighthttp) que seguramente harían que la Raspberry en general y nuestra nube de Nextcloud en particular funcionaran algo más rápido, pero en mi caso opto por Apache por dos motivos. En primer lugar, porque es el único que he manejado y que algo entiendo de su configuración (poco, realmente poco, en realidad) y en segundo lugar porque hay algunas apps de Nextcloud que piden Apache.

Vamos a ver cómo podemos conseguir instalar Apache2, PHP 7.2 y MariaDB 10 en nuestra flamante Raspbian.

Para entender lo que vamos a hacer, es interesante saber cómo funcional los repositorios en Linux. En Windows, cuando instalamos un programa, nos bajamos un archivo que tiene todo lo que necesita el programa. Es sencillo, pero si varios programas necesitan lo mismo, tendremos eso tres veces en lugar de solo una. En Linux el software se organiza en repositorios, servidores que contienen los programas organizados en paquetes, de tal manera que si tres aplicaciones necesitan PHP, por ejemplo, en lugar de que cada aplicación incluya PHP, las tres declaran que necesitan PHP y se instala una sola vez. Es una solución elegante, aunque puede dar problemas de dependencias (esas necesidades se llaman dependencias y

 

Instalación del servidor Apache y la base de datos  MariaDB

Este es el paso más sencillo. Consiste simplemente en ejecutar la orden sudo apt install apache2 mariadb-server. Podemos comprobar que ha funcionado así:

  • Apache: abrimos un navegador y en la barra de direcciones (no en Google, sino ahí arriba del todo, donde ahora mismo pone polkillas.net y un montón de cosas más) ponemos la dirección IP de nuestra Raspberry. Ya sabemos: 192.168.xx.xx. Debería aparecer la siguiente pantalla:
    Página por defecto de Apache2 en Debian
  • MariaDB: entramos en la Raspberry vía SSH  y escribimos sudo mysql --user=root mysql,  lo que debe hacer que el cursor cambie a los siguiente:
    Prompt de MariaDB en Raspbian

Ahora, lo siguiente no es la opción más segura, pero es la primera vez que me meto a crear tablas en línea de comandos, sin usar PhpMyAdmin, como hacía antes, así que si estás preocupado por la seguridad te recomiendo que busques un poco más que esto, que es un apaño. La cuestión es que con esto vamos a crear un usuario diferente al usuario root de MariaDB y le vamos a dar todos los permisos. Lo ideal sería crear este usuario con permisos solo en la tabla que va a manejar Nextcloud, pero no he sabido hacerlo. Veamos cómo, sabiendo que es importante que cada línea de de SQL en MariaDB acabe en punto y coma.

Creamos el usuario con la orden
create user 'USUARIO'@'localhost' identified by 'CONTRASEÑA;
cambiando las mayúsculas por el usuario y contraseña que queramos. Le concedemos derechos de uso con
grant all privileges on *.* to 'USUARIO'@'localhost';
Esto significa dar todos los privilegios en todas las bases de datos al usuario que hemos creado, y recargamos los privilegios de MariaDB con
flush privileges;
A continuación creamos la base de datos para Nextcloud con
create database NOMBREDELABASEDEDATOS;
y hemos terminado con esto.+

Instalación de PHP 7.2

Esta parte me ha costado sangre, sudor y lágrimas porque cada vez que llegaba aquí me daba un error, y resulta que la causa era tan sencilla como que me había quedado sin espacio libre en el disco duro de la Raspberry, así que fallaba. Así que es fácil.

Para instalar esta versión, la más moderna de PHP (ya existe 7.3, pero tengo entendido que no es estable), debemos añadir a nuestro servidor un repositorio nuevo, puesto que por defecto en Raspbian solo tenemos PHP 7.0. El desarrollador que se encarga de estos paquetes, Ondřej Surý,  es tan buena gente que mantiene un repositorio propio con paquetes mucho más actualizados. Lo hacemos siguiendo estas instrucciones.

sudo apt-get install apt-transport-https lsb-release ca-certificates (instalamos unos paquetes que nos permiten hacer el resto)
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg (descargamos y colocamos en su sitio la clave pública del repositorio, que firma los paquetes para identificarlos de forma confiable)
sudo echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list (añadimos la información del repositorio en el directorio que contiene la información que usa apt)
sudo apt update && sudo apt install php7.2 php-redis php7.2-cli php7.2-curl php7.2-gd php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-xml php7.2-xmlrpc php7.2-zip libapache2-mod-php7.2 (actualizamos e instalamos los paquetes necesarios)

Podemos comprobar que lo hemos hecho bien escribiendo php -v en el terminal y nos debe aparecer el númer oexacto de versión). También podemos crear un archivo de información para verlo en el navegador. Esta versión es más chula y da más información, lo cual puede ser peligroso si nos quieren atacar, así que la recomendación es borrar este archivo después de comprobar que lo hemos hecho bien.

creamos el archivo con sudo nano /etc/www/html/info.php y escribimos lo siguiente en su interior:

 

<?php
phpinfo();
?>

Guardamos con CTRL-X, s y lo vemos en el navegador en la direción http://192.168.xx.xx/info.php, que debe dar algo parecido a esto (se ve cómo estaba en la versión anterior de este tutorial, con PHP 7.0:

 

Resultado de phpinfo

 

Retoques y mejoras

De inicio, tanto MySQL como MariaDB vienen con ciertas configuraciones de prueba que es mejor eliminar. Para ello escribimos sudo mysql_secure_installation (truco sacado de aquí) y respondemos las preguntas:

mariadb

Se pide, lo primero la contraseña del usuario ‘root’. El error que aparece se debía a que no recordaba qué contraseña había puesto, y tuve que probar dos. Con la nueva versión no hay contraseña de root, así que te propone crear esa contraseña.

mariadb2

Después nos pide eliminar el acceso anónimo, que es una buena idea, y deshabilitar el acceso del usuario root desde otro ordenador que no sea la Raspberry. También sugiera eliminar una base de datos de prueba, que es innecesaria. Decimos que sí (y) a estas tres preguntas.

mariadb3

Por último, sugiere recargar las tablas de privilegios (lo que quiera que eso quiera decir), También aceptamos y listo.

Otros prerrequisitos de Nextcloud

Para poder ver vistas previas de las imágenes que subamos a nuestra nube, necesitamos instalar un programa como ffmpeg:

sudo apt-get install ffmpeg

3 comentarios

    • Felix sanchez en 25/04/2019 a las 8:18
    • Responder

    Buenos dias.

    Cuando creo el archivo:
    creamos el archivo con sudo nano /etc/www/html/info.php y escribimos lo siguiente en su interior:

    anteriormente en el archivo , nano /etc/www/html/info.php me da error de directorio no esiste y cuando pego el comando :

    e intentto guardar con Control X da error writing. a partir de ses puento nopuedo avanzar. Grraias y saludos.

      • Miguel Silva en 27/06/2019 a las 17:57
      • Responder

      La ruta correcta es /var/www/html

        • Felix sanchez en 28/06/2019 a las 13:18
        • Responder

        Gracias voy a probar.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.