Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Crear un contenedor Docker que incluye Node.js, MongoDB, Adminer y NGINX Proxy Manager para SSL utilizando Docker Compose.

Tiempo de lectura: 3 minutos

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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:

  1. nodejs: utiliza la imagen de Node.js 14 y expone el puerto 3000. También define una variable de entorno MONGO_URI para que la aplicación Node.js pueda conectarse a la base de datos MongoDB.
  2. mongo: utiliza la imagen de MongoDB y crea un volumen para almacenar los datos de la base de datos.
  3. adminer: utiliza la imagen de Adminer y expone el puerto 8080.
  4. 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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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!');
});
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!'); });
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
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{
"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"
}
}
{ "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" } }
{
  "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 Manager
  • letsencrypt: para almacenar los certificados SSL generados por Let’s Encrypt
  • var: para almacenar los registros de NGINX

Dentro del directorio nginx-proxy-manager/data, crea un archivo default.conf con el siguiente contenido:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
}
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; } }
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker-compose up -d
docker-compose up -d
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 admin@example.com 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

0

Deja un comentario