Skip to content

Instantly share code, notes, and snippets.

@felipejoq
Created February 17, 2024 15:54
Show Gist options
  • Save felipejoq/2c25d733286dcf67a7f0cf6ee0a417e5 to your computer and use it in GitHub Desktop.
Save felipejoq/2c25d733286dcf67a7f0cf6ee0a417e5 to your computer and use it in GitHub Desktop.
Node.js + PostgreSQL (usando Docker)

Requisitos:

Comprobar instalaciones:

Ejecutar este comando en la terminal y si hay respuesta, está instalado.

docker -v

Ejemplo de respuesta esperada:

Captura de pantalla 2024-02-17 a la(s) 11 36 49

Verificar si está instalado docker-compos

docker-compose -v

Se espera una respuesta similar a la anterior.

Captura de pantalla 2024-02-17 a la(s) 11 56 11

Preparar el proyecto de node

  1. Iniciar el proyecto de node
npm init -y
  1. Instalar paquetes npm requeridos:
npm install pg dotenv
  1. Crear archivos del proyecto de pruebas, con una estructura como esta:
  • carpeta_proyecto/
    • ./ index.js
    • ./ .env
    • ./ package.json
  1. Editar el archivo .env y añadir estas variables de entorno:
POSTGRES_USER=postgres
POSTGRES_DB=likeme
POSTGRES_PASSWORD=123123
POSTGRES_PORT=5432 # <- Puerto por defecto: 5432. Si tienen problemas con el puerto, se puede cambiar aquí, ej: 5433
POSTGRES_HOST=localhost

Estas serán las variables de entorno que leerá docker al construir la imagen de postgresql y le asignará como valores para poder conectarse.

  1. Copiar la imagen que construirá docker:

Deben añadir a la carpeta del proyecto este archivo .yml que contiene las instrucciones que le dirán a docker que imagen debe crear.

👉 Link al archivo docker-compose.yml

  • Copiar el archivo docker-compose.yml en la carpeta del proyecto. El proyecto debería verse algo así finalmente:

Captura de pantalla 2024-02-17 a la(s) 12 50 16

Ejecutar postgresql con docker

Ahora levantaremos la imagen de postgresql y para eso le diremos a docker que construya el contenedor en base a nuestro archivo docker-compose.yml Para eso, seguir estos pasos:

  1. ejecutar en la terminal estando dentro de la carpeta del proyecto el siguiente comando:
docker-compose up -d

y comenzará la creación del contenedor con postgresql, puede demorar un poquito porque tiene que descargar todo lo necesario.

Captura de pantalla 2024-02-17 a la(s) 11 59 55

El comando docker-compose up -d le dirá a docker que construya la imagen en base al archivo docker-compose.yml que está en la carpeta de nuestro proyecto. Las opciones up -d le dirá que levante la imagen luego de crearla y -d de forma "detach" o desacoplada de la terminal, por lo que cuando termine el proceso puedes cerrarla sin problema.

  1. Con eso ya tenemos postgresql ejecutandose en nuestro computador. Lo podemos verificar en docker desktop, debería verse algo así:

Captura de pantalla 2024-02-17 a la(s) 12 06 23

  1. Comprobemos la conexión. Para eso usaré Table plus con su versión gratuita basta y sobra. Puedes usar este programa para crear las tablas de manera más visual. Igual sirve pg-admin.

Captura de pantalla 2024-02-17 a la(s) 12 14 23

Porbar postgresql (en docker) con node.js

Probemos entonces una conexión simple a la imagen de postgresql en docker desde node usando el paquete pg y dotenv.

  1. Copia y pega este código en ti archivo index.js y ejecutalo con node index.js
  • Recuerda añadir "type": "module" en el archivo package.json si vamos a usar ES6, no es necesario si usamos common js.
import 'dotenv/config'; // Usamos dotenv para que cree las variables en nuestro entorno
import pg from 'pg' // driver para conectarnos a postgresql

const pool = new pg.Pool({
  user: process.env.POSTGRES_USER,
  host: process.env.POSTGRES_HOST,
  database: process.env.POSTGRES_DB,
  password: process.env.POSTGRES_PASSWORD,
  port: process.env.POSTGRES_PORT,
});

const getDateFromPostgreSQL = async ({ pool }) => {
  return await pool.query('SELECT now()', []);
}

getDateFromPostgreSQL({ pool })
  .then(result => console.log(result.rows[0]))
  .catch(error => console.log(error));

Captura de pantalla 2024-02-17 a la(s) 12 30 12

Resumen:

Ahora podrás usar Postgresql sin instalarlo. Recuerda que si quieres detener el contenedor lo puedes hacer desde docker desktop.

Captura de pantalla 2024-02-17 a la(s) 12 53 18

Posibles errores:

  • Para detener la imagen de docker, usa docker desktop, es más intuitivo.
  • Para levantar la imagen usa el comando docker-compose up -d en la terminal estando dentro de la carpeta del proyecto.
  • Cuando ejecutes la imagen de postgresql con docker se creará una carpeta dentro del proyecto llamada postgres, esta carpeta contiene los archivos de la DB para no perderlos si apagamos la imagen de docker.
  • No olvides añadir la carpeta postgres al archiv .gitignore para no darle seguimiento con git y menos subirla a github.
  • Si no logras conectarte a a imagen de postgres, borra la carpeta postgres en tu proyecto y elimina el contenedor e imagen desde docker desktop, y vuelve a intentarlo con el comando docker-compose up -d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment