Mostrando entradas con la etiqueta localhost. Mostrar todas las entradas
Mostrando entradas con la etiqueta localhost. Mostrar todas las entradas

Extraer tablas de datos en documentos PDF

Los archivos PDF se han vuelto muy populares a la hora de compartir documentos, son multiplataforma, su contenido no se desvirtualiza a la hora de ser visualizados, no es posible posible alterar su contenido y es muy complicado la extracción de datos.


Tabula es un programa multiplataforma que nos facilitará la extracción de tablas de archivos PDF y podremos extraerlas en formato texto o CSV (Valores Separados por Comas) y así exportarlo a una hoja de cálculo, para poder editarla.

Los datos podrán ser extraídos siempre y cuando sean texto incrustados. No es posible exportar tablas si han sido añadidas al PDF como imágenes.

Descargamos la versión correspondiente a nuestro sistema operativo. Al realizar la descarga del archivo comprimido nos encontraremos con un ejecutable para la plataforma JAVA.

Una vez ejecutado nos creará un servicio web al que accederemos mediante nuestro navegador a la dirección:

http://localhost:8080/


Añadiremos el archivo del que queremos extraer la tabla. Podremos seleccionarla o permitir que el propio programa localice aquellas tablas de las que podremos obtener sus datos


Previsualizaremos la tabla que hemos obtenido y nos permitirá exportarlo en el formato adecuado. Para importarlo o incorporarlo a, por ejemplo, una hoja de cálculo


Año,Marca,Modelo,Descripción,Precio

1997,Ford,E350,"ac, ABS, moon",3000.00

1999,Chevy,Venture,Extended Edition,4900.00

1999,Chevy,Venture,"Extended Edition, Very Large",5000.00

1996,Jeep,Grand Cherokee,"MUST SELL! air, moon roof, loaded",4799.00

En mi caso he extraído la tabla contenida en el documento PDF y la exportado en un archivo CSV para importarlo a una hoja de cálculo mediante la suite Libre Office.



Conectar a servidor base de datos MariaDB

Puede ser el caso que además de gestionar una base de datos SQL en local, necesitamos gestionarla en remoto. En la mayoría de los servidores de hospedaje web, no nos permiten conectarnos a la servidor de base de datos en remoto, tenemos que hacerlo en local. Una de las herramientas más utilizadas es PhpMyAdmin. Este caso en concreto he instalado un servidor de base de datos MariaDB Server en una Raspberry. Tengo muy oxidado el lenguaje SQL como para acceder al servidor a través de SSL y realizar todas las tareas de instalación de rablas y mantenimiento desde el cliente de MariaDB. Quiero gestionarla en un entorno más amigable, pero no quiero instalar a mayores un servidor Apache con PHP para poder utilizar PhpMyAdmin.

Logo MariaDBMariaDB  es un sistema de gestión de bases de datos derivado de MySQL con licencia GPL (General Public License). Es desarrollado por Michael (Monty) Widenius —fundador de MySQL—, la fundación MariaDB y la comunidad de desarrolladores de software libre.1​ Introduce dos motores de almacenamiento nuevos, uno llamado Aria —que reemplaza a MyISAM— y otro llamado XtraDB —en sustitución de InnoDB—. Tiene una alta compatibilidad con MySQL ya que posee las mismas órdenes, interfaces, API y bibliotecas, siendo su objetivo poder cambiar un servidor por otro directamente.
Aunque el tutorial es para MariaDB, este puede ser extensible si así fuera un servidor de MySQL.

De forma predeterminada y por seguridad no permiten el acceso remoto, solo se permite acceso atraves de localhost.

Una vez instalada el servidor y el cliente en nuestra distribución. Aseguramos la instalación lanzando el comando:

sudo mysql_secure_installation 

Enter current password for root (enter for none): Pulsa enter
 Introduzca la contraseña actual para root (ingrese para none): Pulse Enter
 Set root password? [Y/n]: Y
 ¿Establecer contraseña del root? [Y/n]: Y
 New password: Enter password
 Nueva contraseña: Introduzca contraseña
 Re-enter new password: Repeat password
 Reescribir nueva contraseña: Repetir contraseña
 Remove anonymous users? [Y/n]: Y
