*Manual d'implementació de Hacking day*
===
En aquest Manual mostrarem com crear un sistema escalable que permet executar la aplicació del hacing day que requereix d'una base de dades amb Amazon Web Service.
Per fer aixó utilitzarem els serveis:
EC2: Servei per virtualitzar
RDS: Servei de servidors de Bases de dades
EFS: Es un sistema d'arxius on hi guardarem el fitxer de la aplicació.
Autoescaling: per escalar el sistema afegint més màquines quan és necessari
ELB: Per redirigir als usuaris a la màquina corresponent
-**Crear Base de Dades a AWS**
===
- **Primer Pas**: A la part superior dreta de la consola de Amazon RDS, seleccionem la regió en la que desitjem crear la instancia de la base de dades.

- **Segon Pas**: En la secció de **Create Database** seleccionem **Create Database**

- **Tercer Pas**: Ens apareixera aquest apartat de aquí:

- Seleccionarem en la icona de MySQL, i a baix seleccionem la opció de **Only enable options eligible for RDS Free Usage Tier** i després clic a **Next**.
- **Quart Pas**: Ara toca configurar la instancia de la base de dades.

- **Cinquè Pas**: Un cop configurada i creada la base de dades ja s'iniciarà automàticament.
- **Sisè Pas**: Ens connectem a la base de dades a partir de la instància que hem creat de AWS gràcies a l'Endpoint

A partir d'aquesta comanda mysql - podem accedir a la base de dades creada indicant l'endpoint, el port i l'usuari corresponent.
```
sudo su
mysql -h ENDPOINT -P PORT -u USUARI -p
```
La comanda anterior la farem servir més tard.
**Instal·lació de máquina virtual + implemantació
d'aplicació de hday i EC2.**
=====
- **Primer pas**: Accedir al AWS ¡ i crear una instància nova amb una máquina virtual Ubuntu Server. Per fer això anem al servei EC2 i allà anem al menú d'instàncies i apretem el botò lanzar nueva instancia.
- Cliquem l'opció de Launch a Virtual Machine

- Cerquem una iso de Ubuntu Server

- Deixem per defecte el seguent apartat

- Baixem fins on posa **Create new file system**. Això ens servira per crear un EFS que és un sistema d'arxius on hi podrem guardar l'aplicació del hacking day de tal manera que sigui accesible desde qualsevol màquina.

- Posem un nom qualsevol i cliquem **create**



