PostgreSQL es una base de datos relacional fiable para aplicaciones web, analítica y cargas mixtas. Esta guía cubre la instalación en Ubuntu/Debian, la creación de una base de datos y la seguridad básica.
Requisitos previos
- Ubuntu 20.04+ o Debian 11+ con
sudo - Al menos 1 GB de RAM (2 GB+ para cargas más pesadas)
Instalación
1. Actualizar e instalar el servidor
Bashsudo apt update && sudo apt upgrade -y sudo apt install -y postgresql postgresql-contrib
2. Activar y comprobar el servicio
Bashsudo systemctl status postgresql sudo systemctl enable postgresql
Por defecto PostgreSQL escucha en localhost (127.0.0.1), adecuado para apps en el mismo VPS.
Crear usuario y base de datos de aplicación
Cambie al usuario del sistema postgres y abra psql:
Bashsudo -u postgres psql
En psql (ajuste nombres y contraseña):
SQLCREATE USER myapp WITH PASSWORD 'strong_password_here'; CREATE DATABASE myapp_db OWNER myapp; GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp; \q
Pruebe la conexión:
Bashpsql -h 127.0.0.1 -U myapp -d myapp_db
Cadena de conexión típica
TEXTpostgresql://myapp:[email protected]:5432/myapp_db
Seguridad esencial
- Contraseña robusta para el rol de aplicación.
- Evite exponer PostgreSQL a Internet salvo que sea estrictamente necesario. Si debe hacerlo: cortafuegos estricto,
listen_addresses,pg_hba.conf, preferiblemente VPN o túnel. - Combine con UFW y Fail2ban para servicios públicos.
Acceso remoto (evitar salvo necesidad)
Edite postgresql.conf (ruta variable, a menudo /etc/postgresql/*/main/):
Configlisten_addresses = '*'
En pg_hba.conf, añada una línea restrictiva (ejemplo: IP de confianza):
TEXThost myapp_db myapp 203.0.113.50/32 scram-sha-256
Luego:
Bashsudo systemctl restart postgresql
Copias de seguridad
Volcado lógico:
Bashsudo -u postgres pg_dump myapp_db > backup_myapp.sql
Restauración:
Bashsudo -u postgres psql myapp_db < backup_myapp.sql
Programe copias de seguridad (cron) hacia almacenamiento externo.
Solución de problemas
- Peer authentication failed: use
-h 127.0.0.1para TCP, o ajustepg_hba.conf. - Connection refused: compruebe el estado del servicio y el puerto (
5432por defecto).