¿ Borrar usuarios anónimos? [Y/n]: Y
 Disallow root login remotely? [Y/n]: Y
¿No permitir el acceso al root desde remoto? [Y/n]: Y
 Remove test database and access to it? [Y/n]:  Y
 ¿Borrar Bases de datos Test y su acceso? [Y/n]: Y
 Reload privilege tables now? [Y/n]:  Y
 ¿Recargar privilegios a las tablas ahora? [Y/n]: Y

No vamos a permitir al root acceder desde remoto, no es considerado de una buena praxis de seguridad que el administrador se pueda conectar en remoto. Por el contrario vamos a crear un usuario nuevo y le vamos a dar privilegios de acceso desde remoto. En este caso indicaremos que el usuario se puede conectar desde cualquier equipo de nuestra LAN. Con 192.168.100 indicamos que subred se puede conectar usando el carácter % como comodín para indicarle que cualquier equipo de esta. También podríamos limitar aun más indicando la dirección ip del equipo desde el que únicamente puede acceder en remoto. Creando un entorno aun más seguro

CREATE USER 'nuevo usuario'@'192.168.100.%';
 
GRANT ALL PRIVILEGES ON *.* TO 'nuevo usuario'@'192.168.100.%' IDENTIFIED BY 'nueva contraseña' WITH GRANT OPTION;

Seguidamente configuraremos de forma manual, no solo el acceso en local, si no el acceso en remoto.
Deberemos localizar los archivos de configuración de MySQL o de MariaDB.
  • /etc/my.cnf                         
  • $MYSQL_HOME/my.cnf
  • /etc/mysql/my.cnf                      
  • SYSCONFDIR/my.cnf                     
  • DATADIR\my.ini                           Windows
Editando el archivo de configuración /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf
 

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

Nos indica los directorios donde se encuetra el archivo que estamos buscando para editarlo. 50-server.cnf

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Buscaremos la sección [mysqld]  donde editaremos los valores que nos permitan conexiones externas. Este es un ejemplo real de configuración que me ha permitido conectarme al servidor desde otro equipo.

[mysqld]

#
# * Basic Settings
#
user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
port                    = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
#skip-external-locking

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address            = 127.0.0.1
bind-address            = 0.0.0.0

.......................................................

 # * Security Features
#
# Read the manual, too, if you want chroot!
#chroot = /var/lib/mysql/
#
# For generating SSL certificates you can use for example the GUI tool "tinyca".
#
#ssl-ca = /etc/mysql/cacert.pem
#ssl-cert = /etc/mysql/server-cert.pem
#ssl-key = /etc/mysql/server-key.pem
#
# Accept only connections using the latest and most secure TLS protocol version.
# ..when MariaDB is compiled with OpenSSL:
ssl-cipher = TLSv1.2
# ..when MariaDB is compiled with YaSSL (default in Debian):
#ssl = on

Te explico de forma más detallada las lineas a editar para un correcto funcionamiento. 

  •  port                    = 3306 Es el puerto por defecto, no es necesario cambiarlo, pero si fuera necesario podríamos especificar otro puerto de accesos.
  • #skip-external-locking Comentamos esta linea para permitir que el servidor sea accesible desde el exterior. Comentamos añadiendo el carácter #
  • #bind-address            = 127.0.0.1 Tambien aañadimso el caracter # para comentar esta linea.
  • bind-address            = 0.0.0.0 Añadiremos una linea con los parametros indicados.
  • ssl-cipher = TLSv1.2 Esta parte hay que tenerla en cuenta si tenemos problemas a la hora de concetar con los certificados. Al utilizar OpenSSL descomentamos esta linea
  • #ssl = on Y comentamos esta otra. Que era la que estaba activa de forma predeterminada pero, que en mi caso no me permitía conectarme.
Una vez modificado las lineas señalas. Guardamos y salimos del editor de textos. Y reiniciamos el servicio.

sudo systemctl restart mariadb.service

Tenemos que tener en cuenta, si en nuestro servidor, tenemos instalado y corriendo un cortafuegos, debemos permitir las conexiones a través del puerto 3306, si lo hemos dejado por defecto, o el puerto que asignemos al servicio. Para añadir el permiso abrir el mencionado puerto utlizando ufw seria:

