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
- 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- 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 mongoshInicializació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.
- 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.targetmongodb.service
- 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.serviceComandos ú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