El Sistema de información de músicas regionales (SIMR) es una aplicación de gestión bibliotecaria y archivística y de gestión del conocimiento, elaborada para administrar y analizar el catálogo del Fondo de documentación perteneciente al Grupo de investigación de Músicas Regionales de la Universidad de Antioquia, así como sus colecciones virtuales de audios, partituras, imágenes y vídeos. Esta herramienta está orientada a investigadores y permite integrar información de los proyectos de investigación y del conocimiento de los investigadores a registros relacionados con Obras, Actores, Recursos, ejemplares y diversos tesauros. Está creada bajo la arquitectura MEAN stack y utiliza como nube privada de archivo la tecnología MiniIO.
EL SIMIR está basado en principios de la bibliotecología y la archivística y sistematiza la experiencia de más de 30 años del grupo Músicas Regionales estudiando las músicas del país y el continente desde la perspectiva de la musicología. Es una aplicación web desde la cual los usuarios pueden hacer procesos de análisis y catalogación de diversos tipos de obras musicales (y no musicales) y en la cual pueden relacionarse estas obras con elementos de las colecciones del grupo y el conocimiento que sobre estas acumulan los investigadores y los proyectos.
Fernando Mora Ángel, desearrollador principal
- Migración progresiva de AngularJS a Angular.
- Implementar búsqueda general en cualquier campo, con expresiones similares y con operadores booleanos (en cualquier parte de la base de datos). Puede ser con https://www.fusejs.io/ y https://www.npmjs.com/package/elasticlunr).
- Implementar sistema de roles y permisos. Todo usuario se registrar como "solo lector", el administrador puede cambiar, crear o editar roles y permisos de cada rol.
- Implementar recuperación de contraseña usando Passport.
- Visualizar registros en Markdown -puede ser con markdown-it-
- Cambiar selectores por campos de texto con autocompletado y abrir automáticamente "Crear" si no se encuentran en la BD.
- Agregar campos a Idioma para permitir listado ISO de idiomas o lenguas locales (entidad lingüística, familia, lengua, otras denominaciones, ubicación geográfica, variantes (con ubicación geográfica), notas
- Resolver Issues
- Modificaciones de seguridad solicitadas por UdeA (vulnerabilidades, certificado SSL, Configurar en modo producción).
1. Implementación del sistema de archivos con MinIO:
-
Subir, descargar y visualizar archivos: reproducir audios y mostrar PDFs, vídeos o imágenes en una ventana nueva.
-
Implementación realizada en Angular.
- Creación del módulo de archivos, que contiene (además de un servicio) tres componentes principales:
archivo-subir: Para la subida de archivos.archivo-lista: Para cargar y mostrar los archivos adjuntos de un documento de la base de datos.archivo-vista: Para previsualizar los archivos en el navegador.
- Creación del archivo
minio.jsdentro de la carpetaconfig(proyectosimr-back).
Este archivo contiene la lógica y las diferentes rutas (o endpoints) necesarios para la gestión de archivos en el sistema MinIO y MongoDB: - Rutas principales:
- [GET]
/files/document-files: Obtiene la lista de archivos adjuntos a un documento de MongoDB. - [POST]
/files/upload: Sube un archivo a MinIO y almacena la información en MongoDB. - [GET]
/files/files: Lista todos los archivos en un bucket de MinIO. - [GET]
/files/download/:filename: Descarga un archivo de MinIO. - [DELETE]
/files/:filename: Elimina un archivo de MinIO y actualiza las referencias en MongoDB. - [POST]
/files/delete-multiple: Elimina múltiples archivos de MinIO y actualiza las referencias en MongoDB. - [GET]
/files/view/:filename: Previsualiza archivos (soporta streaming de audio y video).
- [GET]
- MongoDB: Almacena metadatos en una colección llamada
archivos, como el nombre del archivo, su tamaño, fecha de subida, y referencia al nombre de objeto almacenado en MinIO (minioObjectName). - Las Entidades que hacen uso de archivos tienen asignada la propiedad
archivosAdjuntosen su modelo, la cual guarda un listado de referencia a la colecciónarchivos.
- Creación del módulo de archivos, que contiene (además de un servicio) tres componentes principales:
- Vista de grafo (géneros formas, materias, Medios, sistemas sonoros).-Puede ser con https://www.sigmajs.org/
- Ver anotaciones cartográfico temporales en línea de tiempo y/o en mapa.
- Crear diseño Responsive.
- Incluir Campo de licenciamiento de cada obra y recurso.
- Ver sistemas de repositorio y qué se puede aprender de ellos.
- Revisar: Directrices para repositorios institucionales de investigación del Ministerio de Ciencia, Tecnología e Innovación
- Instalar Mongodb, Nodejs
- Incluir el directorio de Mongodb en el path
- Crear directorio para la base de datos en
C:\data\db -
npm install -g npm-check-updates - Configurar las variables de entorno en el proyecto Express (dentro de la carpeta
simr-back):- Crear el archivo
.env(sin nombre, sólo la extensión) - Copiar en el archivo
.envel siguiente texto :
# Credenciales de MongoDB MONGO_URI=mongodb://superAdmin:SOh3TbYhx8ypJPxmt1oOfL@localhost/simr MONGO_DB_NAME=simr # Credenciales de MinIO MINIO_ENDPOINT="play.min.io" MINIO_PORT=9000 MINIO_USE_SSL=true MINIO_ACCESS_KEY=Q3AM3UQ867SPQQA43P2F MINIO_SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG # Nombre del bucket de MinIO MINIO_BUCKET_NAME=sistema-archivos-simr
- Crear el archivo
- Correr Backend (
simr-back):O correrlo con Nodemonnpm start
(Para que reinicie el servidor cada vez que detecte un cambio en el código):npm run dev - Correr Frontend (
simr-front):npm start
-
npm install nodemon -g -
npm install -g sassSet-ExecutionPolicy Unrestricted - Iniciar con
-
nodemon --inspect server.js - Debug:
-
Atack to node process
Tutorial nodemon
Usar ctrl+shift+v para visualizar Markdown
- Debug in VSCODE
- Markdown
- Usar npm version para manejar versionado automático npm version minor --force
- Comandos NPM
- MinIO JavaScript API
https://rogerdudler.github.io/git-guide/index.es.html
cd C:\Users\ferna\Documents\Desarrollo\SIMR
git add .
git commit -m "Commit message"
git push origin main
- Resolver problema de borrado en la actualización.
- Cambiar el nombre de la carpeta "example"
- Eliminar variables redundantes y funciones no utilizadas.
- Preparar y definir colaboradores parala Wiki del proyecto.
- Construir sistema de roles y permisos.
- Construir sistema de auditoría. Revisar el modelo de datos de la auditoría.
- Verificar existencia de URL en campo enlaces.
- Versionado semántico.
- Conectar a Mongod
mongosh --port 27017
- Crear administrador
use simr
db.createUser(
{
user: "superAdmin",
pwd: "SOh3TbYhx8ypJPxmt1oOfL",
roles: [ { role: "root", db: "admin" } ]
})
- Habilitar autenticación
sudo nano /etc/mongod.conf
#Cambiar o agregar
security:
authorization: 'enabled'
- Reiniciar servicio
sudo service mongod restart
pm2 reload server
- Conectarse localmente
mongohs --port 27017 -u "superAdmin" -p "SOh3TbYhx8ypJPxmt1oOfL" --authenticationDatabase "simr"
- Para cambiar el password
db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL")
- Instalar SSH y agregar regla en Firewall
-
zypper install nodejs - Install MongoDB
- Instalar Mongo DB
sudo apt-get update
sudo apt-get install -y mongodb-server
Y si no Solucionar problemas de dependencias incumplidas
Verificar que Mongo está corriendo y agregarlo para que inicie automáticamente
sudo systemctl start mongod
sudo systemctl status mongod
sudo systemctl enable mongod
Probar que funciona
mongosh
Reparar permisos de Mongodb (si aparece un error)
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock
- Instalar Express
npm install express --save
- Clonar repositorio Instalar Git
sudo git clone https://github.com/fernandomoraangel/simr.git
sudo sudo npm startnpm install
npm start
- Instalar PM2
- Instalar PM2
sudo npm install pm2@latest -g
Desde el directorio de la aplicación:
pm2 start server.js
pm2 startup systemd
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u fma --hp /home/fma
#Correr, cambiando sammy por el usuario
pm2 save
sudo systemctl start pm2-fma
systemctl status pm2-fma
#Probar si todo va bien:
pm2 monit
- Crear Certificado SSL autofirmado:
- Crear carpeta para guardar el certificado y la clave:
mkdir ssl
openssl req -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out simr.crt -keyout simr.key
- Instalar Nginx
sudo apt-get install nginx
#Crear o editar archivo de configuración
sudo nano /etc/nginx/nginx.conf
Agregar a archivo de configuración
# HTTPS server
server {
listen 443 ssl;
server_name localhost ;
ssl_certificate /home/fma/ssl/simr.crt;
ssl_certificate_key /home/fma/ssl/simr.key
root /home/fma/simr;
location / {
proxy_ pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade ;
proxy_set_header Connection 'upgrade' ;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade ;
}
}
- Reiniciar Nginxs e incluirlo en autostart
sudo service nginx restart
sudo systemctl enable nginx
- Configurar Firewall (en ubuntu)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 27017/tcp
#También 27017 si se va a utilizar Compass para administrar las bases de datos
sudo ufw enable
(en Suse):
# Agregar servicio Nginx a la zona pública
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
# Abrir los puertos 80 y 443 en la zona pública
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
# Recargar la configuración del firewall
firewall-cmd --reload
- Abre el archivo de configuración de MongoDB en tu editor de texto preferido. El archivo se encuentra en /etc/mongod.conf.
- Busca la línea "bindIp: 127.0.0.1" y cambia "127.0.0.1" por "0.0.0.0" para permitir que MongoDB escuche en todas las interfaces de red. Esto permite que las conexiones remotas se establezcan con tu servidor.
- Guarda y cierra el archivo de configuración.
- Reinicia MongoDB para que los cambios surtan efecto ejecutando el comando "sudo systemctl restart mongod"
- Si tienes un firewall habilitado en tu servidor, asegúrate de permitir el tráfico entrante en el puerto 27017.
firewall-cmd --permanent --zone=public --add-port=27017/tcp
Importar usando Compass la colección Diccionarios, como JSON
Para ver la dirección IP asignada a una interfaz de red específica, puede usar el siguiente comando:
ip addr show <interface>
Para ver la puerta de enlace predeterminada, puede usar el siguiente comando:
ip route show
Para ver los servidores DNS configurados, puede usar el siguiente comando:
cat /etc/resolv.conf
Reemplaza por el nombre de la interfaz de red que deseas ver la información. Ejemplo: 'eth0' o 'wlan0' ##Acceso por escritorio remoto
git fetch
git pull