Raspberry: Instalando Apache, PHP, MariaDB y phpMyAdmin

En esta entrada vamos a instalar en nuestra Raspberry los siguientes elementos y por este orden:

      • Apache
      • PHP
      • MariaDB
      • phpMyAdmin

Apache

Si continuamos desde la anterior entrada deberíamos tener el aparatejo actualizado, pero por si acaso podemos volver a introducir los comandos para ver si hay alguna actualización nueva y que esta se cargue. Para ello, bien abrimos una ventana de consola de comandos o bien nos conectamos con PuTTY a nuestra Rasberry. Sea cual sea la opción elegida tecleamos:

Sudo apt-get update
Sudo apt-get upgrade

Ahora toca instalar Apache, para ello tecleamos la siguiente instrucción:

Sudo apt-get install apache2

Si todo ha ido bien, poniendo la ip de la Raspberry en el navegador nos tendría que salir una pantalla como esta:

Ahora aplicamos usuario y permisos:

Sudo chown –R pi:www-data /var/www/html/
Sudo chmod –R 770 /var/www/html/

Y ya está, con esto ya tenemos Apache instalado y funcionando. Nuestra Raspberry ya tiene instalado un servidor de páginas web.

PHP

Toca el turno a PHP. En este caso tecleamos:

Sudo apt-get install php php-mbstring

Esto instalará PHP 7 Podemos comprobar que se ha instalado bien y está funcionando creando una sencilla página web que albergue la instrucción phpinfo() y nombrándola como queramos, por ejemplo info.php  Para ello el código de la página ha de ser el siguiente:

<?php
phpinfo ();
¿>

Hay dos formas de hacer esto, bien desde Windows con nuestro editor de código favorito subiendo después el archivo al directorio /var/www/html/ de nuestra Raspberry, o bien desde la consola, con PuTTY o desde la propia Raspberry, con la siguiente instrucción:

echo “<?php phpinfo ();?>” > /var/www/html/info.php

Para mi gusto mucho más cómodo así, aunque es un buen momento si queremos probar el editor de código y el funcionamiento de WinSCP, Filezilla o similar para subir el archivo.

Ahora podremos ver si el PHP se ha instalado correctamente accediendo por el navegador a la ip de la Raspberry seguido de / y nuestro fichero. Si todo va bien veremos algo así:

Para acabar con PHP vamos a instalar SSH2 que lo necesitaremos más adelante:

sudo apt-get install php-ssh2

Esto lo vamos a necesitar cuando conectemos con la Raspberry a través del móvil con la aplicación en App Inventor que realizaremos. De momento solo lo instalamos y a otra cosa.

MariaDB

Aquí reconozco que me he llevado una sorpresa que me ha llevado a tener que modificar los encabezados. Mi intención era instalar MySQL, ya sé que es de Oracle y que MariaDB es libre como el viento, pero estaba acostumbrado a MySQL, yo qué sé, costumbres y manías de viejo, supongo. Sin embargo, aunque veréis por la instrucción que estas eran mis intenciones, me he encontrado con que lo que se ha instalado es MariaDB. Resulta que Raspbian Stretch, la versión que hemos instalado, ha sustituido ya MySQL por MariaDB, y aunque usemos la instrucción para instalar el primero, se carga la segunda.

sudo apt install mysql-server php-mysql

No obstante el funcionamiento es idéntico, así que es tiempo ya de cambiar y seguimos.

Ahora apañamos el usuario root para MariaDB. Este root no tiene nada que ver con el del sistema, es un usuario que tendrá todos los privilegios en la base de datos. Debemos ponerle un password, el que queramos y recordemos. A la base de datos nos conectaremos con ese usuario y su password, luego más adelante y por cuestiones de seguridad, ya crearemos otro usuario con menos privilegios, pero de momento configuramos root.

Y para ello lo primero que hacemos es conectar y esto se hace igual que con MySQL:

sudo mysql

Veréis un mensaje de bienvenida y que el prompt cambia. Hay que teclear tres comandos:

DROP USER ‘root’@’localhost’;

Con ese borraremos el usuario root

CREATE USER ‘root’@’localhost’ IDENTIFIED BY ‘aquí_pon_el_password’;

Con esto creamos el usuario y le asignamos un pass (creo que se ve claramente dónde ponerlo…)

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’;

Y con esto le damos todos los privilegios para todo, parafraseando a José Mota: “todo, en to, pa siempre” (aunque luego veremos que no es del todo así).

No obstante fijaos en la captura de pantalla de la terminal:

Veréis primero cómo se ingresa en MySQL, el mensaje que se muestra y el prompt que queda. A continuación de este veréis cada una de las instrucciones y la respuesta.

“Query Ok” viene a decirnos que la “consulta” o “query”, que así se llaman las instrucciones que introducimos en MySQL, se ha ejecutado correctamente. “0 rows affected” dice que son cero los registros afectados, y así debe ser pues estas consultas no van contra ninguna tabla ni tiene que modificar registro alguno, tan sólo estamos borrando usuarios, creándolos y dando permisos.

Falta una cosilla, y es comprobar los privilegios de root para no tener problemas luego. Para ello realizamos la siguiente consulta:

mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;

Si en la tabla que nos salga vemos que en Grant_priv aparece una “N”

Hay que cambiarlo, actualizando la tabla así:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

Si realizamos ahora esa misma consulta veremos que Grant_priv está a “Y”.

Y a continuación:

FLUSH PRIVILEGES;

Para salir, simplemente “exit”

phpMyAdmin

Esto es opcional, en realidad no hace falta, al menos de momento, pero sí que es más cómodo a la hora de consultar tablas etc. He decidido instalarlo ahora para tenerlo ya preparado, pero vamos, se puede hacer en cualquier momento.

Dicho esto, vamos a instalar phpMyAdmin. La instalación también es un proceso extremadamente sencillo, lo único a lo que tenemos que prestar especial atención es a las dos preguntas que se nos formularán:

    • Marcaremos el servidor “apache2” cuando nos dé a elegir el servidor a configurar (Podemos hacer uso de la barra espaciadora para ello. Cuando lo tengamos correctamente seleccionado aparecerá un asterisco)
    • Seleccionaremos “NO” cuando nos dé la opción de usar dbconfig-common, pues ya tenemos una base de datos instalada

Damos la instrucción y fijaos en las capturas de pantalla para cuando os salgan:

sudo apt install phpmyadmin

Para comprobar el funcionamiento procedemos de forma parecida a las anteriores, en el navegador ponemos la ip de la raspberry seguida de /phpmyadmin. Nos debería salir una pantalla como esta:

Para ingresar, ponemos como usuario root y el password que hayamos establecido en MariaDB, y de momento si vemos una pantalla como la siguiente es que phpMyAdmin está instalado y funciona.

Aunque como en este caso, lo más probable es que no esté todavía funcionando correctamente, pues vemos un mensaje de error en la parte baja de la pantalla.

Si buscamos información sobre este error veremos que afecta a las relaciones de tablas del tipo InnoDB, así que vamos a apañarlo para evitarnos posibles futuros quebraderos de cabeza. Esto en paquetes como WAMPP ya viene configurado y no hay que hacerlo, pero aquí, al instalar los componentes uno a uno pues toca.

Básicamente se trata de crear unas tablas, un usuario y modificar un fichero de configuración. Para la creación de las tablas phpMyAdmin incluye el script create_tables.sql Habremos de ejecutar este script y él sólo hará todo el trabajo. Si queréis, podéis descargarlo antes y abrirlo con vuestro editor favorito para echarle un ojo. La ruta en la que se encuentra en la versión que acabamos de instalar es la siguiente:  usr/share/phpmyadmin/sql

Así que nos colocamos en ese directorio y ejecutamos la consulta correspondiente tal que así:

mysql –u root –ppassword < create_tables.sql

La palabra “password” la tenéis que sustituir por el pass que tengáis para root, o no ponerla y os la pedirá tras ejecutar el comando; prestad atención a que entre –p y password no hay espacio.

Y como veréis, no nos va a decir ni esta boca es mía ¿Habrá hecho algo?

