Instalar y configurar PostgreSQL y pgAdmin4 en Centos 8

En esta ocasión, aprendemos a instalar y configurar la última versión de PostgreSQL, en una distribución GNU/Linux con Centos 8. Además, para poder gestionar las bases de datos desde el navegador web, instalaremos la herramienta gráfica pgAdmin4

Antes de continuar, demos un pequeño repaso a los conceptos básicos de este popular motor de base de datos. PostgreSQL es un sistema de base de datos relacional de objetos, avanzado, que sigue la filosofía de desarrollo del código abierto, es multiplataforma, confiable y que nos garantiza la integridad de los datos gestionados.

Respecto a pgAdmin4, de la que ya hemos hablado, se trata de una herramienta de administración avanzada, que también sigue la filosofía de desarrollo del código abierto, con un gran número de funcionalidades y que facilita el día a día de un administrador de base de datos (DBA), al ofrecer una herramienta gráfica accesible vía web.

Alta de un VPS en Clouding.io

Para esta ocasión vamos a utilizar un VPS, esto es, un servidor privado virtual, en nuestro proveedor de confianza Clouding.io. Para ello nos iremos a su panel de administración y lo creamos según nuestras necesidades:

Creación de un nuevo VPS con Centos 8

Además le asignamos los recursos necesarios, tanto la memoria, el número de procesadores y el espacio en disco:

Asignación de recursos

En este caso los recursos son mínimos, lo suficiente para realizar la instalación, configuración y algunas pruebas. En cualquier caso, en nodos productivos, los recursos tendrían que ser más elevados, sin duda.

Una vez tengamos nuestro nuestro VPS creado, los veremos tal que así:

Información del nuevo VPS

Si marcas sobre el nombre nos aparecerán una serie de datos, entre otros la nueva contraseña provisional para el host. Una vez hemos accedido ya podemos empezar a trabajar.

Añadir un nuevo usuario

Lo recomendado siempre es no utilizar root, por lo que vamos a crear un nuevo usuario al que le asignaremos permisos de super usuario.

useradd -c "David" -s "/bin/bash" -d "/home/davidochobits" davidochobits
passwd davidochobits
usermod -aG wheel davidochobits

Lo que hemos hecho ha sido crear el usuario, asignarle una contraseña y añadirlo al grupo «wheel», que es el de «sudo»
Por último, que no menos importante es deshabilitar el acceso de ‘root’ vía ssh al nodo:

sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' \
/etc/ssh/sshd_config

Y recargamos el daemon de ssh:

systemctl restart sshd

Salimos del host con exit, y volvemos a acceder vía ssh con el nuevo usuario.

Instalar PostgreSQL en Centos 8

El paquete de PostgreSQL ya viene en los repositorios oficiales de Centos 8, pero no los queremos utilizar, ya que utilizaremos los del propio proyecto. Por lo que deshabilitaremos el módulo pertinente, como primer paso:

sudo dnf -qy module disable postgresql

Habilitamos el repositorio pertinente:

sudo dnf install \
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

E instalamos:

sudo dnf install postgresql12 postgresql12-server

A fecha de esta entrada la última versión disponible la 12, que es la que vamos a utilizar.

Reiniciamos el equipo antes de continuar:

reboot

Tras la instalación debemos iniciar la base de datos e iniciamos el servicio. También lo debemos añadir al arranque:

sudo /usr/pgsql-12/bin/postgresql-12-setup initdb 
sudo systemctl start postgresql-12
sudo systemctl enable postgresql-12
sudo systemctl status postgresql-12

Configurar y asegurar PostgreSQL

Una vez instalado se crea un nuevo usuario llamado ‘postgres’ que tiene rol de superusuario. Una vez instalado debemos asignarle una contraseña, ya que por defecto no lleva:

sudo passwd postgres

En cualquier caso no es conveniente utilizar este usuario por motivos obvios de seguridad. Para ello primero accedemos con el usuario:

su - postgres

Creamos un nuevo usuario:

createuser -s davidochobits -P

Con el parámetro -s le asignamos permisos de superusuario.

Ahora dejamos de utilizar el usuario ‘postgres’ y volvemos con nuestro usuario habitual. El siguiente paso es crear una nueva base de datos. Para ello utilizamos el comando ‘createdb’, como sigue:

createdb basedatos1

Una vez ya está creada para trabajar con ella utilizamos el comando ‘psql’, que es un intérprete de comandos.

psql basedatos1

Al hacer esto accedemos a la consola interactiva:

[davidochobits@servcentosdb ~]$ psql basedatos1
psql (12.2)
TYPE "help" FOR help.
basedatos1=#

A modo de ejemplo vamos a crear varias tablas en la base de datos. Vamos a imaginar que tenemos una pequeña empresa, así que vamos a crear las tablas de los clientes, los proveedores y los trabajadores. Lo haríamos así:

Primero creamos la de clientes:

CREATE TABLE clientes (
nombre VARCHAR,
clave VARCHAR);

El sistema nos respondería con un mensaje de ‘CREATE TABLE’

Ahora le toca el turno a proveedores:

CREATE TABLE proveedores (
nombre VARCHAR,
clave VARCHAR);

Y por último trabajadores:

CREATE TABLE trabajadores (
nombre VARCHAR,
clave VARCHAR);

Con esto ya tendremos creadas las tres tablas.

Si queremos visualizar las tablas creadas, escribiremos:

\dt

Nos devolverá la siguiente información:

Si por el contrario deseamos eliminar una tabla escribiremos:

DROP TABLE 'nombre_de_la_tabla'

Si además queremos eliminar una base de datos:

DROP DATABASE 'nombre-si-existe'

De esta manera ya tenemos algunas tablas para visualizar.

Para salir del gestor de base de datos escribimos \q

Instalar pgAdmin4 en Centos 8

pgAdmin utilizar el repositorio EPEL, por lo que lo debemos tener previamente habilitado:

sudo dnf install epel-release
sudo dnf --enablerepo=PowerTools install pgadmin4

Para poder acceder a la herramienta esta utiliza el servidor web Apache, que en Centos 8, se llama ‘httpd’. Por lo que lo debemos encender y añadir al arranque:

sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl status httpd

Configurar pgAdmin4 en Centos 8

Una vez instalada la herramienta todavía nos quedan algunas cosas por hacer. Primero de todo habilitamos el fichero de configuración para Apache.

sudo cp /etc/httpd/conf.d/pgadmin4.conf.sample /etc/httpd/conf.d/pgadmin4.conf

Comprobamos que funciona correctamente:

httpd -t
sudo systemctl restart httpd

Creamos los directorios donde se almacenarán los registros y las librerías:

sudo mkdir -p /var/lib/pgadmin4/
sudo mkdir -p /var/log/pgadmin4/

Modificamos el fichero de configuración e indicamos las nuevas rutas:

sudo vi /usr/lib/python3.6/site-packages/pgadmin4-web/config_distro.py

Añadimos:

LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'

Ahora creamos una cuenta de usuario para acceder a la interfaz web y también creamos la base de datos de configuración:

sudo python /usr/lib/python3.6/site-packages/pgadmin4-web/setup.py

Os dejo en la imagen el resultado en mi caso:

Asignamos el propietario:

sudo chown -R apache:apache /var/lib/pgadmin4
sudo chown -R apache:apache /var/log/pgadmin4

En mi caso el host no tiene habilitado el cortafuegos ya que uso el de Clouding.io y tampoco utilizo SELinux, por lo que esa parte me la salto.

Habilitar el acceso para nuestro usuario a pgAdmin4

Para poder utilizar el usuario de base de datos que hemos creado antes, en mi caso ‘davidochobits’, en el gestor de pgAdmin4, debemos hacer una pequeña modificación en el método de autentificación. Debemos habilitar el método ‘md5’, editando el siguiente fichero:

sudo vi /var/lib/pgsql/12/data/pg_hba.conf

Buscamos las siguientes líneas y las dejamos así:

# IPv4 local connections:
host    all       all   127.0.0.1/32            md5
# IPv6 local connections:
host    all       all   ::1/128                 md5

Guardamos, salimos y reiniciamos el motor de base de datos:

sudo systemctl restart postgresql-12

Acceder a la interfaz web de pgAdmin4

Una vez hechos todos estos pasos ya puedo acceder vía web a la herramienta:

Acceso web a pgAdmin4

Aquí debemos utilizar las credenciales que hemos creado anteriomente.

Lo primero que haremos es crear un nuevo servidor:

Lo añadimos desde la pestaña «General»

Añadimos los datos del servidor

Los datos restantes los añadimos desde la pestaña «Conexión»

Datos de conexión

Aquí debemos indicar la dirección del servidor, que este caso es «localhost», el puerto de conexión y las credenciales del usuario administrador.

Una vez hecho esto ya veremos la información de nuestro servidor en el panel web:

Si marcamos sobre el nombre del servidor, ya podemos ver toda la información ampliada, incluyendo las estadísticas en directo:

Vista principal de pgAdmin4

Y esto es todo. Creo que la entrada ya ha quedado suficientemente extensa. Espero que la entrada os pueda ser de utilidad en algún momento. Nos vamos leyendo.