sudo ufw allow 3306/tcp

Y si solo vamos a permitir el acceso en remoto a un equipo, con una dirección ip en concreto:

 sudo ufw allow from 192.168.100.2 to any port 3306

Instalar servidor base de datos MariaDB

Uno de los primeros gestores de bases de datos con licencia GNU GPL que utilice, en un proyecto anterior, fue MySQL. En aquel entonces cree una pagina web dinámica, programada en PHP que obtenía los datos, utilizando SQL. Aquella idea quedó aparcada por falta de tiempo, pero ahora quería retomar parte de aquel antiguo proyecto.
Años después me he encontrado que los creadores de MySQL abandonaron la compañía para crear una nueva, MariaDB. Un nuevo gestor que evolucionó y han mejoró con respecto al su predecesor.


MySql vs MariaDB
Para instalar el servidor MariaDB podemos descargarla de la página oficial. Pero también se encuentra en los repositorios oficiales:

sudo apt install mariadb-server mariadb-client
 
Con este script instalaremos el servidor y el cliente del gestor. Seguidamente arrancaremos el servicio

sudo systemctl start mariadb.service

Y lo habilitamos para que cuando lo haga el sistema.

sudo systemctl enable mariadb.service

 Una vez instalada el servidor y el cliente en nuestra distribución. Aseguramos la instalación lanzando el comando:

sudo mysql_secure_installation 

 Enter current password for root (enter for none): Pulsa enter Introduzca la contraseña actual para root (ingrese para none): Pulse Enter
 Set root password? [Y/n]: Y ¿Establecer contraseña del root? [Y/n]: Y
 New password: Enter password Nueva contraseña: Introduzca contraseña
 Re-enter new password: Repeat password Reescribir nueva contraseña: Repetir contraseña
 Remove anonymous users? [Y/n]: Y¿ Borrar usuarios anónimos? [Y/n]: Y
 Disallow root login remotely? [Y/n]: Y¿No permitir el acceso al root desde remoto? [Y/n]: Y
 Remove test database and access to it? [Y/n]:  Y ¿Borrar Bases de datos Test y su acceso? [Y/n]: Y
 Reload privilege tables now? [Y/n]:  Y ¿Recargar privilegios a las tablas ahora? [Y/n]: Y



En este caso solo le vamos a permitir el acceso al administrador solo en local. De forma predeterminada no esta permitida el acceso en remoto a ningún usuario. Si tenemos la necesidad de hacerlo en este post te explico como.


Comprobaremos que funciona accediendo con el mismo cliente que hemos instalado:

sudo mariadb
 

Accediendo al gestor MariaDB

 



Webmin, salvavidas para los que no somos puritanos de la linea de comandos

No me considero puritano de la línea de comandos, incluso es desesperante 😣😱.
Si que es cierto que para la gestión de nuestro equipo, servidor local o remoto es una herramienta imprescindible; y nos permite un consumo mínimo de recursos.
Pero la carne es debil. Webmin es una herramienta para la gestión sistemas Unix, como GNU/Linux y OpenSolaris basado en web; si podremos utilizar el ratón 😈. Está escrito en Perl, se encuentra en español y como he dicho es vía web, con lo cual es multiplataforma.

Wiki Webmin


En la siguiente página se encuentra los distintos formatos de empaquetado para poder instalarlo en nuestro equipo
http://www.webmin.com/download.html
wegt  https://prdownloads.sourceforge.net/webadmin/webmin_1.900_all.deb
sudo dpkg -i webmin_1.900_all.deb
En mi caso la instalación en una Raspberry con el sistema operativo Raspbian no hubo ningún problema. Pero en Linux Mint 19.1 Cinnamon no resulto tan fácil y tuve que resolver dependencias con un paquete que faltaba.

Una vez instalado, accederemos desde nuestro navegador a la dirección ip que queremos administrar a través de protocolo seguro https y el puerto 10.000:

https://localhost:10000/

Puede ser que tu navegador te recuerde que la conexión no es privada, continuamos de todos modos.


Y solo nos quedará iniciar sesión como root o como el usuario que tengamos como administrador