---
# 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
Se recomienda tener un conocimiento básico de las siguientes tecnologías.
 - [Git (Sistema manejador de versiones)](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
 - [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)
 - [PM2 (Libreria de administración de procesos)](https://pm2.keymetrics.io/docs/usage/quick-start/)

## Prerrequisitos
Dentro del servidor o sistema que se este usando se recomienda tener una carpeta principal llamada `grp` donde clonaremos las aplicaciones.
Es necesario tener acceso al repositorio de la aplicación en gitlab con las credenciales proporcionadas.

### Clonando los proyectos
Para descargarlos antes necesitaremos tener instalado git en el sistema por lo que primero lo instalaremos con el siguiente comando 
```bash=
sudo apt install git
```
despues nos situaremos en la carpeta /grp y ejecutaremos el comando: 
```bash=
git clone https://gitlab.com/R1k4rd01/source-code-grp-back.git
```
nos pedira las credenciales de gitlab para poder descargarlo y  despues clonamos el front con el siguiente comando:
```bash=
git clone https://gitlab.com/R1k4rd01/source-code-grp-front.git
```
nuevamente metemos nuestras credenciales de gitlab y posteriormente ya tendremos la carpeta del proyecto en el directorio.


## Instalación

### Instalando las dependencias del sistema en el servidor. 


- #### 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 en el caso por defecto es la siguiente que se muestra en la imagen)
``../grp/source-code-grp-back/dist/dataSource.js`` 

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

  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 ya sea la que esta por defecto en el dataSource.js o la que queramos pero ambas deben concidir.

     - `Switch to unix_socket authentication [Y/n]: n`
     - `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`.
###### Descargando libre
Despues de instalar node tendremos que descargar la carpeta node modules que contiene las librerias del proyecto en cada carpeta (back/front) con el siguiente comando.
```bash=
npm install
```
El comando anterior debe ser ejecutado dos veces una en la carpeta del front (./source-code-grp-front) y una segunda vez en la carpeta de back (./source-code-grp-back)

- #### 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
```
- #### Instalación de PM2
Para la instalación de PM2 bastara con ejecutar el siguiente comando:
```bash=
npm install pm2 -g
```

---

### Despliegue 
#### Despliegue base de datos
Para la instalación de la base de datos primero creamos una base de datos con el nombre que nos aparece en el archivo [dataSource.js](https://i.imgur.com/XfMePPE.png) mencionado enteriormente el cual es `BD_GRP_INVEA` o en sus defecto con el nombre de la base que se requiera pero **es importante que  el nombre de la base sea el mismo que se encuentra en el dataSource.js ya sea modificar el dataSource o crear la base de acuerdo al dataSource por defecto.** 
Accedemos a mariadb  con **`sudo mariadb -u root -p`** nos pedira la clave de acceso de mariadb antes estblecida y entraremos a la consola de mariadb escribiendo el query 
**`CREATE DATABASE BD_GRP_INVEA;`**.

Una vez creada la base de datos podemos verificar que se ha creado correctamente con el query **`SHOW DATABASES;`** donde deberíamos ver la lista de las bases de datos y entre ella la que fue creada, 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 BD_GRP_INVEA < grp_invea.sql
```
el comando anterior toma en cuenta que la base creada tiene por nombre 'BD_GRP_INVEA' y el script de creación se llama 'grp_invea.sql' por lo que si se tiene otros nombres el comando generico sería

```bash=
sudo mariadb -u root -p (database) < (scriptDeEjecucion)
```

Nos pedira escribir la contraseña configurada para mariadb para confirmar la ejecucion del script.


#### Despliegue del Sistema
##### Configurando ipHost en el dataSource.js
Para asegurarse que haya conexion entre el back y la base hay que configurar una variable del entorno en el dataSource.js (`/grp/source-code-grp-back/dist/dataSource.js`) el cual en el lugar donde dice 'localhost' cambiarlo por la ip que se tenga en el server.


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

##### Configurando ipHost en front.
Para asegurarse que los endpoints del front apunten a donde deben se tiene que configurar una variable del entorno en el main.8781b00121757ca4.js en la sig. ruta:
(`/grp/source-code-grp-front/dist/grp-extreme/main.8781b00121757ca4.js`)
para abrirlo una vez estando en el directorio correcto usaremos nano con el siguiente comando:
```=
nano main.8781b00121757ca4.js
```
lo que nos abrira el archivo, haciendo uso de las herramientas de nano
![](https://i.imgur.com/UmvvCEa.png)
Usaremos la de buscar presionando "ctrl+w" lo que nos mostrará un menu donde pondremos la palabra a buscar como se ve en la siguiente imagen (production:!0,url:) sin espacios.
![](https://i.imgur.com/hFulpVp.png)
Lo que nos llevara a la parte del codigo que hay que sustituir con la ipDeseada.
![](https://i.imgur.com/HW5UeZm.png)





##### Despliegando con pm2
Podemos deplegar el sistema en segundo plano con PM2 ejecutando los siguientes comandos:
```bash=
pm2 start /home/<user>/grp/source-code-grp-back/dist/main.js
```
En el caso del front es necesario ejecutar el comando de pm2 desde el directorio:
`./grp-source-code-front/dist/`
```bas=
pm2 start execScript.js
```
**Nota***
*Las rutas son absolutas por lo que en la parte de '/< user>/' de las rutas debe ser cambiada a la ruta correcta del sistema donde se este instalando.*

### Actualizaciones.
#### Actualizaciones GRP (temporal).
Para bajar implementaciones nuevas del software es necesario ejecutar un ```git pull``` pero se debe tener en cuenta que el comando se debe ejecutar en cada una de las carpetas del proyecto tanto en `/source-code-grp-front` como en `/source-code-grp-back` al ejecutar estos comandos nos pedira las credenciales de gitlab para poder bajar cambios, una vez bajados los cambios es necesario volver a repetir los pasos del despliegue del sistema lo que seria configurar el iphost para el front y para el back, posteriormente tenemos reiniciar los servicios de PM2.

#### Actualizaciones Bases de datos (temporal).
Para actualizar la base de datos mediante un script sera necesario seguir los siguentes pasos:

1.- Situarnos en la carpeta donde este el nuevo script de actualización de la base por defecto ``source-code-grp-back/scriptsBD/``

2.- ejecutar el siguiente comando (donde "dump2023D.sql" es el nombre del script por lo que hay que verificar el nombre del script que se quiera ejecutar, en caso de no saber cual es, preguntar por el nombre del ultimo script o en linux checar la fecha de los archivos y ejecutar el comando con el nombre del mas reciente):
```=
mariadb -u root -p BD_GRP_INVEA < dump2023D.sql
```    



### Notas extra.
#### Administrando procesos de PM2
```bash=
    pm2 restart app_name
    pm2 reload app_name
    pm2 stop app_name
    pm2 delete app_name
```

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


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


