- Tener instalado Node.js (18 o superior) 👉 sitio oficial
- Descargar e Instalar Docker (24 o superior) 👉 sitio oficial
Ejecutar este comando en la terminal y si hay respuesta, está instalado.
docker -v
Ejemplo de respuesta esperada:
Verificar si está instalado docker-compos
docker-compose -v
Se espera una respuesta similar a la anterior.
- Iniciar el proyecto de node
npm init -y
- Instalar paquetes npm requeridos:
npm install pg dotenv
- Crear archivos del proyecto de pruebas, con una estructura como esta:
- carpeta_proyecto/
- ./ index.js
- ./ .env
- ./ package.json
- 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.
- 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:
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:
- 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.
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.
- Con eso ya tenemos postgresql ejecutandose en nuestro computador. Lo podemos verificar en docker desktop, debería verse algo así:
- 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.
Probemos entonces una conexión simple a la imagen de postgresql en docker desde node usando el paquete pg y dotenv.
- 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));
Ahora podrás usar Postgresql sin instalarlo. Recuerda que si quieres detener el contenedor lo puedes hacer desde docker desktop.
- 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