Skip to content

Sistema de Información de Violencia Política en Línea versión 2. Espejo de https://gitlab.com/pasosdeJesus/sivel2

Notifications You must be signed in to change notification settings

pasosdeJesus/sivel2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SIVeL 2.2

Bienvenido al código fuente de SIVeL 2.2

Sistema de Información de Violencia Política en Línea versión 2.2

Revisado por Hound Pruebas y seguridad: Estado Construcción Clima del Código Cobertura de Pruebas

Logo de sivel2_2

Sobre SIVeL 2.2

SIVeL 2.2 es una aplicación web para manejar casos de violencia política y desaparición. Es segura y de fuentes abiertas. Su desarrollo es liderado por el colectivo Pasos de Jesús.

Esta aplicación web es usada o incluida o adaptada en sistemas de información de varias organizaciones que documentan casos de violencia socio política o refugio como las de la Red de Bancos de Datos, el Banco de Datos del CINEP/PPP, JRS-Colombia, CODACOP, ASOM, FASOL entre otras.

Te invitamos a ver el manual de usuario en: https://docs.google.com/document/d/1IZK_PTTbXGoHYRCRZgmS4CrNTITU_F1bkEyyjRTNekg/edit?usp=sharing

Si necesitas una instancia de SIVeL 2.2 para tu organización no gubernamental, o necesitas un sistema de información o incluir y adaptar SIVeL 2.2 en el sistema de información de tu organización por favor revisa https://defensor.info.

Si quieres desplegar tu propia instalación de SIVeL 2.2 mira más adelante este documento.

Si desea reportar un problema con sivel 2.2 o conocer del desarrollo de esta aplicación por favor revisa:

Si quieres ayudar a mejorar esta aplicación de fuentes abiertas te recomendamos el repositorio del motor sivel2_gen.

Desde Pasos de Jesús estaremos atentos a quienes hagan aportes para proponerles oportunidades labores cuando las haya.

Documentación para administradores que despliegan y mantienen en operación la aplicación

Requisitos 📋

Ver https://gitlab.com/pasosdeJesus/msip/-/blob/main/doc/requisitos.md Además si vas a desplegar en producción:

  • nginx (>=1.18)

