Practica 3 - Configuración de PostgreSQL
Introducción
En este artículo te mostraré de forma muy coloquial cómo instalar y configurar PostgreSQL en un VPS de Digital Ocean. Aprenderás a instalar el servidor y el cliente de PostgreSQL, configurar usuarios y bases de datos, habilitar conexiones seguras mediante SSL, y ajustar las variables de entorno para integrarlo con un proyecto Laravel.
1. Instalación de PostgreSQL
PostgreSQL es un sistema de gestión de bases de datos relacional de código abierto y gratuito. Es muy potente, seguro y altamente extensible, y es una excelente opción para proyectos de cualquier tamaño. En este caso, instalaremos PostgreSQL 15 en un servidor VPS con Rocky Linux.
1.1 Instalar el Repositorio y PostgreSQL
Instalar el repositorio de PostgreSQL:
1
sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Deshabilitar el módulo PostgreSQL por defecto y actualizar repositorios:
1 2
sudo dnf update -y sudo dnf -qy module disable postgresql
Instalar PostgreSQL (servidor y cliente):
- Actualizar repositorios nuevamente
1
sudo dnf update -y
- Instalación del servidor local de PostgreSQL 15 y sus contribuciones
1
sudo dnf install postgresql15 postgresql15-server glibc-all-langpacks postgresql15-contrib -y
- Instalación del cliente de PostgreSQL 15
1
sudo dnf install postgresql15 glibc-all-langpacks -y
- Actualizar repositorios nuevamente
Inicializar la base de datos:
1 2
sudo dnf update -y sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
Habilitar y arrancar el servicio de PostgreSQL:
1 2
sudo systemctl enable postgresql-15 sudo systemctl start postgresql-15
Instalar el módulo PDO para PostgreSQL (para PHP):
1
sudo dnf install php-pgsql -y
2. Configuración del Usuario PostgreSQL
2.1 Configurar Acceso y Roles
Acceder a la consola de PostgreSQL:
1
sudo -i -u postgres psql
Cambiar la contraseña del usuario
postgres
:1
ALTER USER postgres PASSWORD 'tucontraseña';
Crear un nuevo usuario:
1
CREATE USER {user} WITH PASSWORD 'tucontraseña';
Asignar roles al nuevo usuario:
1 2 3
ALTER ROLE {user} WITH LOGIN; ALTER ROLE {user} WITH CREATEDB; ALTER ROLE {user} WITH SUPERUSER;
Crear una base de datos y asignarle el dueño:
1
CREATE DATABASE {db} WITH OWNER {user};
Dar privilegios completos sobre la base de datos al usuario:
1
GRANT ALL PRIVILEGES ON DATABASE {db} TO {user};
Salir de la consola de PostgreSQL:
1
\q
3. Configuración de PostgreSQL
3.1 Configurar SSL y Ajustar la Configuración
Instalar OpenSSL (si aún no está instalado):
1
sudo dnf install openssl
Generar certificados SSL:
1
openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key -subj "/CN={ip-privada-bd}"
Ajustar permisos de los archivos (opcional):
1 2
sudo chmod 644 *.crt sudo chmod 600 *.key
Mover los archivos generados a la carpeta de datos de PostgreSQL:
1
sudo mv * /var/lib/pgsql/15/data/
Cambiar el propietario de los archivos a
postgres:postgres
:1
sudo chown -R postgres:postgres /var/lib/pgsql/15/data/*
Editar el archivo
postgresql.conf
:Ubicado en
/var/lib/pgsql/15/data/postgresql.conf
, ajusta las siguientes líneas:1 2 3 4 5 6 7
listen_addresses = 'localhost,{ip-privada},{otra-ip}' port = {puerto personalizado} max_connections = 100 password_encryption = scram-sha-256 ssl = on ssl_cert_file = '/var/lib/pgsql/15/data/server.crt' ssl_key_file = '/var/lib/pgsql/15/data/server.key'
Configurar el archivo
pg_hba.conf
:Ubicado en
/var/lib/pgsql/15/data/pg_hba.conf
, añade o ajusta la línea para conexiones SSL:1
hostssl {database} {userdb} {ip-privada,127.0.0.1/32,otra-ip} scram-sha-256
Reiniciar el servicio de PostgreSQL para aplicar los cambios:
1
sudo systemctl restart postgresql-15
3.2 Conectar a la Base de Datos y Configurar Certificados en el Lado del Cliente
Conectarse a la base de datos desde la consola de PostgreSQL para verificar la conexión:
- Cambiar a usuario postgres y conectarse a la base de datos:
1 2
sudo su - postgres psql -h {host} -p {port} -U {userdb} -d {database}
- Cambiar a usuario postgres y conectarse a la base de datos:
Conectarse directamente sin cambiar de usuario para verificar la conexión:
1
sudo -i -u postgres psql -h {host} -p {port} -U {userdb} -d {database}
Copiar el contenido del certificado
server.crt
al droplet web:En el servidor de la base de datos (BD):
1
sudo cat /var/lib/pgsql/15/data/server.crt
En el servidor web (copiando el contenido del archivo .crt de la BD):
1 2
mkdir .postgresql && cd .postgresql nano root.crt
Luego, asigna los permisos adecuados:
1 2 3
sudo chmod 644 *.crt sudo setsebool -P httpd_can_network_connect on sudo chcon -R -t httpd_sys_rw_content_t /home/{user}/.postgresql
4. Agregar Variables de Entorno en Laravel
Configura tu archivo .env
para conectarte a PostgreSQL:
1
2
3
4
5
6
7
8
9
DB_CONNECTION=pgsql
DB_HOST={host}
DB_PORT={port}
DB_DATABASE={database}
DB_USERNAME={user}
DB_PASSWORD={password}
// Opciones de SSL: "verify-full" para validar todo o "verify-ca" para solo el certificado
// Recomendable "Verify-ca" para la practica
DB_SSLMODE={verify-full / verify-ca}
5. Ejecutar Migraciones y Seeders en Laravel
Una vez configurado PostgreSQL y actualizado el archivo .env
, ejecuta las migraciones y/o seeders:
1
php artisan migrate:fresh --seed
Conclusiones
En este artículo has aprendido a instalar y configurar PostgreSQL en un servidor VPS de Digital Ocean. Hemos configurado usuarios, bases de datos, conexiones seguras mediante SSL, y ajustado las variables de entorno en un proyecto Laravel.
Cualquier duda o comentario, agregarla en la sección de comentarios abajo de cada publicación.