- **Segon Pas**: Un cop creada la màquina virtual farem el següent:
-Actualitzem el sistema:
````
apt update
apt upgrade
````
```
apt install python3-pip
```
-Accedim a la base de dades:
```
-mysql -u root -p
```
Creem la base de dades i l'usuari que necessita l'aplicació:
```
CREATE DATABASE hday;
USE hday;
CREATE USER 'hday'@'%' IDENTIFIED BY '[contrasenya]';
GRANT ALL PRIVILEGES ON * . * TO 'hday'@'%';
FLUSH PRIVILEGES;
EXIT
# La contrasenya de l'usuari hday, s'ha de configurar-se també al fitxer logica/claus.py
```
Ara fem un exit per sortir de la base de dades i comencem a instal·lar l'aplicació del hacking day a la EFS.
Creem l'usuari del hacking day:
````
/usr/sbin/adduser hday
````
Accedim a la carpeta del sistema de arxius EFS i alla descarraguem el hacking day:
Per instal·lar els arxius hem de fer els següents passos;
primer ens movem a l'ubicació del nostre EFS, que hem configurat en la instal·lació d'aquest. En el nostre cas és /mnt/efs/fs1.
seguidament estirem els arxius del github amb un wget, ens descarregara un arxiu .zip anomenat master.zip, ho podem comprovar amb un ls.
per descomprimir-lo, hem de fer un unzip master.zip, en cas de no ternir instal·lada aquesta commanda, la podem installar amb un apt install unzip.
Quan es descomprimeixi cambiem els permisos del'hday.sh perquè es pugui accedir sense problemes de permisos.
Seguidament, anirm a buscar l'arxiu exemple-claus.py en l'ubicació /mnt/efs/fs1/hday/app/logica i li cambiem el nom a claus.py. Aquest fitxer s'ha de editar posant-li 64 '0' en CLAU PER ENCRIPTAR CONTRASSENYES i la contrassenya de la base de dades en CLAU USUARI BASE DE DADES.
Les commandes per fer això son els següents:
````
cd mnt/efs/fs1
wget https://github.com/jrodr236/hday-app/archive/refs/heads/master.zip
apt install unzip
unzip master.zip
mv hday-app-master/ hday-app/
chmod +x /mnt/efs/fs1/hday/hday-app/hday.sh
cd ~/hday-app/app/logica
cp exemple-claus.py claus.py
````
Seguidament hem d'editar la configuració del fitxer hday-app/app/dades/configuracio_db.py.
En aquest fitxer hem de posar la ruta del nostre rds d'aws on posa CLAU_USUARI_BASE_DE_DADES i posar les dedes de l'usuari hday, CLAU_USUARI fa referència a la password de l'usuari hday.
El procediment seria aquest:
````
cd hday-app/app/dades/
nano configuracio_db.py
#### DADES A POSAR EN EL FITXER ####
# -*- coding: utf-8 -*-
from typing import Dict
from logica.claus import CLAU_USUARI
mysql_cfg: Dict[str, str] = {'host': 'localhost',
'user': 'hday',
'passwd': CLAU_USUARI_BASE_DE_DADES,
'db': 'hday'}
````
Ara el que hem de fer es instal·lar el mysql connector des de la carpeta hday-app.
````
cd hday-app
pip3 install mysql-connector
python3 app/reiniciar.py
````
Editem el fitxer de configuració:
````
nano /etc/ssh/sshd_config
Match User hday
X11Forwarding no
AllowTcpForwarding no
#PermitTTY no
ForceCommand ./hday.sh
````
Reiniciem el servei sshd:
````
systemctl restart sshd
````
Entrem al usuari hday i fem el següent
````
login hday
cd hday-app
./hday.sh
````
Per permetre connexions remotes accedim al fitxer:
````
nano /etc/mysq/mariadb.conf.d/50-server.cnf,
````
comentem línia:
````
#bind-address = 127.0.0.1
````
---
**Configuració del sistema perque la aplicació hacking day s'executi tan punt accedir al sistema amb l'usuari hday**
----
El primer que s'ha de fer es moure l'hday.sh a l'usuari de hday.
````
cp hday.sh /home/hday
````
Llavors el que s'ha de fer es modificar aquest fitxer perquè busqui els arixus del programa en la carpeta de l'EFS ja que sinó aquest no tindria cap funció.
````
vi hday
````
aquest ha de quedar de la següent manera:
````
cd /mnt/efs/ef1/hday-app
python3 app
````
un cop fet això, hem d'editar l'ssh (podira ser que ja estigués be.
```
vi /etc/ssh/sshd_config
````
hem d'inserir les següents línies:
````
Match User hday
X11Forwarding no
AllowTcpForwarding no
ForceCommand ./hday.sh
````
un cop fet aixó guardem els canvis i reiniciem el servei d'ssh amb un:
````
systemctl restart sshd.
````
---
-**Creació i implementació del autoscaling**
====
- **Primer pas**:Anar a la ec2 i amb el botó dret clicar sobre de l'instància, triem "imagen y plantillas" i li donem a crear imagen.

- **Segon pas**: Seguidament hem de crear un grup d'autoscalig, primer hem d'hanar a "Auto Scaling Groups" i allà triar l'opció "Crear grupo de autoscaling".

- **Tercer pas**: Primer de tot li hem de posar un nom, seguidament hem de triar la plantilla creada anteriorment cliquem següent.

- **Quart pas**:En la següent pàgina tries la configuració que necessitis nosaltres l'hem deixat per defecte, l'opció de "subredes" hem de posar la mateixa subxarxa que té la ec2 original sobre la qual hem fet la imatge del primer pas.
- **Quart pas**: Hem de crear un balancejador de càrrega per tal que els usuaris siguin redirigits a les noves maquines que creea l'autoscaling a mida que les velles es van saturant.
-En el nostre cas hem de triar l'opció TCP, UDP...
-Triem una nova zona de disponibilitat (qualsevol).
-Hem de canviar el port 80 pel port 22, també hem de crear l'adreçament predeterminat que es troba al cantó del port
-En la comprovació de l'estat de la màquina hem de posar el que creiem més convenient, en el nostre cas hem posat 60.
-Cliquem següent.
- **Cinquè pas**: Configurar les polítiques d'escalat i el grup.
-Primer de tot hem de triar la quantitat màxima (en el nostre cas 3), desitjada (en el nostre cas 1) i mínima (en el nostre cas 1) de màquines que volem tenir al autoscaling.
-Seguidament hem de clicar l'opció seguiment de destí, li posem un nom, triem l'opció que mirarà l'autoscaling per poder crear una nova màquina, en el nostre cas la CPU, seguidament triem el valor de saturació que volem per crear una nova instància.

-Si volem que ens notifiqui quan és creei una nova instància hem d'afegir una notificació.
-Revisem que la configuració estigui correctament, i finalment la creem.

- **Sisè pas**: Finalment ja tindríem l'autoescalat creat, per poder utilitzar-lo hem de connectar-nos (a través de putty o de SSH) directament al balancejador amb el nom de DNS que ens proporciona dins l'apartat "Balanceadores de carga".

Ara si els usuaris utilitzen aquest domini per accedir el hacking day i mentresestant tots els serveis de l'AWS treballaràn perque es pugui oferir el servei del hacking day al major nombre de persones possibles.
---
David, Sergi Marcillo, Pau, Raul, Liu, Montse, Roger, Dennis i Jordi.