Probar operación en modo de desarrollo 🔧

  • Crea un usuario para PostgreSQL como se explica en https://gitlab.com/pasosdeJesus/msip/-/blob/main/doc/aplicacion-de-prueba.md (si dejas el nombre sipdes se te facilitarán los siguientes pasos

  • Ubica las fuentes en un directorio, por ejemplo en /var/www/htdocs/sivel2/

  • Asegura que las gemas estén instaladas. En el caso de adJ en /var/www/bundler/ruby/3.3/ siguiendo las instrucciones de https://pasosdejesus.org/doc/usuario_adJ/conf-programas.html#ruby y en el directorio con fuentes asegúrate de tener el archivo .bundle/config con contenido:

    ---
    BUNDLE_PATH: "/var/www/bundler"
    BUNDLE_DISABLE_SHARED_GEMS: "true"
    
  • El archivo Gemfile contiene el listado de todas las dependencias a instalar en los distinto ambientes de ejecución. Instala las gemas que se especifican en tal archivo con:

    bundle install

    (Si quisieras actualizar las dependencias de la aplicación, ejecuta bundle update; bundle install)

    Si se interrumpe el proceso por problemas de permisos en instalación de una gema, instálala como en el siguiente ejemplo (cambiando la gema y la versión):

    doas gem install --install-dir /var/www/bundler/ruby/3.3/ bindex -v 0.7.0
  • Copia la plantilla del archivo .env y editalo:

    cp .env.plantilla .env
    $EDITOR .env

    Las variables definidas dejan la aplicación en el URL /sivel2_1/ (tendrías que modificar RUTA_RELATIVA si prefieres una raíz de URL diferente).

    Lo mínimo que debes establecer es el usuario PostgreSQL, su clave y los nombres de las bases de datos (desarrollo, pruebas y producción) que configuraste en PostgreSQL en las variables BD_USUARIO, BD_CLAVE, BD_DES, BD_PRUEBA y BD_PRO respectivamente (también es recomendable que agregues el usuario y la clave en el archivo ~/.pgpass).

  • Las migraciones del directorio db/migrate de sivel2_gen permiten migrar una SIVeL 1.2, actualizando estructura y agregando datos que hagan falta. Para actualizar un SIVeL 1.2 saca copia a la base, configura los datos de la copia en config/database.yml y ejecuta:

    bin/rails db:migrate
    bin/rails msip:indices

    Si vas a empezar con una base nueva sivel21gen_des con el usuario de PostgreSQL sipdes:

    createdb -U sipdes -h /var/www/var/run/postgresql/ sivel21gen_des

    y desde el directorio de la aplicación:

    bin/rails db:setup
    bin/rails db:migrate
    bin/rails msip:indices
  • Si no lo has hecho instala yarn para manejar paquetes javascript:

    doas npm install -g yarn
  • Instala las librerías Javascript requeridas al lado del cliente con:

    yarn install
  • Para verificar que se están generando bien los recursos ejecuta:

      rm -rf public/sivel2_1/assets/*
      bin/rails msip:stimulus_motores
      bin/rails assets:precompile --trace

    y después verifica que se está poblando el directorio public/sivel2_1/assets

  • Lanza la aplicación en modo de desarrollo. En el siguiente ejemplo el parámetro -p indica el puerto por el cual escuchará la aplicación y el parámetro -b indica la dirección IP como 0.0.0.0 para que se pueda acceder desde cualquiera de las IPs configuradas en las interfaces de red:

    bin/rails s -p 2300 -b 0.0.0.0

    También puedes usar

    bin/corre
    

    que eliminará y recreará recursos y lanzará la aplicación.

  • Examina con un navegador que tenga habilitadas las galletas (cookies) en el puerto 2300: http://127.0.0.1:2300/sivel2_1. (Por eso si usas el navegador w3m añade la opción -cookie)

  • Si al ejecutarse te aprece un mensaje indicando que pongas el dominio que usaste en config.hosts edita el archivo .env y pon el dominio en la variable CONFIG_HOSTS

  • Cuando quieras detener basta que presiones Control-C o que busques el proceso con ruby que corre en el puerto 2300 y lo elimines con kill:

    ps ax | grep "ruby.*2300"
    kill 323122 # Cambia por el número de proceso

Pruebas ⚙️

Dado que se hacen pruebas a modelos, rutas, controladores y vistas en sivel2_gen, en sivel2 sólo se implementan pruebas de control de acceso con minitest y pruebas al sistema con sideex.

Puede ejecutar las pruebas de control de acceso con:

RAILS_ENV=test bin/rails db:drop db:create db:setup db:seed msip:indices
CONFIG_HOSTS=www.example.com bin/rails test

Al respecto de modificar o crear pruebas con mini-test recomendamos
https://gitlab.com/pasosdeJesus/msip/-/blob/main/doc/pruebas-con-minitest.md.

Para ejecutar las pruebas del sistema con Sideex, ejecuta la aplicación en modo de desarrollo y desde el navegador compatible con Chrome en el que la visualiza, instala la extensión sideex2 (https://github.com/SideeX/sideex), carga las suits de prueba de la carpeta test/sideex y córrelas. La mayoría de pruebas deberían pasar (en ocasiones algunas no pasan por demoras en la aplicación para servir páginas o responder AJAX, pero si ejecutas varias veces eventualmente mejorando servidor, cliente o conexión entre ambos, deberían pasar).

Despliegue en sitio de producción con unicorn ⌨️

  • Se recomienda que dejes fuentes en /var/www/htdocs/sivel2

  • Sigue los mismos pasos para configurar un servidor de desarrollo --excepto lanzar

  • Crea la base de datos sivel21gen_pro con dueño sipdes.
    Por ejemplo en adJ desde el usuario _postgresql:

      createdb -Upostgres -h/var/www/var/run/postgresql -Osipdes sivel21gen_pro
  • Edita credenciales cifradas con:

    EDITOR=vim bin/rails credentials:edit

    y

    RAILS_ENV=production EDITOR=vim bin/rails credentials:edit
  • Configura la misma base de datos en la variable BD_PRO del archivo .env y ejecuta

    RAILS_ENV=production bin/rails db:setup
    RAILS_ENV=production bin/rails db:migrate
    RAILS_ENV=production bin/rails msip:indices
  • El punto de montaje configúralo en la variable RUTA_RELATIVA del archivo .env

  • Configura la ruta para anexos y respaldos en las variables SIP_RUTA_ANEXOS y SIP_RUTA_RESPALDOS del archivo .env --recomendable en ruta que respaldes con periodicidad.

  • Configura la ruta para la nube (preferible donde quede también respaldada con periodicidad) en la variable HEB412_RUTA del archivo .env

  • Elige un puerto local no usado (digamos 2009) y configúralo en la variable PUERTOUNICORN del archivo .env

  • Como servidor web recomendamos nginx, suponiendo que el puerto elegido es 2009, en la sección http agrega:

    upstream unicornsivel2 {
        server 127.0.0.1:2009 fail_timeout=0;
    }
    
  • Y agregue también un dominio virtual (digamos sivel2.midominio.org) con:

    server {
      listen 443 ssl;
      ssl_certificate /etc/ssl/server.crt;
      ssl_certificate_key /etc/ssl/private/server.key;
      root /var/www/htdocs/sivel2/;
      server_name sivel2.midominio.org
      error_log logs/s2error.log;
    
      location /sivel2 {
        try_files $uri @unicornsivel2;
      }
    
      location @unicornsivel2 {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://unicornsivel2;
        error_page 500 502 503 504 /500.html;
        keepalive_timeout 10;
      }
    
      location ^~ /sivel2/assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
        root /var/www/htdocs/sivel2/public/;
      }
    
      location ^~ /sivel2/images/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
        root /var/www/htdocs/sivel2/public/;
      }
    
      location ^~ /sivel2/packs/ {
        gzip_static on;
        add_header Cache-Control public;
        root /var/www/htdocs/sivel2/public/;
      }
    
    }
    
  • Precompila los recursos

    RAILS_ENV=production bin/rails assets:precompile
  • Instala de manera global unicorn y el enlace /usr/local/bin/rails_unicorn:

    doas gem install unicorn
    doas ln -sf /usr/local/bin/unicorn_rails33 /usr/local/bin/unicorn_rails
  • Tras reiniciar nginx, inicia unicorn desde el directorio con fuentes con algo como (cambiando la llave, el servidor y el puerto):

    DIRAP=/var/www/htdocs/sivel2 SECRET_KEY_BASE=9ff0ee3b245d827293e0ae9f46e684a5232347fecf772e650cc59bb9c7b0d199070c89165f52179a531c5c28f0d3ec1652a16f88a47c28a03600e7db2aab2745 ./bin/u.sh
  • Para iniciar en cada arranque, por ejemplo en adJ crea /etc/rc.d/sivel21

    servicio="DIRAP=/var/www/htdocs/sivel2 SECRET_KEY_BASE=9ff0ee3b245d827293e0ae9f46e684a5232347fecf772e650cc59bb9c7b0d199070c89165f52179a531c5c28f0d3ec1652a16f88a47c28a03600e7db2aab2745 /var/www/htdocs/sivel2/bin/u.sh"
    
    
    . /etc/rc.d/rc.subr
    
    rc_check() {
      ps axw | grep "[r]uby.*unicorn_rails .*sivel2[/]" > /dev/null
    }
    
    rc_stop() {
      p=`ps axw | grep "[r]uby.*unicorn_rails.*master .*sivel2[/]" | sed -e "s/^ *\([0-9]*\) .*/\1/g"`
      kill $p
    }
    
    rc_cmd $1

    Inicialo con:

    doas sh /etc/rc.d/sivel21 -d start
    

    Y una vez opere bien, incluye sivel2 en la variable pkg_scripts de /etc/rc.conf.local

