Raspberry Pi
Tutorial de Raspberry Pi en español.
- Juan Antonio Villalpando -
Volver al índice del tutorial
____________________________
20.- Servidor Web Apache. PHP. MySQL (MariaDB). PhpMyAdmin.
- Vamos a realizar una nueva instalación de Apache, PHP, MySQL (MariaDB) y phpmyadmin.
_______________
1.- Apache.
sudo apt-get install apache2 -y
- El -y lo ponemos para que no pregunte durante la instalación y realice la instalación por defecto.
- Una vez instalado, vamos a un navegador web y escribimos la IP del Raspberry, ejemplo: http://192.168.1.11
- Deberá salir esta página web:
- Esa página está localizada en: /var/www/html/index.html
- El propietario es el root. Vamos a hacer propietario al usuario pi
sudo chown pi: /var/www/html/index.html
- Ya podemos editar esa página y cambiarle el contenido.
- Si necesitaramos reiniciar Apache:
sudo service apache2 restart
_______________
2.- PHP.
- Ahora vamos a instalar PHP.
- Copia y pega en el Terminal todo esto:
sudo apt-get install php7.1 php7.1-cli php7.1-common libapache2-mod-php7.1 php7.1-mysql php7.1-fpm php7.1-curl php7.1-gd php7.1-bz2 php7.1-mcrypt php7.1-json php7.1-tidy php7.1-mbstring php-redis php-memcached -y
- Y vamos a crear esta página:
sudo nano /var/www/html/index.php
con este contenido:
- Para guardar Ctrl-O.
-
Pulsa Enter para Confirmar.
-
Para Salir Ctrl-X
- Escribimos en un navegador web: 192.168.1.11/index.php
- Aparecerá esta página con información sobre PHP.
- Podemos cambiarle el propietario al archivo index.pxp y abrirlo con un Editor de texto gráfico.
sudo chown pi: /var/www/html/index.php
_______________
3.- MySQL (MariaDB).
- Actualmente por problemas de propiedad de MySQL con Oracle, se está instalando otra base de datos compatible llamada MariaDB.
- MariaDB funcionará como MySQLi. Su puerto es el
3306.
sudo apt-get install mariadb-server mariadb-client -y
- Una vez instalada vamos a configurarla:
sudo mysql_secure_installation
- Cuando pide contraseña de root, le he puesto raspberry
- Para hacer pruebas lo he configurado de esta forma, ya que no voy a establecer seguridad.
- Más adelante veremos cómo hacer una copia de seguridad de MariaDB
_______________
4.- phpmyadmin.
- Para configurar la base de datos utilizaremos phpmyadmin.
sudo apt-get install phpmyadmin -y
- Con la barra espaciadora, marcamos en apache2 (observa el asterisco *).
- Con la tecla de Tabulador, nos posicionamos en <Aceptar>
- Pide contraseña, escribimos: raspberry
- Confirmamos la contraseña: raspberry
- Vamos a ver si funciona:
- En un navegador escribimos nuestra IP y phpmyadmin
- 192.168.1.11/phpmyadmin
- Nos autentificamos y nos da un ERROR de AUTENTIFICACIÓN, en algo nos debemos de haber equivocado, vamos a arreglarlo con estas instrucciones:
sudo mysql -p -u root
Enter password: raspberry
MariaDB [(none)]> CREATE USER 'pi'@'%' IDENTIFIED BY 'raspberry';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'pi'@'%' WITH GRANT OPTION;
MariaDB [(none)]> exit
- Ahora podemos entrar con el usuario: pi y la contraseña: raspberry
_______________
5.- Creación de una base de datos y una tabla.
- Vamos a crear una base de datos llamada: tutorial
- Ahora dentro de la base de datos tutorial, vamos a crear una tabla llamada: comercio
___________________
- Importar la tabla.
- Para crear la tabla anterior, podemos utilizar el siguiente archivo e Importarlo:
- comercio.sql
comercio.sql |
-- Juan A. Villalpando
-- kio4.com
CREATE TABLE `comercio` (
`id` int(6) NOT NULL,
`nombre` varchar(14) COLLATE utf8_spanish2_ci NOT NULL,
`producto` varchar(12) COLLATE utf8_spanish2_ci NOT NULL,
`precio` varchar(6) COLLATE utf8_spanish2_ci NOT NULL,
`fecha` varchar(10) COLLATE utf8_spanish2_ci NOT NULL,
`pagado` varchar(5) COLLATE utf8_spanish2_ci NOT NULL,
`profesional` varchar(5) COLLATE utf8_spanish2_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;
ALTER TABLE `comercio`
ADD PRIMARY KEY (`id`);
ALTER TABLE `comercio`
MODIFY `id` int(6) NOT NULL AUTO_INCREMENT;
COMMIT;
|
___________________
- Subir esta página web PHP.
- Vamos a crear una página PHP para insertar, borrar, ver datos de la tabla comercio.
- Primero creamos este archivo de autentificación de la base de datos, pondremos el nombre de la base de datos, en este caso: tutorial
- El nombre y clave del usuario, en este caso pi y raspberry.
sudo nano /var/www/html/bd_autentifica.php
/var/www/html/bd_autentifica.php |
<?php
// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="tutorial";
$db_login="pi";
$db_pswd="raspberry";
?>
|
- Para guardar Ctrl-O.
- Pulsa Enter para Confirmar.
- Para Salir Ctrl-X
- Ahora creamos el archivo de entrada de datos mediante PHP.
sudo nano /var/www/html/comercio_insertar_web.php
/var/www/html/comercio_insertar_web.php |
<html>
<head><meta charset="UTF-8"></head>
<body>
<font face="Arial">
<form name="test" method="post" action="comercio_insertar_web.php">
<b><font face="Arial, Helvetica, sans-serif">- Crear un usuario.</font></b><font face="Arial, Helvetica, sans-serif"><br>
Nombre:
<INPUT TYPE="text" NAME="nombre" value=""><br><br>
Producto:
<INPUT TYPE="text" NAME="producto" value=""><br><br>
Precio:
<INPUT TYPE="text" NAME="precio" value=""><br><br>
Fecha:
<INPUT TYPE="text" NAME="fecha" value=""><br><br>
Pagado:
<INPUT TYPE="checkbox" NAME="pagado" value="true"><br><br>
Profesional:
<INPUT TYPE="checkbox" NAME="profesional" value="true"><br><br>
<INPUT TYPE="submit" name="btnInsertar" value=" Pulsa insertar los datos">
<br>
<b><font color="#009900">_________________________________________________________________</font></b>
<br>
<b>- Ver el nombre de los usuarios creados.</b><br>
<INPUT TYPE="submit" name="btnConsultarUsuarios" value="Pulsa para ver un listado de los nombres de los usuarios creados">
<br>
<b><font color="#009900">_________________________________________________________________</font></b>
<br>
<b>- Borrar un usuario.</b><br>
Escribe el nombre de un usuario para borrarlo.
<INPUT TYPE="text" NAME="nombre_borrar" value="">
<INPUT TYPE="submit" name="btnBorrar" value=" Pulsa para borrar a ese usuario">
<br>
<b><font color="#009900">_________________________________________________________________</font></b>
<br>
<b>- Consultar la información de un usuario. (Si no escribes nada, se mostrará las respuesta de todos los usuarios.)</b><br>
Escribe el nombre de un usuario para ver sus respuestas.
<INPUT TYPE="text" NAME="nombre_consultar" value="">
<INPUT TYPE="submit" name="btnConsultarTodo" value=" Pulsa para ver las respuestas de ese usuario o de todos">
</font><br>
<b><font color="#009900" face="Arial">_________________________________________________________________</font></b>
<br>
<b><font color="#009900" face="Arial"><br>
_________________________________________________________________</font></b>
</form>
</body>
</html>
<?php
// Juan Antonio Villalpando
// juana1991@yahoo.com
// http://kio4.com
// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
require_once('bd_autentifica.php');
// 2.- CONEXION A LA BASE DE DATOS
// mysql_select_db($db_name) or die(mysql_error());
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// Check connection
if ($link->connect_error) {
die('Connect Error: ' . $mysqli->connect_error);
}
// 3.- INSERTAR USUARIO
////////////////////////////// INSERTAR ////////////////////////////////////
if(isset($_POST['btnInsertar'])){
$nombre = $_POST['nombre'];
$producto = $_POST['producto'];
$precio = $_POST['precio'];
$fecha = $_POST['fecha'];
$pagado = $_POST['pagado'];
$profesional = $_POST['profesional'];
$res=mysqli_query($link, "SELECT nombre FROM `comercio` WHERE `nombre`='$nombre' ");
$row=mysqli_fetch_array($res);
$count = mysqli_num_rows($res);
if( $count == 0 ) { // Si ha contado 0 nombre, es que el usuario no esta registrado. Lo registra y pone los datos.
$query="insert into comercio (nombre, producto, precio, fecha, pagado, profesional) values ('$nombre','$producto','$precio','$fecha','$pagado','$profesional')";
$result = mysqli_query($link, $query);
echo 'Registrado y guardado';
}else{
echo ' Ya estaba registrado. Guardado';
// Actualiza
$query="update comercio set producto='$producto', precio='$precio', fecha='$fecha', pagado='$pagado', profesional='$profesional' WHERE nombre='$nombre' ";
$result = mysqli_query($link, $query);
}
mysqli_close($link);
}
////////////////////////////////////////////////////////////////////////
// 4.- LISTADO DE TODOS LOS USUARIOS ///////////////////////////////////
if(isset($_POST['btnConsultarUsuarios'])){
$resultado= mysqli_query( $link,"SELECT DISTINCT nombre FROM comercio" )
or die("SELECT Error: ".mysql_error());
print "<table border='3' cellpadding='4' cellspacing='0' bordercolor='#009900'";
while ($row = mysqli_fetch_array($resultado)){
$columna= $row['nombre'];
print "<tr>\n";
print "\t<td>\n";
echo "<font face=arial size=4/>$columna</font>";
print "</td>\n";
print "</tr>\n";
}
print "</table>\n";
mysqli_close($link);
}
////////////////////////////////////////////////////////////////////////
// 5.- BORRAR USUARIOS ///////////////////////////////////
/////////////////////////////// BORRAR ////////////////////////////////////
if(isset($_POST['btnBorrar'])){
$nombre=$_POST['nombre_borrar'];
echo($nombre);
$query="delete from comercio where nombre='$nombre'";
$result = mysqli_query($link, $query);
print("Datos borrados.");
mysqli_close($link);
}
///////////////////////////////////////////////////////////////////
////////////////////////////// CONSULTAR P?GINA WEB. /////////////////////////////////////
if(isset($_POST['btnConsultarTodo'])){
// RECOGIDA DE DATOS DEL FORMULARIO
$nombre=$_POST['nombre_consultar'];
// SELECCI?N
if ($nombre==''){
$hacer = mysqli_query ($link, "SELECT * FROM comercio");
}
else {
$hacer = mysqli_query ($link, "SELECT * FROM comercio WHERE nombre='$nombre' ");
};
///////////////////////////////////////////////////////////////////////////////
// En los casos que hay SELECT y se debe enviar una respuesta act?a este c?digo
$resultado = mysqli_query($link, "SHOW COLUMNS FROM comercio");
$numerodefilas = mysqli_num_rows($resultado);
if ($numerodefilas > 0) {
echo ("<table border='3' cellpadding='4' cellspacing='0' bordercolor='#009900'");
echo ("<center>");
echo("
<tr>
<td>id</td>
<td>nombre</td>
<td>producto</td>
<td>precio</td>
<td>fecha</td>
<td>pagado</td>
<td>profesional</td>
</tr>
");
while ($rowr = mysqli_fetch_row($hacer)) {
echo("<tr>");
for ($j=0;$j<$numerodefilas;$j++) {
echo("<td><center>".$rowr[$j]."</center></td>");
}
echo("</tr>");
}
}
mysqli_close($link);
}
?>
|
___________________
- Ver la página web PHP.
- Escribimos en un navegador
192.168.1.11/comercio_insertar_web.php
y obtendremos ésta página desde donde podremos insertar, borrar y ver datos de nuestra base de datos.
___________________
- Copia de seguridad de la base de datos completa.
- Vamos a realizar una copia de seguridad de la tabla comercio que se encuentra en la base de datos tutorial.
sudo mysqldump -u pi -p --single-transaction --quick --lock-tables=false tutorial comercio > tutorial-comercio-$(date +%F).sql
- Este archivo se guardará en el mismo directorio desde el que se ha ejecutado la orden.
- Para recuperar la base completa, tutorial deberá estar creada previamente:
mysql -u pi -p tutorial < tutorial-comercio-2019-07-15.sql
- En caso que solo queramos recuperar una tabla:
mysql -u pi -p tutorial < comercio.sql
- Copias temporizadas.
- Mediante cron, podemos hacer copias automáticamente cada cierto tiempo:
/home/pi/.login.conf |
[client]
user = pi
password = raspberry
|
* * * * * /usr/bin/mysqldump --defaults-extra-file = /home/pi/.login.conf -u pi --single-transaction --quick --lock-tables = false tutorial comercio > tutorial-comercio-$(date + \% F).sql
https://crontab.guru/#*_*_*_*_*
___________________
- Rapberry en Internet. NAT. Seguimiento de puerto. Port Forwarding.
- Hasta ahora hemos configurado todo el proceso para que funcione en red local, ahora vamos a consegir que también podamos entrar en nuestra Raspberry desde Internet, para ello debemos entrar en la configuración de nuestro Router.
1.- En un navegados escribimos la Puerta de enlace (gateway) de nuestro Router, por ejemplo: http://192.168.1.1
2.- Escribir nombre y contraseña para entrar en nuestro Router.
3.- Buscar en la configuración "Seguimiento de puerto"
4.- Escribir la IP de Raspberry y el Puerto 80, por ejemplo:
192.168.1.11 ................................... 80
5.- Buscar nuestra IP Pública entrando en:
https://www.vermiip.es/
6.- ¿Qué pasa si mi proveedor de Internet me cambia mi IP Pública?
- Utilizamos un DDNS - DynDNS, por ejemplo no-ip.com
https://www.maketecheasier. com/best-dynamic-dns- providers/
https://www.duckdns.org/ install.jsp
http://www.dnsexit.com/domains/free-second-level-domains/
___________________________________________________________
https://www.rephp.com/phpmyadmin-mbstring-error.html
https://es.stackoverflow.com/questions/161109/error-1698-phpmyadmin-access-denied-for-user-rootlocalhost
___________________________________________________
|