Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
BRASIL
BRATAX
1 Alcance General Hardware
Para llevar a buen termino, la implementación de la app de georeferenciación de taxis, es
necesario segmentar la solución en diferentes capas, a saber:
• Servidores
• Aplicación
• Distribución
1.1 Servidores
La solución a implementar, con respecto a los requerimientos físicos, se va a utilizar el modelo de
load balancers (imagen 1), y cluster de servidores, ya que nos permite escalar horizontalmente
(agregando o retirando nodos al cluster - elástico), de manera simple, rápida y automatizada,
según los requerimientos del sistema.
Imagen 1
Imagen 2
Imagen 3
La imagen 4, nos muestra una implementación óptima para iniciar un sistema de producción al
público, se le han agregado servidores de soporte para todas las aplicaciones, lo que mejoraría la
disponibilidad de manera exponencial.
Imagen 4
imagen 5
2 Alcance Aplicación
El desarrollo de la app, será realizado en el lenguaje Node JS, cumpliendo los estándares
modernos de la industria, como son: REST API, y PWA.
2.2 PWA
Progressive Web Application, es un conjunto de técnicas, para desarrollar la interfaz gráfica de las
apps, y que estas se instalen fácilmente, sobre cualquier plataforma (PC, android, Mac), sin
necesidad de sistemas de distribución de contenido, como el appstore.
2.3 Procedimiento
Para llevar este proyecto a buen termino, se deben seguir los siguientes pasos para el desarrollo de
la app en cuestión:
• Levantamiento de información
• Desarrollo de Aplicativo
• Puesta en producción
2.3.4 Cronograma
3 Estructura General de la Aplicación
Imagen 6
Para el correcto funcionamiento de la aplicación BRATAX, se requiere de los siguientes
componentes, y las librerías necesarias para que cada uno de ellos funcione de manera adecuada.
3.1.3 Microservicios
El servidor API de BRATAX, requiere varios servicios adicionales para cumplir con funciones
específicas, estas deben ejecutar de manera sincronizada, para así garantizar una experiencia
fluida del cliente web. Estos servicios incluyen: servidor de mapas local, servicios de enrutado,
para decidir que camino tomar dentro del mapa, y geo-codificador, para convertir puntos
geográficos en direcciones legibles por humanos, y viceversa.
3.1.3.2 Routing
El servicio que nos permite trazar la ruta más corta, por las vías de una red de carreteras
permitidas de un mapa, es fundamental para el correcto funcionamiento de la app BRATAX, por
tal motivo, se necesita de un servidor que cumpla con dicha funcionalidad, en las pruebas
realizadas con varias soluciones, se ha llegado a la conclusión de utilizar el enrutador Project
OSRM, para mayor información: http://project-osrm.org. Ver apéndice C. Project OSRM, está
desarrollado en C++, y tiene soporte para NodeJS. El servidor de enrutado nos permite trazar el
camino en el mapa, por donde el taxista debe dirigirse, generando además instrucciones de
navegación al estilo GPS, que pueden ser leidas por un TTS.
3.1.3.3 Geocoder
Cuando los usuarios solicitan un servicio de taxi, lo más probable es que utilicen una o más
direcciones, estas direcciones, se deben convertir en datos geográficos, para que la API pueda
funcionar con ellas, a este procedimiento se le conoce como geocoder. Cuándo en una aplicación,
se pone un punto sobre un mapa existente, el usuario necesita saber a qué dirección física se
refiere, para tal fin, se realiza el proceso conocido como geocoder inverso, en donde el sistema
convierte ese punto geográfico [latitud, longitud], en una dirección legible, como calle 3 # 5-55,
inclusive, permite utilizar puntos de interes, en vez de direcciones, por ejemplo el usuario podría
solicitar un servicio para ir a “Areopuerto El Robado”, el geocoder, debe convertir ese lugar
reconocido, en una dirección o en un punto geográfico. La solución escogida, para que cumpla
con esta funcionalidad, es Nominatim, que es en general un motor de búsqueda de los datos de
openstreetmap, y permite realizar geocoder, y geocoder inverso. Para más información
https://nominatim.org. Para el correcto funcionamiento de este servicio, se requiere de un servidor
web, por ejemplo apache, y de la base de datos Postgresql. Ver apéndice D.
3.2.2 Distribución
Se requiere empaquetado para distribuir sobre plataformas, play store de google y app store de
apple.
4 Funciones y Prestaciones BRATAX
La aplicación de taxis por geo-referencia, será implementada basados en el modelo de múltiples
roles en el sistema, siendo estos:
• Administrador
• Taxista
• Cliente
• Soporte
4.1.1 Administrador
El acceso del administrador, las funciones de este usuario están por definirse, pero lo básico es:
• Administrar usuarios del sistema
• Manejar copias de seguridad
4.1.2 Taxistas
Los usuarios taxistas, deben registrarse en la plataforma , proceso que debe ser autorizado por un
administrador. Este usuario, recibe los anuncios de solicitud de servicios desde la plataforma,
donde decide, si va o no a tomar dicha solicitud.
4.1.3 Clientes
Los usuarios clientes, se pueden registrar de manera más libre en el sistema, pero se debe buscar
algún procedimiento para verificar por asuntos de seguridad. Los clientes, generan solicitudes de
servicio en la plataforma, esta solicitud, se responderá, en lo posible, con taxis ubicados lo más
cerca posible en la zona.
4.1.4 Soporte
El usuario soporte, es un ayudante, para guiar y colaborar con asuntos de usuarios en la
plataforma, dando soporte técnico, u otro tipo de ayudas.
5 BRATAX REST API v1
Las funciones explícitas del servidor API, deben cumplir los requerimientos que el sistema
integral requiere, permitiendo que las aplicaciones clientes, alimenten de data, sus solicitudes.
5.1 Estándar
Apegándose al estándar MVC (Modelo, Vista, Controlador), para así separar el funcionamiento
de las partes primordiales de nuestra solución final, podemos obtener resultados de manera
efectiva, rápida, y escalable. Desde el punto de vista del desarrollo, y para que podamos aplicar
este estándar, requerimos de varias aplicaciones, que van a ser la estructura base del servidor API
BRATAX.
5.2 Librerías
Los requerimientos de software, para el funcionamiento de la aplicación BRATAX API v1, están
enfocados, al funcionamiento correcto, y cumplimiento del MVC, para tal fin, se requieren varias
librerías y/o aplicaciones, funcionando en el entorno de desarrollo. En el título llevará la
indicación si pertenece a modelo, vista, o controlador.
5.2.1.1 Instalar:
5.2.1.2 Utilizar:
5.2.2.1 Instalar
5.2.3.1 Instalar
En express:
5.2.3.2 Ejemplo
Es posible implementar soluciones dinámicas, en los documentos HTML de respuesta:
5.3 ENDPOINTS
El servidor BRATAX API v1, debe cumplir con las funciones necesarias, para alimentar con datos
a la app, por tal motivo, se requiere que existan las funciones, o endpoints, en este servidor, estas
funciones, están definidas dentro del estándar REST:
https://es.wikipedia.org/wiki/Transferencia_de_Estado_Representacional
Para definir los endpoints, se debe primero completar las funcionalidades de la App, por
ejemplo:
GET /login : Muestra el formulario de acceso de usuarios.
POST /solicitudes: Un usuario cliente, envía una solicitud al server, para que sea procesada, y
encuentre un taxi disponible.
En el caso anterior, tendríamos una API, con 2 endpoints, si el servicio se encontrara alojado en
un dominio, por ejemplo, bratax.com, los endpoints quedarían así, si no se ha modificado algo en
el web server:
http://bratax.com/login
http://bratax.com/solicitudes
Página en blanco
6 Apéndice – CENTOS 7
Descargar:
wget http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
cd ~
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F
%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie"
"http://enlace_copiado_desde_sitio"
Instalar rpm, verificando que el número de versión coincida, con la descargada en el paso
anterior:
rm ~/jre-8u161-linux-x64.rpm
8.1.1 COnfiguraCIÓN
Es posible, que el sistema tenga varios entorneo de ejecución de java, para verificar cuál versión
se encuentra funcionando, ejecutar:
java -version
8.2.2 Descargar
cd ~
wget https://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-
8.5.38.tar.gz
sudo tar -zxvf apache-tomcat-8.5.38.tar.gz -C /opt/tomcat --strip-components=1
8.2.4 Systemd
sudo nano /etc/systemd/system/tomcat.service
8.2.4.1 tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
http://[IP-DEL-SERVIDOR]:8080
8.2.8.1 /opt/tomcat/conf/tomcat-users.xml
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
1 https://blog.techstacks.com/2010/07/new-manager-roles-in-tomcat-7-are-wonderful.html
<role rolename="admin-script"/>
<user username="tomcat" password="[CHANGE_ME]" roles="tomcat"/>
<user username="manager" password="[CHANGE_ME]" roles="manager-gui,manager-
script,manager-jmx,manager-status"/>
<user username="admin" password="[CHANGE_ME]" roles="manager-gui,admin-gui"/>
Reiniciar:
wget https://superb-dca2.dl.sourceforge.net/project/geoserver/GeoServer/2.15.0/
geoserver-2.15.0-war.zip
Descomprimir:
10.1.4.1 postgresql.conf
shared_buffers (2GB)
maintenance_work_mem (10GB)
work_mem (50MB)
effective_cache_size (24GB)
synchronous_commit = off
checkpoint_segments = 100 # only for postgresql <= 9.4
checkpoint_timeout = 10min
checkpoint_completion_target = 0.9
The code must be built in a separate directory. Create this directory, then configure and build
Nominatim in there:
cd $USERHOME
mkdir build
cd build
cmake $USERHOME/Nominatim-3.2.0
make
10.1.7 Configurar Selinux
It is a good idea to leave SELinux enabled and enforcing, particularly with a web server
accessible from the Internet. At a minimum the following SELinux labeling should be done for
Nominatim:
You need to create a minimal configuration file that tells nominatim the name of your webserver
user and the URL of the website: