
En este tutorial, aprenderás cómo crear un contenedor Docker que incluye Node.js, MongoDB, Adminer y NGINX Proxy Manager para SSL utilizando Docker Compose.
Paso 1: Crear el archivo docker-compose.yml
Primero, crea un nuevo directorio en tu computadora para el proyecto y luego crea un archivo docker-compose.yml en el directorio raíz. Este archivo definirá los servicios de Docker que vamos a utilizar.
Agrega lo siguiente al archivo docker-compose.yml:
version: '3.9'
services:
nodejs:
image: node:14
restart: always
ports:
- "3000:3000"
volumes:
- ./app:/app
working_dir: /app
command: npm run start
environment:
- NODE_ENV=production
- MONGO_URI=mongodb://mongo:27017/mydatabase
mongo:
image: mongo:latest
restart: always
volumes:
- mongo-data:/data/db
adminer:
image: adminer:latest
restart: always
ports:
- "8080:8080"
nginx-proxy-manager:
image: jlesage/nginx-proxy-manager
container_name: nginx-proxy-manager
ports:
- "80:80"
- "443:443"
environment:
- UID=1000
- GID=1000
volumes:
- ./nginx-proxy-manager/data:/config
- ./nginx-proxy-manager/letsencrypt:/etc/letsencrypt
- ./nginx-proxy-manager/var:/var
Este archivo define cuatro servicios de Docker:
nodejs: utiliza la imagen de Node.js 14 y expone el puerto 3000. También define una variable de entornoMONGO_URIpara que la aplicación Node.js pueda conectarse a la base de datos MongoDB.mongo: utiliza la imagen de MongoDB y crea un volumen para almacenar los datos de la base de datos.adminer: utiliza la imagen de Adminer y expone el puerto 8080.nginx-proxy-manager: utiliza la imagen de NGINX Proxy Manager y expone los puertos 80 y 443 para HTTPS. También define volúmenes para almacenar la configuración, los certificados SSL y los registros de NGINX.
Paso 2: Crear la aplicación Node.js
Ahora necesitamos crear la aplicación Node.js. En este tutorial, utilizaremos un ejemplo simple que muestra cómo conectarse a la base de datos MongoDB.
Primero, crea un nuevo directorio app dentro del directorio raíz. Luego, crea un archivo app/index.js con el siguiente contenido:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
Este archivo define una aplicación Node.js básica con una ruta raíz que devuelve un mensaje de saludo y se conecta a la base de datos MongoDB utilizando la variable de entorno MONGO_URI.
Luego, crea un archivo app/package.json con el siguiente contenido:
Luego, crea un archivo app/package.json con el siguiente contenido:
json
{
"name": "nodejs-mongodb-docker",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.13.8"
}
}
Este archivo define las dependencias de la aplicación y un script de inicio que ejecuta el archivo index.js.
Paso 3: Crear los directorios y archivos necesarios
Ahora necesitamos crear algunos directorios y archivos adicionales para la configuración de NGINX Proxy Manager y para almacenar los certificados SSL.
Crea un nuevo directorio nginx-proxy-manager dentro del directorio raíz. Luego, dentro del directorio nginx-proxy-manager, crea los siguientes directorios:
data: para almacenar la configuración de NGINX Proxy Managerletsencrypt: para almacenar los certificados SSL generados por Let’s Encryptvar: para almacenar los registros de NGINX
Dentro del directorio nginx-proxy-manager/data, crea un archivo default.conf con el siguiente contenido:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name localhost;
ssl_certificate /etc/letsencrypt/live/nginx-proxy-manager/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nginx-proxy-manager/privkey.pem;
location / {
proxy_pass http://nodejs:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
location /adminer/ {
proxy_pass http://adminer:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
Este archivo define dos servidores NGINX: uno que redirige todas las solicitudes HTTP a HTTPS, y otro que maneja las solicitudes HTTPS y las redirige a la aplicación Node.js y a Adminer.
Paso 4: Ejecutar el contenedor
Finalmente, podemos ejecutar el contenedor utilizando Docker Compose.
Abre una terminal en el directorio raíz del proyecto y ejecuta el siguiente comando:
docker-compose up -d
Este comando descargará las imágenes de Docker necesarias y creará los contenedores. Una vez que se complete la ejecución, podrás acceder a la aplicación Node.js en tu navegador en la dirección http://localhost:3000 y a Adminer en http://localhost:8080. Además, NGINX Proxy Manager estará disponible en http://localhost.
Para generar los certificados SSL con Let’s Encrypt, inicia sesión en NGINX Proxy Manager utilizando las credenciales predeterminadas (correo electrónico [email protected] y contraseña changeme) y sigue las instrucciones en la interfaz web.
Conclusión
En este tutorial, aprendiste cómo crear un contenedor Docker que incluye Node.js, MongoDB, Adminer y NGINX Proxy Manager para SSL

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.