PostgreSQL es uno de los sistemas de gestión de bases de datos más robustos y avanzados que existen, conocido por su estabilidad y flexibilidad. Además, cuenta con soporte disponible por parte de una comunidad activa y alternativas comerciales para el ámbito empresarial. Si estás administrando un servidor o trabajando en un proyecto que requiere un manejo eficiente de datos, aprender a instalar y configurar PostgreSQL es una habilidad esencial. En esta guía, explicaremos paso a paso el proceso de instalación, configuración y uso de PostgreSQL en un cloud server Ubuntu 22.04 para ayudarte en ese objetivo.
PostgreSQL obtuvo el primer puesto dentro de la categoría bases de datos en la encuesta para desarrolladores que Stackoverflow llevó a cabo en 2024.
Requisitos Previos
- Disponer de un servidor Ubuntu 22.04 con un usuario que tenga acceso a
sudo
como explicamos en Configuración inicial de un servidor con Ubuntu 22.04. En nuestro caso este usuario llevará el nombre gabriel.
Paso 1: Instalación de PostgreSQL en Ubuntu 22.04
Para comenzar, asegúrate de que el índice de paquetes y todo el software actual del cloud server estén actualizados:
sudo apt update -y && sudo apt upgrade -y
Instala PostgreSQL y el cliente que permitirá la conexión a la base de datos desde la línea de comandos, junto con el conjunto de herramientas y extensiones adicionales postgresql-contrib:
sudo apt install postgresql postgresql-contrib postgresql-client -y
Verifica que el servicio esté corriendo. En caso de no estar activo, puedes iniciarlo con el segundo comando que aparece en el bloque de abajo. Asimismo, el último de ellos te permitirá garantizar el inicio de PostgreSQL cada vez que se reinicie el cloud server.
sudo systemctl status postgresql
# Solamente si necesitas iniciar el servicio manualmente:
sudo systemctl start postgresql
# Para habilitar el inicio automático:
sudo systemctl enable postgresql
La imagen anterior indica que el RDBMS (sistema de gestión de bases de datos relacionales, por sus siglas en inglés) inició hace 2 minutos y 40 segundos con un identificador de proceso 26408. Estos valores diferirán en tu caso y solamente los señalamos a modo informativo.
Paso 2: Configuración de PostgreSQL en Ubuntu 22.04
Este paso consta de dos actividades separadas pero que contribuyen al mismo propósito: alcanzar el grado mínimo de seguridad para la operación de PostgreSQL en producción.
Seguridad a Nivel del Sistema Operativo
Los archivos de configuración del gestor de bases de datos (postgresql.conf y pg_hba.conf) están ubicados en /etc/postgresql/<número de versión/main/ donde número de versión es 14 para la instalación en Ubuntu 22.04 que acabamos de realizar. El primero de ellos tiene que ver con cuestiones generales del servidor (como parámetros de red y conexión, rendimiento, registro o logging, seguridad y recuperación en caso de fallo). Por otro lado, el segundo se utiliza exclusivamente para configurar el acceso y los métodos de autenticación (quién, cómo, y desde dónde puede conectarse al servidor).
Con los comandos siguientes nos aseguraremos de que los archivos de configuración solamente queden accesibles para el usuario del sistema operativo llamado postgres y tengan permisos restringidos:
sudo chmod 600 /etc/postgresql/14/main/postgresql.conf
sudo chmod 600 /etc/postgresql/14/main/pg_hba.conf
Si no necesitas que PostgreSQL esté accesible desde la red externa, puedes configurarlo para que solamente acepte conexiones locales. Edita postgresql.conf y asegúrate de que la configuración listen_addresses
esté definida como localhost
:
sudo nano /etc/postgresql/14/main/postgresql.conf
Busca la línea y habilítala quitando el #
del comienzo:
listen_addresses = 'localhost'
Para aumentar la protección contra ataques por fuerza bruta, configurar scram-sha-256 como método de autenticación es una excelente idea. El mismo utiliza el algoritmo SHA-256, que pertenece a la familia SHA-2, diseñada para ser resistente a ataques de colisión y otras vulnerabilidades comunes. En el mismo archivo de configuración, localizar la línea que comienza con password_encryption
, descomentarla y colocar scram-sha-256
como valor:
password_encryption = scram-sha-256
A continuación, en pg_hba.conf habilitaremos la autenticación por contraseña para conexiones locales y requeriremos lo mismo para una dirección IP específica de forma remota. Todos los demás intentos de conexión serán denegados.
Luego de abrir el archivo en modo de edición:
sudo nano /etc/postgresql/14/main/pg_hba.conf
localiza las siguientes líneas y descomenta o coloca los valores que se indican debajo:
# Conexión local autenticada con contraseña
local all all scram-sha-256
# Conexión remota autenticada con contraseña (ajustar IP según sea necesario)
host all all 192.168.1.0/24 scram-sha-256
# Denegar cualquier otra conexión
host all all all reject
Para finalizar, recarga la configuración:
sudo systemctl reload postgresql
Esta alternativa es preferible a reiniciar el servicio en su totalidad cuando existen conexiones activas y no deseamos interrumpirlas. Aunque ese no es el caso en este ejemplo, es una buena idea adquirir el hábito de hacerlo.
Seguridad a Nivel del RDBMS
Durante la instalación, PostgreSQL crea un usuario del sistema operativo llamado postgres. Cambia a dicho usuario y luego accede al shell del RDBMS:
sudo -i -u postgres
psql
En primer lugar, cambiemos la contraseña del usuario postgres de la base de datos. Escribe la siguiente sentencia SQL y presiona Enter. Recuerda reemplazar tu_nueva_contraseña_segura por una de tu elección:
ALTER USER postgres WITH PASSWORD 'tu_nueva_contraseña_segura';
Por seguridad y organización, es recomendable no usar el usuario postgres para todo. De hecho, lo mejor es crear un nuevo usuario para cada aplicación que necesite acceder a las distintas base de datos. Emplearemos las siguientes líneas para 1) generar el usuario appuser con contraseña AppUs3r, 2) crear una base de datos llamada appdb, y 3) dar todos los privilegios de acceso para que appuser acceda a appdb:
CREATE USER appuser WITH PASSWORD 'AppUs3r';
CREATE DATABASE appdb OWNER appuser;
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
En la imagen de arriba se aprecia que luego de cada sentencia de la base de datos, PostgreSQL devuelve una confirmación (CREATE ROLE
, CREATE DATABASE
, y GRANT
) indicando que la operación fue exitosa. Para salir del shell del RDBMS, escribimos exit
y luego repetimos para regresar a la línea de comandos del usuario gabriel.
Para asegurarnos de que la configuración funcione, conectémonos con el usuario que acabamos de crear:
psql -h localhost -U appuser -d appdb
Si como resultado podemos ver el nombre de la base de datos como mostramos arriba, hemos confirmado que la configuración quedó como esperábamos. Para salir del prompt, escribiremos \q
seguido por Enter.
Conclusión
En esta guía, hemos cubierto los pasos necesarios para instalar, configurar y usar PostgreSQL en un servidor Ubuntu 22.04. Ahora tienes los conocimientos para administrar tu propio servidor PostgreSQL de manera eficiente y segura.