Mi Raspberry Pi, mi laboratorio de DB's

Como tal vez no lo saben (claro que no lo saben, pero aquí va), he comenzado mi maestría en Big Data y Ciencia de Datos, lo que me ha llevado a sumergirme más profundamente en el fascinante mundo de las bases de datos. Parte por curiosidad personal, parte por los cursos en los que estoy, esta experiencia me ha motivado a experimentar con diferentes tecnologías y aprender en el proceso.

Si me conoces bien, sabes que soy un poco “piqui” con mi computadora. Me gusta mantenerla libre de imágenes innecesarias, librerías de dudosa utilidad y cualquier cosa que pueda convertirla en un caos digital. Así que, para preservar ese orden, decidí rescatar mi viejo Raspberry Pi 3 del olvido y convertirlo en mi servidor de bases de datos por defecto. Porque, ¿por qué no aprovechar lo que ya tienes?

La tecnología avanza a pasos agigantados, y eso significa que el hardware más antiguo a menudo queda obsoleto para las últimas versiones de software. Esto lo comprobé de primera mano al intentar instalar MongoDB. Resulta que las versiones posteriores a la 4 ya no son compatibles con procesadores ARM V8, como el que usa el Raspberry Pi 3. Ahí estaba yo, perdiendo tiempo peleándome con Docker, la terminal y un servidor que simplemente no funcionaba.

Escribo esto como un recordatorio personal y, tal vez, como una guía para algún otro despistado que se encuentre en la misma situación. Si te estás volviendo loco intentando descubrir por qué tu servidor no arranca, quizás este texto te ahorre algunos dolores de cabeza. A veces, el mejor aprendizaje viene de los momentos en los que nada parece salir bien.

Si estás aquí, es porque ya tienes experiencia en el tema, así que me saltaré explicaciones básicas que seguramente ya dominas. Vamos directo al grano, porque si estás leyendo esto, asumo que buscas información útil, no un repaso innecesario.

Build:

Te dejaré los archivos docker compose a continuación. En mi caso creé una carpeta para cada base de datos, mongoDb, MariaDB y PostgreSQL, dentro de cada carpeta se encuentra el archivo compose que le corresponde y el directorio donde se persisten los archivos de la base de datos.

mongoDB: docker-compose.yml

services:
  mongodb:
    image: mongo:4.4.18
    platform: linux/arm64
    container_name: mongodb
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: user
      MONGO_INITDB_ROOT_PASSWORD: password
    ports:
      - "27017:27017"
    volumes:
      - ${PWD}/mongodb_data:/data/db
    command: ["--bind_ip", "0.0.0.0"]
    healthcheck:
      test: ["CMD-SHELL", "echo 'db.runCommand(\"ping\").ok' | mongo localhost:27017/test --quiet"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

volumes:
  mongodb_data:

MariaDB: docker-compose.yml

services:
  mariadb:
    image: mariadb:10.11
    platform: linux/arm64
    container_name: mariadb
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: password
     #MARIADB_DATABASE: mi_db
      MARIADB_USER: user
      MARIADB_PASSWORD: password
      TZ: America/Mexico_City
    ports:
      - "3306:3306"
    volumes:
      - ${PWD}/mariadb_data:/var/lib/mysql
      - ${PWD}/mariadb.cnf:/etc/mysql/conf.d/custom.cnf
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MARIADB_ROOT_PASSWORD}"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

volumes:
  mariadb_data:

PostreSQL: docker-compose.yml

services:
  postgres:
    image: postgres:15-alpine
    platform: linux/arm64
    container_name: postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      #POSTGRES_DB:
    ports:
      - "5432:5432"
    volumes:
      - ${PWD}/postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 40s

Obviedades que no podemos ignorar:

Instalar Oracle Linux en un Raspberry Pi, necesitarás un teclado y un monitor, ya que no es una instalación headless. Además, tendrás que expandir las particiones manualmente, instalar y configurar el servidor SSH, y realizar trabajo adicional.

Si prefieres ahorrarte este proceso, Ubuntu Server para Raspberry Pi es una excelente alternativa. Su versión headless permite el acceso directo por SSH, y la mayor parte de la configuración inicial ya estará lista para que comiences a trabajar sin complicaciones.

Es importante mencionar que utilizo este entorno exclusivamente para desarrollo y pruebas, no para producción. Esto es crucial, ya que en un ambiente de producción hay consideraciones mucho más estrictas que abordar, como seguridad, estabilidad, resiliencia y otros aspectos críticos. Lo que funciona bien para experimentar o probar ideas puede no ser adecuado para soportar una carga de trabajo real en un entorno empresarial.

Espero les sea de utilidad.

Árbol de directorios:

ignorar los *_data, es la info de la bases de datos auto-generada