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())