Por supuesto que sí. Si queremos comprobarlo podemos pinchar en la casita y desde el home ir a “Bases de datos”, veremos que ahora aparece “phpmyadmin”, que corresponde con la que crea el script, podéis pinchar sobre el nombre y veréis todas las tablas que se han creado, pero si aún con todo queremos asegurarnos de que todo lo que aparece ahí lo ha creado ese script y no estaba ya, podéis ir a la pestaña SQL e introducir la siguiente consulta: SHOW TABLE STATUS; Esto os mostrará información sobre las distintas tablas que incluye la fecha y hora de creación.

Como segundo paso toca modificar el fichero config.inc.php Este se encuentra en la ruta:  etc/phpmyadmin

La modificación de este fichero se podría hacer por línea de comandos, pero a mí me es más cómodo descargar el fichero, editarlo con el editor que cada uno use, y volverlo a subir. Habrá no obstante un problema haciendo esto: los permisos de la carpeta. La carpeta es de escritura para el usuario root, así que el cambio de ficheros habrá que hacerlo desde la línea de comandos con “sudo”.

Buscamos el siguiente trozo de código y lo comentamos:

Es fácil, vemos que el comentario de inicio nos dice que se configura si dbconfig-common está activado, y le hemos dicho que no:

/* Configure according to dbconfig-common if enabled */

A esto sigue un “if” así que es cuestión de borrar o comentar todo ese trozo, desde el inicio de la condición hasta el cierre de su llave (ojo que hay otro if anidado, no confundirnos de llave de cierre). En mi caso, y por si acaso, lo que he hecho ha sido modificar los comentarios (los comentarios multilínea no se pueden anidar en PHP, no puede haber un /*  /* */  */) para poder comentar todo el bloque y luego descomentar el trozo siguiente:

Lo dejamos así:

Ahora para subir el fichero, como no nos va a dejar subirlo por FTP ya que estamos identificados como pi y el usuario con permisos de escritura en la carpeta es root, lo subimos al home de pi y desde allí con un sudo lo movemos:

sudo mv config.inc.php ../../etc/phpmyadmin/config.inc.php

Esto machacará el fichero original por el que acabamos de subir.

Por último se trata de crear al usuario para la base de datos phpmyadmin y darle todos los privilegios para ella, sólo para ella.

Y aquí os comento. La forma de hacerlo por línea de comandos, ingresando primero en mysql, sería la siguiente (cambiando password por el pass que hayamos elegido):

CREATE USER ‘pma’@’localhost’ IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON phpmyadmin.* TO ‘pma’@’localhost’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

Es decir, ingresamos en mysql como root, creamos el usuario pma, le damos privilegios sobre la db phpmyadmin y recargamos los privilegios. Fácil ¿no? Pues a veces no. El usuario se creaba a la primera pero a la hora de dar privilegios salía el error 1044 que viene a decir que root es un mindundi y que en phpmyadmin no tiene privilegios ni le fían en el bar.

Tras unos cuantos quebraderos de cabeza infructuosos en la consola, os comento la solución fácil: Crear la cuenta pma desde phpMyAdmin, que también para eso lo acabamos de instalar, dar todos los permisos para la base de datos phpmyadmin y de paso dárselos también a root para esa db. En un instante, solucionado. Así:

Creamos el usuario con su clave (la misma que hemos puesto en el fichero de configuración):

Los privilegios globales los dejamos en blanco

Seleccionamos la base de datos phpmyadmin

Y aquí le damos todos los privilegios.

Ya está, ahora cuando volvamos a entrar a phpMyAdmin veremos que el mensaje de error ha desaparecido.

Con esto ya tenemos instalado en nuestra Raspberry un servidor web con soporte para PHP y MySQL, instalado el phpMyAdmin y configurado para el uso de tablas InnoDB que son las que usa por defecto. Si más adelante nos hace falta algún módulo más para PHP o lo que sea, ya lo instalaremos y configuraremos, pero de momento, si no he metido la pata, con esto ya debería de bastar y sobrar para los primeros proyectos.

 

Deja un comentario

No está permitida la inserción de ningún dato de carácter personal (mail, tef...). Cualquier comentario que los contenga será editado o eliminado.

Por favor, si dejas un comentario pon cualquier nombre para poderme dirigir a ti pero que no te identifique

cinco + diecisiete =

El comentario es totalmente privado. No se almacena la IP