Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Historial de Versiones
Fecha Versión Autor Descripción de los cambios
Mauricio Yano
20/05/2022 1.0 Troncoso / Alonso Creación del documento.
Saravia Ochoa
Mauricio Yano
29/05/2022 1.1 Troncoso / Alonso Actualización del documento.
Saravia Ochoa
Mauricio Yano
06/06/2022 1.2 Troncoso / Alonso Corrección del documento.
Saravia Ochoa
Índice
1. Diagrama de arquitecturas.........................................................................................................4
1.1. Arquitectura Física.............................................................................................................4
1.2. Arquitectura Lógica...........................................................................................................4
1.3. Arquitectura Integrada.......................................................................................................5
2. Código Fuente...........................................................................................................................5
3. Manual de despliegue................................................................................................................6
3.1. Levantamiento de máquina virtual en la nube...................................................................6
3.2. Instalación de componentes en máquina virtual..............................................................11
3.2.1. Acceso a máquina virtual.........................................................................................11
3.2.2. Instalación de Docker...............................................................................................11
3.2.3. Instalación de MySQL..............................................................................................14
3.2.4. Conexión y creación de base de datos con instancia MySQL..................................17
3.2.5. Instalación de Nginx.................................................................................................19
3.2.6. Instalación de npm....................................................................................................21
3.2.7. Instalación de PM2...................................................................................................21
3.2.8. Instalación de git.......................................................................................................22
3.2.9. Instalación de CURL................................................................................................22
3.2.10. Instalación de Go......................................................................................................22
3.2.11. Instalación de Fabric y Fabric Samples....................................................................23
3.3. Clonación de repositorios................................................................................................25
3.3.1. Clonación del subproyecto Chaincode.....................................................................25
3.3.2. Levantamiento de la red blockchain y creación de componentes de transferencia. .27
3.3.3. Carga del subproyecto Web......................................................................................28
3.3.4. Clonación del subproyecto Api................................................................................29
3.4. Aplicación desplegada.....................................................................................................31
1. Diagrama de arquitecturas
1.1. Arquitectura Física
2. Código Fuente
1. Adquirir una máquina virtual en la nube, que en este caso elegimos como proveedor a
DigitalOcean: https://www.digitalocean.com/?
refcode=311599aeceeb&utm_campaign=Referral_Invite&utm_medium=Referral_Progra
m&utm_source=CopyPaste y luego se procede a registrar e iniciar sesión con alguno de
los métodos disponibles.
2. Luego tendremos que elegir uno de los 2 métodos para verificar nuestra identidad.
3. Ingresamos los datos asociados a la tarjeta de crédito que se usará.
6. El plan escogido para la máquina virtual para la realización de este manual fue el de 15
dólares/mes con 2 GB / 2 CPUs. Sin embargo, en el proyecto implementado el plan
escogido fue el de 20 dólares/mes con 4 GB / 4 CPUs, para contar con un mayor espacio
de almacenamiento y concurrencia de usuarios al sistema.
7. Luego procedemos a elegir la región en la cual estará alojada nuestra máquina virtual, de
los cuales el que nos brinda una mayor velocidad de conexión debido la cercanía con el
servidor es la opción de “New York 1”.
10. Como paso final, validamos que el proyecto sobre el cual se asignarán los Droplets sea el
que estamos creando y presionamos el botón “Create Droplet”.
11. Como resultado se nos debería mostrar la siguiente pantalla, en la cual podemos observar
el número IP de nuestra máquina virtual el cual debemos copiar en algún lugar para
posteriormente utilizarlo.
3.2. Instalación de componentes en máquina virtual
3.2.1. Acceso a máquina virtual
1. Ahora procederemos a acceder a la máquina virtual a través del CMD modo
administrador de nuestro equipo local, ingresando el comando “ssh
root@167.99.148.242” y presionamos el botón Enter.
3. Luego de eso se nos pide ingresar la contraseña creada para el acceso a la máquina virtual.
En el caso de ingresar los datos de manera correcta podremos conectarnos a la máquina
virtual.
3. Luego tendremos que agregar la clave GPG oficial del Docker ingresando el comando
“sudo mkdir -p /etc/apt/keyrings” y presionamos el botón Enter.
echo \
6. Para instalar el Docker Engine, primero actualizamos el índice del paquete apt,
ingresando el siguiente comando “sudo apt-get update”.
5. Se nos pide confirmar si realmente deseamos establecer este tipo de seguridad sobre las
contraseñas a lo cual escribimos la opción “Y”.
6. Luego tendremos que escoger entre uno de los 3 niveles de políticas de validación de
contraseña, que para este caso elegimos la opción “0”.
7. Continuando con la configuración se nos pide ingresar la nueva contraseña por dos veces.
Cabe mencionar que para que el proyecto se ejecute correctamente ingresamos como
contraseña lo siguiente “202201Tesis”.
10. Luego tendremos que detener el servicio de MySQL en ejecución, ingresando el comando
“service mysql stop”.
11. Ahora iniciaremos MySQL sin utilizar su sistema de privilegios, ejecutando el comando
“mysqld_safe --skip-grant-tables &”.
12. Posterior a ello, abriremos un nuevo terminal y nos conectaremos a la máquina virtual.
Luego, iniciamos sesión en MySQL ingresando el comando “mysql -u root”.
13. Después de ello, tendremos que fijar la configuración de permisos del usuario root,
ejecutando los siguientes comandos uno por uno:
o use mysql;
o select * from user;
o truncate table user;
o flush privileges;
o grant all privileges on *.* to root@localhost identified by '202201Tesis' with grant
option;
14. Ahora cerraremos la sesión de MySQL con el comando “quit” y lo reiniciaremos en modo
normal con los siguientes comandos a ejecutarse de manera individual.
o kill -KILL [PID of mysqld_safe]
o kill -KILL [PID of mysqld]
o service mysql start
15. Ahora ya no se debería tener problemas al ingresar a la instancia de MySQL con el
usuario root, por lo cual continuaremos con el proceso iniciando nuevamente sesión en
MySQL con el comando “mysql -u root -p202201Tesis”.
16. Continuando con la configuración, ahora crearemos un nuevo usuario root para
conexiones remotas, ingresando el comando “CREATE USER 'root'@ '167.99.148.242'
IDENTIFIED BY '202201Tesis';”
17. Luego, se le otorgará los privilegios correspondientes con el comando “GRANT ALL
PRIVILEGES ON *.* TO 'root'@'167.99.148.242' WITH GRANT OPTION;”
18. Una vez concedidos los permisos tendremos que editar el archivo mysqld.cnf en el cual
por default viene configurado para trabajar de manera local, para hacer está edición
tendremos que ingresar el comando “quit” para salir de MySQL y ejecutaremos el
comando “sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf” con el cual se nos abrirá un editor
de texto en donde buscaremos la línea que menciona “bind-address = 127.0.0.1” y la
modificaremos por “bind-address = 0.0.0.0”.
19. Como punto final de está configuración tendremos que establecer que el Firewall permita
las conexiones al servidor MySQL utilizando la ip de la máquina virtual y el puerto de
MySQL, para ello ingresaremos el comando “sudo ufw allow from 167.99.148.242 to any
port 3306”.
20. Adicional a ello ya que nos encontramos configurando el Firewall, habilitaremos la
conexión con los puertos para conectarse a los subproyectos Api y Web a través de los
siguientes comandos que se ejecutan de manera individual:
o cd fabric-samples/medical transfer/
o sudo ufw allow 22
o sudo ufw allow 40000
o sudo ufw allow 40001
3.2.4. Conexión y creación de base de datos con instancia MySQL
1. Ahora procederemos a restaurar nuestra base de datos que ya cuenta con registros, para lo
cual utilizaremos el programa MySQL Workbench 8.0 CE, dentro del cual presionaremos
el botón para establecer una nueva conexión. Luego tendremos que ingresar los
mismos datos que se muestran en la imagen a continuación, el único dato que variará es el
Hostname dependiendo de la IP de la máquina virtual en la nube que se posea. Una vez
completado los datos presionaremos el botón OK.
2. Luego tendremos que descargar el backup de la base de datos .sql a través del siguiente
enlace de OneDrive: PRY2021242.sql y alojarlo en una ubicación que recordemos.
3. Una vez dentro procederemos a importar los datos del backup, para lo cual nos
dirigiremos al menú de la parte superior y presionaremos la opción “Data Import”.
4. Luego marcamos la opción “Import form Self-Contained File” ya que todo el backup se
encuentra en un mismo archivo. Posterior a ello colocamos como ruta aquella en la que se
encuentra alojado el archivo .sql.
5. Finalmente, importaremos la data del .sql presionando el botón ubicado
en la parte inferior derecha y esperaremos hasta que la barra de progreso del proceso de
importación haya terminado.
2. Luego pasaremos a realizar ciertos ajustes al firewall para que este permita el acceso del
servidor web Nginx, es por ello que ingresando el comando “sudo ufw app list”,
obtendremos el listado de las configuraciones de la aplicación con las que UFW puede
trabajar.
3. Para el proyecto escogimos el perfil Nginx HTTP con el cual tendremos un tráfico de web
normal a través del puerto 80, para ello ingresamos el comando “sudo ufw allow 'Nginx
HTTP'”.
7. Como resultado final en caso la instalación haya sido exitosa podremos validarla
ingresando la URL asociada a nuestro servidor que en nuestro caso es
http://167.99.148.242/ y observar la pantalla de bienvenida de Nginx.
3.2.6. Instalación de npm
1. El siguiente paso consistirá en instalar npm debido a que este es el administrador de
paquetes de la plataforma sobre el cual se desarrolló la parte Backend de nuestro proyecto
que es Node.js, para poder instalar este componente ingresamos el comando “npm install -
g n”. Y escribimos la opción “Y” cuando se nos pregunte si deseamos continuar con el
proceso de instalación.
3.2.10. Instalación de Go
1. Nuestro proyecto utiliza la tecnología de blokchain la cual tiene como eje central al
chaincode propio de la cadena de bloques, en este caso el chaincode fue desarrollado bajo
el lenguaje de programación Go. El cual procederemos a buscar si se encuentra disponible
ingresando el comando “sudo apt search golang-go”.
Luego le otorgamos todos los niveles de permiso al token, marcando todas las casillas y
finalmente creamos nuestro token personal.
Ahora en la parte superior se nos mostrará nuestro Token, el cual copiaremos e ingresaremos
en la parte de contraseña del CMD que dejamos pendiente.
6. En caso las credenciales ingresadas estén correctas, la clonación del repositorio chaincode
mostrará el siguiente resultado.
2. Luego tendremos que dirigirnos a la ruta del directorio de la prueba de red ingresando el
comando “cd fabric-samples/test-network”.
6. Finalmente, para poder observar el resultado del despliegue de la parte del Chaincode del
proyecto, ingresamos el comando “docker ps” y obtenemos las imágenes Docker
asociadas a los peers creados.
4. Luego tendremos que ejecutar la última imagen Docker del apartado web a través del
puerto 40001:80 ingresando el comando “docker run -d -it -p 40001:80 medical-
web:latest”.
4. Posterior a ello tendremos que iniciar el servicio pm2 en el que está nuestra API,
ingresando el comando “pm2 start app.js”.
5. Como resultado podemos observar el servicio pm2 ejecutándose y con el estado en línea.
Luego de haber realizado todos los pasos detallados en el presente manual de despliegue, todo el
sistema estará funcionando de manera correcta tal como se puede observar ingresando al
siguiente enlace: http://167.99.148.242:40001/#/login en el cual actualmente tenemos desplegada
nuestra solución.
Para poder validar la funcionalidad del sistema se brinda las credenciales de acceso de 3 usuarios
cada uno perteneciente a un rol:
Rol: Administrador
o DNI: 00000001
o Contraseña: contrasena
Rol: Doctor
o DNI: 00000112
o Contraseña: contrasena
Rol: Paciente
o DNI: 07865568
o Contraseña: contrasena