Skip to main content

📂 Detall del Servei 🍃 MongoDB

Base de dades NoSQL utilitzada per a l'emmagatzematge de dades crues i documents JSON sense esquema fix. Ideal per a capturar la sortida de la API de EGRETA (CRIS de la UAB, usant el producte Pure de Elsevier)

Aquest contenidor s'executa actualment en mode root. Queda pendent la valoració i migració a rootless.

A. Cicle de Vida i Reconstrucció​

Per garantir la persistència de les dades NoSQL i l'accés des de l'exterior (port 8000), la comanda de recreació és la següent:

podman run -d \
--name MongoDB \
--restart on-failure \
-p 8000:27017 \
-v /dades/mongo8:/data/db:Z \
mongodb-community-server:latest

Nota d'Arquitectura:

  • Persistència: Es mapeja /dades/mongo8 cap a /data/db.
  • Ports: El port estàndard de Mongo (27017) es mapeja al 8000 del host per seguir la política de ports del laboratori.

B. Configuració del Servei (Systemd)​

El servei està gestionat per la unitat /etc/systemd/system/container-mongodb.service.

  • Tipus: simple (amb RemainAfterExit=yes).
  • Dependències: Vital que /dades/mongo8 estigui muntat, ja que MongoDB és molt sensible a la corrupció si el fitxer de bloqueig (mongod.lock) es gestiona sobre un FS no preparat.
[Unit]
Description=Podman container-mongodb.service
After=network-online.target local-fs.target
RequiresMountsFor=/dades/mongo8

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Environment=CONTAINERS_CONF_LOG_LEVEL=error
Restart=on-failure
RestartSec=15s
Type=simple

ExecStartPre=-/usr/bin/podman stop -t 10 MongoDB
ExecStart=/usr/bin/podman --log-level=error start MongoDB
RemainAfterExit=yes

ExecStop=/usr/bin/podman stop -t 10 MongoDB

[Install]
WantedBy=multi-user.target

C. Receptes d'Operació (Cheat Sheet)​

Gestió del Servei

  • Estat: systemctl status container-mongodb.service
  • Logs: podman logs -f MongoDB

Interacció amb Dades (Shell)

Si es necessita entrar a la consola de MongoDB per realitzar consultes manuals:

podman exec -it MongoDB mongosh

Verificació des de Python

Comprovació ràpida de connectivitat des del host:

# Requereix pip install pymongo
from pymongo import MongoClient
client = MongoClient('localhost', 8000)
print(client.list_database_names())