---
# System prepended metadata

title: Instalación de sistema.

---

![logo](https://i.imgur.com/ViLj5it.jpg)

 
# Instalación de sistema.

Instalación del 'Sistema de GRP' by dBlocks.io


## Dependencias del sistema
 - [MariaDB (Base de datos)](https://mariadb.org/documentation/)
 - [NVM (Administrador de versiones de Node)](https://github.com/nvm-sh/nvm)
 - [Nodejs (Entorno de ejecución de JavaScript)](https://bulldogjob.com/news/449-how-to-write-a-good-readme-for-your-github-project)
 - [Angular (Framework de desarrollo)](https://angular.io/docs)
 - [Nestjs (Framework server-side)](https://docs.nestjs.com)
 - [HttpServer (Servidor HTTP)](https://www.npmjs.com/package/http-server)

## Prerrequisitos
Antes de seguir los pasos de instalación asegurese de tener los archivos de distribución del sistema construidos y entregados por su proveedor así como el script de creación de la base de datos.

Asegurese de tener una carpeta llamada grp en la raíz de su servidor. Dentro de esta es dónde pegara los archivos de distribución antes mencionados.

Posteriormente proceda con la instalación.


## Instalación

### Instalando las dependencias del sistema en el servidor. 
Comenzamos por actualizar las dependencias del Sistema Operativo del servidor mediante los siguientes comandos:

```bash=
    sudo apt-get update
    sudo apt-get upgrade
```
#### Instalando MariaDB
Para instalar la base de datos usaremos uso de los comandos de la [documentación oficial](https://mariadb.org/download/?t=repo-config&d=Debian+11+"Bullseye"&v=10.5&r_m=gigenet).
```bash=
    sudo apt install mariadb-server
    sudo mysql_secure_installation
```
El último comando se utiliza para asegurar su implementación estableciendo una 
contraseña de root (*Es importante saber, que la contraseña debe ser la misma que la que se encuentra en el archivo dataSource.js en la carpeta de distribucion del back ../grp/back/dist/ para que pueda acceder posteriormente el back* ),  tambien deshabilitamos el inicio de sesión de root remoto, eliminando la base de datos de prueba, así como los usuarios anónimos y finalmente recargando los privilegios. Quedando de la siguiente manera:

 - `Enter current password for root (enter for none): //Aqui esablecemos la contraseña`
 - `Change the root password? [Y/n]: n `
 - `Remove anonymous users? [Y/n]: y`
 - `Disallow root login remotely? [Y/n]: y`
 - `Remove test database and access to it? [Y/n]: y`
 - `Reload privilege tables now? [Y/n] y`


#### Instalación de NVM
Para instalar  nvm, se puede usar el siguiente comando cURL o Wget. En caso de no tener instalado curl por defecto tendremos que ejecutar el comando `sudo apt install curl`
```bash=
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
```
o bien.
```bash=
    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
```
Una vez instalado, es necesario reiniciar la terminal o ejecutar los siguentes comandos para configurar y usar sin reiniciar.
```bash=
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
```


#### Instalación de Nodejs
Para descargar, compilar e instalar la última versión de node, usaremos nvm anteriormente ya instalado, mediante el siguiente comando:
```bash=
    nvm install node --lts
```
"`node`" con la bandera `--lts`es una manera de decir que se instale la última versión de node estable con largo tiempo de soporte la cual en el caso del servidor fue la `lts`.

#### Instalación de Angular
Para la instalación de Angular/Cli usamos el comando de su documentción oficial el cual es:
```bash=
    npm install -g @angular/cli
```


#### Instalación de NestJS
Para descargar e instalar NestJS se ejecuta el siguiente comando:
```bash=
    npm i -g @nestjs/cli
```


#### Instalación de HttpServer
Para descargar e instalar el servidor `http` se ejecuta el siguiente comando:
```bash=
    npm install -g http-server
```
### PM2
Para la instalación de PM2 bastara con ejecutar el siguiente comando:
```bash=
npm install pm2 -g
```

---

### Despliegue del Sistema
#### Despliegue base de datos
Para la instalación de la base de datos primero creamos una base de datos con el nombre de `GRP_BD` o en sus defecto con el nombre de la base que se requiera, *(es importante que  el nombre de la base sea el mismo que se encuentra en el dataSource.js de la carpeta de dist del back)*. 
Accedemos a mariadb  con `sudo mariadb -u root -p` y escribiendo el query `CREATE DATABASE GRP_BD;`.

Una vez creada la base de datos podemos verificar que se ha creado correctamente con el query `SHOW DATABASES;` veriamos algo como lo siguiente:

![](https://i.imgur.com/XMEmOzd.png)

Confirmando la creación de la base de datos y que se tiene el script de creación de ésta en el servidor, salimos de entorno de Mariadb tecleando el comando `exit;` o con la combinación de teclas `ctrl+c` volviendo al entorno de Debian para despues ejecutar el siguente comando para correr el script de creación de la BD. Teniendo en cuenta que necesitamos estar en el directorio donde esté el script.

```bash=
sudo mariadb -u root -p GRP_BD < dump-GRP_BD.sql
```
Nos pedira escribir la contraseña configurada para mariadb.


#### Despliegue del Backend
Para la instalación de los servicios backend necesitamos los archivos de distribución de la api. Teniendo en cuenta que nos encontramos en el directorio de los archivos de despliegue (../grp/back/), ejecutar el siguiente comando:
```bash=
    node dist/main
```

#### Despliegue del Frontend
Para la instalación de los archivos de distribución de la interfaz de usuario. Teniendo en cuenta que nos encontramos en el directorio de los archivos de despliegue (../grp/front/ ), ejecutar el siguiente comando:
```bash=
    http-server dist/grp-extreme
```

## Notas extras
Se recomienda a los administradores del servidor la ejecución de procesos back y front en segundo plano para el libre uso de la terminal y evitar un error de cancelación de proceso.

De igual manera se recomienda el uso de la librería [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/) para que los servicios prevalezcan y levanten automáticamente en caso de reinicio en el servidor, quedan como recomendación debido a que estas configuraciones sobre la administración del servidor son a criterio del usuario administrador del servidor.

## Casos de contingencia
En caso de reinicio del servidor o cancelación accidental o eventual de los procesos que mantienen los servicios que proveen el sistema a las solicitudes del cliente (pc usuario solicitante de la url al servidor) repita los pasos de despliegue Backend y Frontend.

```bash=
    node dist/main
```

```bash=
    http-server dist/grp-extreme
```

---

    
## Feedback
Contacta a un desarrollador:
- cesarg_00@outlook.com
- r.garduno0509@gmail.com


## Autores
- Ricardo Garduño Rojas
- Cesar Garza Ceja


