MongoDB replicada para desarrollo local utilizando Podman

Configurar un Replica Set en MongoDB es esencial cuando trabajamos con funcionalidades como Transactions. Aunque normalmente se piensa en clústeres de varios nodos, para el desarrollo local es suficiente y mucho más eficiente utilizar una réplica de un solo nodo. En este post vamos a levantar una base de datos replicada de MongoDB utilizando Podman, aunque también es perfectamente viable hacerlo utilizando Docker, solo hay que cambiar el comando podman por docker.

Archivo de configuración compose

El siguiente archivo podman-compose.yaml define el servicio con el parámetro --replSet, que activa el modo de replicación:

services:
  db1:
    restart: always
    image: mongo:latest
    command: --replSet rs0 --port 27017 --bind_ip_all
    ports:
      - 27017:27017
    volumes:
      - db1:/data/db

volumes:
  db1:

podman-compose.yaml

Pasos para levantar el entorno

  1. Iniciar el contenedor: Ejecuta el comando para levantar la máquina virtual en segundo plano:
# Si estás en la ubicación del archivo podman-compose.yml
podman-compose up -d

# Si estas en otro directorio debes apuntar al podman-compose.yml
podman-compose -p mongo -f /ubidacion/del/compose/podman-compose.yml up -d
  1. Acceder al shell de MongoDB: Una vez que el contenedor esté corriendo, entra para realizar la configuración inicial:
# Listar contendores
podman ps

# Accede al contenedor
podman exec -it <id-del-contenedor> mongo

# Ejemplo
podman exec -it 1a5f5e82bed8 mongosh

Inicialización del replica set

Dentro de la terminal de MongoDB (mongosh), ejecuta el siguiente comando para inicializar el conjunto de réplicas con un solo miembro:

rs.initiate({
  "_id": "rs0",
  "members": [
    {
      "_id": 0,
      "host": "localhost:27017",
      "priority": 1
    }
  ]
})

Conexión desde aplicaciones

Por último para verificar que todo ha ido correctamente debes conectarte desde tu mongosh local:

mongosh "mongodb://localhost?replicaSet=rs0"

Notas importantes sobre persistencia

  • Reinicio del sistema: Al reiniciar tu computadora, es necesario volver a ejecutar podman-compose up para que el contenedor esté disponible.
  • Automatización: La opción podman generate systemd se encuentra deprecada actualmente. Aunque existen alternativas como Quadlets, para un flujo de trabajo de desarrollo ágil, el uso de Compose suele ser suficiente.