PostgreSQL en Ubuntu para Django

Resumen

Configurar una base de datos en producción es uno de esos pasos que define si tu aplicación de Django va a funcionar de verdad o se va a quedar en intentos. Aquí aprenderás a instalar PostgreSQL en un servidor Ubuntu, crear un usuario, una base de datos y conectarla a tu proyecto Django usando una variable de entorno tipo DATABASE_URL. Es ideal si ya tienes tu servidor desplegado y necesitas dar el siguiente paso hacia un entorno productivo real.

¿Cómo instalar PostgreSQL en un servidor Ubuntu?

Lo primero es conectarte a tu servidor por SSH usando tu llave de identificación. Una vez dentro, actualiza la lista de paquetes disponibles antes de instalar cualquier cosa.

Ejecuta estos comandos en orden [0:30]:

  • sudo apt update para refrescar los paquetes disponibles.
  • sudo apt install postgresql para instalar el motor de base de datos.
  • sudo service postgresql status para validar que el servicio quedó activo.

Después de la instalación, el sistema crea automáticamente un usuario llamado postgres. Este usuario es el administrador por defecto y desde él vas a entrar a la consola SQL.

¿Qué es PostgreSQL? Es un motor de bases de datos relacional, gratuito y de código abierto, muy usado en aplicaciones de Django por su robustez y compatibilidad nativa con el ORM.

¿Cómo crear un usuario y una base de datos en PostgreSQL?

Para entrar a la consola SQL, ejecuta sudo -i -u postgres y luego psql sin argumentos [1:30]. Vas a notar que el prompt cambia, lo que confirma que ya no estás operando como ubuntu sino como postgres.

Dentro de la consola, ejecuta estas sentencias:

  • CREATE USER usuario_platzi WITH PASSWORD 'Pass'; para crear un nuevo usuario con contraseña.
  • CREATE DATABASE dbplatzi OWNER usuario_platzi; para crear la base de datos y asignarle el dueño.
  • \l para listar todas las bases de datos y verificar que el owner quedó correctamente asignado.

Definir el owner de la base de datos es clave: significa que ese usuario tiene los permisos completos sobre ella, sin necesidad de seguir operando con el superusuario postgres. Es una buena práctica de seguridad.

Para salir, usa \q dentro de psql y luego Ctrl+D para volver a tu usuario ubuntu.

¿Cómo validar la conexión desde el usuario Ubuntu?

Antes de tocar Django, prueba que las credenciales funcionen desde el usuario que ejecuta tu aplicación. El comando es:

bash psql -h localhost -U usuario_platzi dbplatzi

Te va a pedir la contraseña (no se muestra mientras la escribes, eso es normal). Si entras sin errores, la configuración a nivel de base de datos está lista.

¿Cómo configurar Django con la variable DATABASE_URL?

Ahora viene la parte de Django. Ve a la ruta del proyecto en tu servidor: apps/django/basic/production/ y edita el archivo .env [4:30].

En el repositorio del proyecto existe una variable llamada DATABASE_URL que centraliza toda la conexión en una sola línea. La estructura es:

DATABASE_URL="postgresql://usuario_platzi:Pass@localhost:5432/dbplatzi"

Desglosándola:

  • postgresql es el motor que estás usando.
  • usuario_platzi:Pass son las credenciales del usuario.
  • localhost es el host, porque la base corre en el mismo servidor.
  • 5432 es el puerto por defecto de PostgreSQL.
  • dbplatzi es el nombre de la base de datos.

¿Por qué cambiar el puerto 5432? Es el puerto por defecto y, justamente por eso, el más atacado en intentos de hackeo. Cambiarlo a otro número reduce tu superficie de ataque sin esfuerzo.

¿Cómo aplicar las migraciones de Django?

Guarda el .env, activa el entorno virtual y ejecuta el comando de migraciones de Django:

bash python manage.py migrate

Si la conexión está bien configurada, Django va a crear todas las tablas que trae por defecto: usuarios, sesiones, permisos, content types, entre otras. Puedes verificarlo entrando otra vez con psql y listando las tablas dentro de dbplatzi.

¿Qué riesgos tiene poner la base de datos en el mismo servidor web?

Tener PostgreSQL y Django corriendo en la misma máquina simplifica el despliegue, pero tiene un costo. Si tu servidor web consume mucha memoria por un pico de tráfico, también vas a tumbar la base de datos. Y si el servidor cae, cae todo junto.

Las tres variables que siempre debes tener en mente al administrar un motor de bases de datos son:

  • Seguridad, con usuarios dedicados, puertos no estándar y contraseñas robustas.
  • Rendimiento, separando recursos cuando el tráfico lo justifique.
  • Escalabilidad, eligiendo servicios gestionados cuando crezcas.

Un buen siguiente paso es separar la base de datos en un servicio dedicado como RDS de AWS o un servidor independiente en Linode. Conéctalo a tu proyecto de Django y cuéntame en los comentarios cómo te fue con la migración.