# Instalación - BackEnd

Grama es un proyecto desarrollado por el [Área de Políticas Públicas](https://www.uncuyo.edu.ar/politicaspublicas/) de la [Universidad Nacional de Cuyo](https://www.uncuyo.edu.ar/).

El mismo consiste en una plataforma para la visualización de datos estadísticos que pone en valor la información y los datos que generan las diferentes áreas del organismo que la implementa, facilitando el registro, almacenamiento y la visualización de indicadores e información significativa para tener en cuenta durante los procesos de toma de decisiones y para el establecimiento de alertas que permitan anticipar situaciones críticas y/o significativas.

Este sistema posee dos componentes principales: **Indicadores de Gestión (IG) y Monitoreo y Evaluación de Programas (M&amp;E).**

---

### Estructura de directorios

```
  assets/             contains assets definition
  commands/           contains console commands (controllers)
  config/             contains application configurations
  controllers/        contains Web controller classes
  mail/               contains view files for e-mails
  models/             contains model classes
  runtime/            contains files generated during runtime
  tests/              contains various tests for the basic application
  vendor/             contains dependent 3rd-party packages
  views/              contains view files for the Web application
  web/                contains the entry script and Web resources

```

---

### Requerimientos

Los requerimientos mínimos para la ejecución de este proyecto es que su servidor admita PHP 7.4 y contar con los siguientes paquetes: composer, git, mysql, apache2 web server.

---

### Instalación

**Descargar archivos**

Primero es necesario clonar el repositorio en un directorio local `por ej: /var/www/grama-backend`.

```
$ cd /var/www
$ git clone https://github.com/uncuyoapp/grama-backend.git grama-backend
```


---

**Instalar paquetes necesarios**

Instalaremos los paquetes necesarios para el correcto funcionamiento de la plataforma mediante el gestor de paquetes [Composer](https://getcomposer.org/).

```
$ cd grama-backend
$ composer install
```

---

**Comprobar los requisitos del framework yii2**

La plataforma ha sido desarrollada utilizando el framework [Yii2](http://www.yiiframework.com/download/), por lo que deberemos comprobar si el servidor cumple con los requisitos para su correcto funcionamiento.

```
$ php requirements.php
```

Es necesario analizar la salida del script y efectuar las acciones requeridas por el mismo.

---

### Configuración

**Directorios y permisos**

Para el correcto funcionamiento de la plataforma es necesario asignar permisos 777 al directorio runtime dentro de la aplicación.

```
$ chmod -R 777 runtime/ 
```

Luego es necesario copiar el directorio web que contiene el script de entrada y los recursos web necesarios a un directorio publicado por el servidor apache2, por ej: /var/www/html/backend.

```
$ cp -R web/ /var/www/html/backend
```

Crearemos un directorio para alojar el caché de assets utilizados por la plataforma. Note que deberá cambiar el nombre `uncuyo` por el usuario owner del directorio y el nombre `www-data` por el usuario con el que se ejecuta apache2.

```
$ mkdir /var/www/html/backend/assets
$ chown uncuyo:www-data /var/www/html/backend/assets
```

Proceder a editar el script de entrada con las rutas correctas:

```
$ cd /var/www/html/backend
$ vi index.php
```

```
//defined('YII_DEBUG') or define('YII_DEBUG', true); //habilitar debug
defined('YII_DEBUG') or define('YII_DEBUG', false); //deshabilitar debug (production)
//defined('YII_ENV') or define('YII_ENV', 'dev'); //habilitar entorno develop
defined('YII_ENV') or define('YII_ENV', 'prod'); //habilitar entorno production

require(__DIR__ . '/../../grama-backend/vendor/autoload.php'); //ruta completa hasta el directorio de la app
require(__DIR__ . '/../.../grama-backend/vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../../grama-backend/config/web.php');
```

Ahora debería poder acceder a la aplicación a través de la siguiente URL.

```
<a class="rgh-linkified-code" href="http://localhost/backend/" rel="noreferrer noopener">http://localhost/backend/</a>

```

---

**Seguridad**

Establezca la clave de validación de cookies en el archivo `config/web.php` con alguna cadena secreta aleatoria:

```
'request' => [
    // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
    'cookieValidationKey' => '<secret random string goes here>',
],
```

---

**Base de datos**

Editar el archivo `config/db.php` con los datos de conexión a la base de datos, por ej:

```
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=grama',
    'username' => 'root',
    'password' => '1234',
    'charset' => 'utf8',
    ...
];
```

***Notas*:**

- No se creará la base de datos por ti, esto debe hacerse manualmente antes de que puedas acceder a ella.
- Verifique y edite los otros archivos en el directorio `config/` para personalizar su aplicación según sea necesario.

Una vez configurado el acceso a la base de datos procederemos a ejecutar el script de inicialización de la misma.

```
$ cd /var/www/grama-backend/
$ ./yii migrate
```

El script nos pedirá que confirmemos la migración ingresando `yes`, luego efectuará la inicialización de la base de datos.

Por defecto, el sistema crea un usuario `root` con el password `123456789`.