MongoDB replicada para desarrollo local utilizando Podman

Share
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"

Inicio automático con Systemd

Para que nuestra base de datos MongoDB se inicie automáticamente al arrancar el sistema y se mantenga activa en segundo plano, utilizaremos un servicio de usuario en systemd.

  1. Crear el archivo de servicio. Si el directorio no existe, puedes crearlo primero:
mkdir -p ~/.config/systemd/user/

Ahora crea el archivo ~/.config/systemd/user/mongodb.service con el siguiente contenido (asegúrate de ajustar la ruta de tu proyecto):

[Unit]
Description=Servicio de MongoDB Replica Set con Podman Compose
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/tu_usuario/proyectos/mongo-dev
ExecStart=/usr/bin/podman-compose up
ExecStop=/usr/bin/podman-compose down
Restart=always

[Install]
WantedBy=default.target

mongodb.service

  1. Habilitar y arrancar el servicio
# Recargar la configuración de systemd
systemctl --user daemon-reload

# Habilitar e iniciar el servicio ahora mismo
systemctl --user enable --now mongodb.service

Comandos útiles de gestión

  • Ver estado: systemctl --user status mongodb.service
  • Ver logs en tiempo real: journalctl --user -u mongodb.service -f
  • Reiniciar: systemctl --user restart mongodb.service