DevOps

De Cero a Producción: Tu Nube Privada con Docker Compose (PostgreSQL, Redis y MongoDB)

¿Alguna vez te has preguntado cómo gestionar múltiples servicios de bases de datos para tus proyectos sin volverte loco? En este tutorial detallado, te llevaremos de la mano en un viaje desde …

Contenido del tutorial

¡Hola, comunidad de "Tu código cotidiano"!

Hoy vamos a embarcarnos en un proyecto emocionante y muy práctico: aprenderemos a levantar un ecosistema completo de servicios de bases de datos (PostgreSQL, Redis y MongoDB) usando Docker y Docker Compose. Al final de este tutorial, tendrás tu propia nube privada de datos, robusta, persistente y fácil de gestionar.

Este tutorial es el resultado de una intensa depuración y representa la forma más estable y profesional de lograrlo, especialmente si, como yo, tienes hardware un poco más antiguo.

¿Qué vamos a construir?

  • Un servidor de base de datos relacional PostgreSQL.
  • Un servidor de base de datos en memoria Redis, ideal para cachés y colas.
  • Un servidor de base de datos NoSQL MongoDB, perfecto para datos flexibles.
  • Todo conectado en una red virtual privada, pero accesible de forma segura desde nuestra red local.
  • Y lo más importante: con persistencia de datos, para que no perdamos nuestra información si reiniciamos los servicios.

¡Manos a la obra! 💻

Paso 1: El Prerrequisito Indispensable - Configurar el DNS de Docker

Antes de escribir una sola línea de código, debemos asegurarnos de que Docker pueda comunicarse con internet de forma fiable, especialmente durante la descarga de imágenes. Este fue el problema más difícil de diagnosticar y su solución es la base de nuestro éxito.

En tu servidor Linux, abre (o crea) el archivo de configuración del servicio de Docker:

sudo nano /etc/docker/daemon.json

Asegúrate de que su contenido sea exactamente este. Esto le ordena a Docker usar los servidores DNS públicos de Google y Cloudflare, que son muy robustos:

{
  "dns": ["8.8.8.8", "1.1.1.1"]
}

Guarda el archivo y, para que los cambios surtan efecto, reinicia el servicio de Docker:

sudo systemctl restart docker

Paso 2: El Corazón de la Arquitectura - Nuestro docker-compose.yml

Toda nuestra infraestructura vivirá en un único archivo. Docker Compose es una herramienta que nos permite definir y gestionar aplicaciones multi-contenedor de forma declarativa.

Crea una carpeta para tu proyecto y entra en ella:

mkdir mi_nube_privada
cd mi_nube_privada

Dentro, crea el archivo docker-compose.yml:

nano docker-compose.yml

Pega el siguiente código. Lee los comentarios para entender el rol de cada servicio.

# Versión del formato del archivo. '3.8' es una versión moderna y estable.
version: '3.8'

# Aquí definimos todos nuestros servicios (contenedores).
services:
  # --- Servicio PostgreSQL ---
  postgres:
    image: postgres:latest
    container_name: postgres-db
    restart: unless-stopped
    environment:
      # IMPORTANTE: Cambia esta contraseña por una segura.
      - POSTGRES_PASSWORD=<TU_CONTRASENA_POSTGRES>
    ports:
      # Mapea el puerto 5432 del contenedor al 54320 de tu servidor.
      # Reemplaza <IP_DEL_SERVIDOR> por la IP real de tu servidor en la LAN.
      - "<IP_DEL_SERVIDOR>:54320:5432"
    volumes:
      # Persistencia de datos para PostgreSQL.
      - postgresdata:/var/lib/postgresql/data
    networks:
      - red_de_servicios

  # --- Servicio Redis ---
  redis:
    image: redis:latest
    container_name: redis-server
    restart: unless-stopped
    # Inicia Redis con una contraseña obligatoria.
    command: ["redis-server", "--requirepass", "<TU_CONTRASENA_REDIS>"]
    ports:
      - "<IP_DEL_SERVIDOR>:6379:6379"
    volumes:
      - redisdata:/data
    networks:
      - red_de_servicios

  # --- Servicio MongoDB ---
  mongo:
    # Usamos la versión 4.4 para máxima compatibilidad con CPUs antiguas.
    image: mongo:4.4
    container_name: mongo-db
    restart: unless-stopped
    environment:
      - MONGO_INITDB_ROOT_USERNAME=<TU_USUARIO_MONGO>
      - MONGO_INITDB_ROOT_PASSWORD=<TU_CONTRASENA_MONGO>
    ports:
      - "<IP_DEL_SERVIDOR>:27017:27017"
    volumes:
      - mongodata:/data/db
    networks:
      - red_de_servicios

# Aquí definimos nuestra red virtual privada (nuestro "switch virtual").
networks:
  red_de_servicios:
    driver: bridge

# Aquí definimos los volúmenes para que Docker los gestione.
volumes:
  postgresdata:
  redisdata:
  mongodata:

Antes de guardar, asegúrate de reemplazar los placeholders:

  • IP_DEL_SERVIDOR: por la IP de tu servidor (ej. 192.168.0.102).
  • TU_CONTRASENA_POSTGRES: por una contraseña segura para PostgreSQL.
  • TU_CONTRASENA_REDIS: por una contraseña segura para Redis.
  • TU_USUARIO_MONGO y TU_CONTRASENA_MONGO: por las credenciales para MongoDB.

Paso 3: Levantar la Infraestructura

Ahora viene la magia. Con nuestro archivo docker-compose.yml listo, un solo comando es suficiente para construir toda nuestra nube de servicios. Desde la carpeta mi_nube_privada, ejecuta:

sudo docker compose up -d

Docker leerá el archivo, descargará las imágenes oficiales, creará la red, los volúmenes y lanzará los tres contenedores, configurando todo automáticamente.

Paso 4: Verificación y Pruebas de Conexión

Una vez que el comando anterior termine, podemos verificar que todo funciona.

¿Están los contenedores corriendo?:

sudo docker compose ps

Estás viendo solo el 60% del contenido. Hazte Premium para acceder al tutorial completo.

Comunidad

Comentarios y valoraciones

No hay comentarios aún. ¡Sé el primero en opinar!