Instalación de PostgreSQL en Ubuntu con Django

Clase 19 de 22Curso de Despliegue de Aplicaciones Python en la Nube

Resumen

Configurar una base de datos robusta en producción es clave para un proyecto confiable. Aquí verás, paso a paso, cómo instalar PostgreSQL en Ubuntu, crear un usuario y base de datos, probar accesos con psql y enlazar un proyecto de Django mediante la variable database_url. Además, se señalan consideraciones de seguridad, rendimiento y escalabilidad para evitar caídas de servicio.

¿Cómo instalar PostgreSQL en Ubuntu y verificar el servicio?

Instalar el motor en el mismo servidor web simplifica el despliegue, aunque añade riesgos si comparten recursos. El proceso inicia conectándote por SSH y gestionando paquetes con apt.

  • Conéctate por SSH con tu llave de identificación.
  • Actualiza paquetes con sudo apt update.
  • Instala PostgreSQL con sudo apt install postgresql.
  • Verifica el servicio con sudo service postgresql status. Debe mostrarse activo.
ssh -i <llave.pem> ubuntu@<IP-o-dominio>
sudo apt update
sudo apt install postgresql
sudo service postgresql status

Conceptos trabajados: servicio del sistema, estado (status), motor de base de datos, instalación de paquetes. Buenas prácticas: validar que el servicio esté activo antes de continuar.

¿Cómo crear usuarios y bases de datos en PostgreSQL para Django?

Crear un usuario dedicado y una base de datos con owner definido ayuda a mantener permisos claros. El acceso inicial se hace con el usuario del sistema postgres para abrir la consola psql.

¿Cómo entrar a la consola psql como postgres?

  • Cambia al usuario del sistema postgres.
  • Abre la consola sin argumentos para conectar por defecto.
sudo -i -u postgres
psql

Dentro de psql, el prompt cambia indicando que operas como postgres.

¿Qué SQL ejecutar para usuario, base y owner?

  • Crea el usuario de aplicación con contraseña.
  • Crea la base de datos y define el owner.
  • Lista bases de datos con \l y sal con \q.
CREATE USER usuarioplatzi WITH PASSWORD 'pass';
CREATE DATABASE dbplatzi OWNER usuarioplatzi;

Prueba el acceso desde el usuario normal de Ubuntu (tu aplicación corre con este usuario):

psql -h localhost -U usuarioplatzi -d dbplatzi
  • Ingresa la contraseña pass (no se muestra al tipear).
  • Si conectas, las credenciales funcionan. Puedes salir con \q.

Conceptos trabajados: creación de roles, owner, conexión local (localhost), separación de permisos. Dato importante: el puerto por defecto es 5432; cambiarlo puede mejorar la protección del servicio.

¿Cómo configurar Django con database_url y aplicar migrate?

Para que Django use PostgreSQL, define la variable database_url en el archivo .env de tu proyecto (por ejemplo, en la ruta de Server Apps > Django Basic Production). La URL concentra usuario, contraseña, host, port y base de datos.

¿Qué formato usar en la URL de conexión?

  • Usa el esquema postgresql://.
  • Incluye usuario y contraseña, host y puerto, y el nombre de la base.
database_url=postgresql://usuarioplatzi:pass@localhost:5432/dbplatzi

Puntos clave: el valor alimenta la configuración del proyecto vía la variable database_url. Si cambias el puerto por seguridad, actualiza aquí.

¿Cómo validar la conexión con migraciones de Django?

  • Activa tu entorno virtual.
  • Ejecuta las migraciones con el comando integrado de Django.
python manage.py migrate

Si la conexión está correcta, se crearán las tablas por defecto de Django en dbplatzi. Puedes verificarlo conectando con psql y listando tablas.

Conceptos trabajados: variables de entorno, migrate, verificación de tablas. Beneficio: evidencia inmediata de que la conexión y los permisos son correctos.

¿Qué considerar sobre seguridad, rendimiento y escalabilidad?

  • Seguridad: evita dejar el puerto por defecto expuesto. Cambia el port si es posible.
  • Rendimiento: si el servidor web consume mucha memoria, puede afectar la base.
  • Escalabilidad: separar el motor en otro servidor o servicio gestionado reduce riesgos.

Como reto práctico: crea un servidor de base de datos en un servicio como RDS o en otro proveedor (por ejemplo, Linode), conéctalo a tu proyecto de Django y comparte en comentarios cómo lo lograste. Me encantará leer tu experiencia y resolver dudas.