Actualización de servidor de desarrollo 🔃

  • Deten el servidor de desarrollo (presionando Control-C)
  • Actualiza fuentes: git pull
  • Instala nuevas versiones de gemas requeridas:
    bundle install
  • Aplica cambios a base de datos: bin/rails db:migrate
  • Actualiza tablas básicas: bin/rails sivel:actbasicas
  • Actualiza índices: bin/rails msip:indices
  • Lanza nuevamente el servidor de desarrollo: bin/rails s -p 2300 -b 0.0.0.0

Actualización de servidor de producción 🔃

Son practicamente los mismos pasos que empleas para actualizar el servidor de desarrollo, excepto que unicorn se detiene con pkill y se inicia como se describió en Despliegue y que en lugar de bin/rails se debe usar bin/railsp

Respaldos 👍

En el sitio de producción se recomienda agregar una tarea cron con:

cd /var/www/htdocs/sivel2/; bin/railsp msip:vuelca

Desarrollo y documentación para desarrolladores 🔤

El desarrollo debe centrarse en los motores que constituyen esta aplicación, particularmente sivel2_gen.

La documentación general para desarrolladores que mantenemos está en: https://gitlab.com/pasosdeJesus/msip/-/blob/main/doc/README.md

Autores ✒️

Ver contribuyentes y https://gitlab.com/pasosdeJesus/sivel2/-/blob/main/CREDITOS.md