{"id":1233,"date":"2022-05-12T12:16:10","date_gmt":"2022-05-12T10:16:10","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=1233"},"modified":"2022-05-12T12:43:06","modified_gmt":"2022-05-12T10:43:06","slug":"simular-el-posicionamient-gps-problemas-en-el-despliegue-a-la-nube-ovh","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=1233&lang=es","title":{"rendered":"Simular el posicionamient GPS (problemas en el despliegue a la nube, OVH)"},"content":{"rendered":"<p><iframe width=\"400\" height=\"300\" src=\"\/\/www.youtube.com\/embed\/oP91cIbiITc?feature=player_detailpage\" frameborder=\"0\" allowfullscreen=\"\" class=\"aligncenter size-medium wp-image-1665\"><\/iframe>Tenemos una <b>REST API<\/b> con <b>MongoDB<\/b>. Tenemos un front-end para generar posiciones y grabarlas en la bd. Y tenemos otro front-end para visualizar las posiciones y ver c\u00f3mo van evolucionando.<\/p>\n<p>La parte de generar las posiciones y enviarlas al servidor de momento no es una aplicaci\u00f3n m\u00f3vil, sino que es una p\u00e1gina web. <b>Openlayers<\/b> tiene la posibilidad de hacer <em>geolocation<\/em>, y por tanto tenemos una precisi\u00f3n muy buena (unos 15 m). No es necesario por tanto una aplicaci\u00f3n m\u00f3vil. Ahora bien, hay que hacerlo con <em>https<\/em>.<\/p>\n<p>(ref): https:\/\/stackoverflow.com\/questions\/39366758\/geolocation-without-ssl-connection:<\/p>\n<p><code>Warning by Chrome : getCurrentPosition() and watchPosition() no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS.<\/code><\/p>\n<p>Hasta aqu\u00ed ning\u00fan problema especial cuando se desarrolla localmente (localhost). Pero el problema est\u00e9 cuando se despliega en el servidor, en este caso un VPS en OVH. Por tanto, la parte de generar las posiciones GPS tiene que ir al servidor OVH donde hay instalado el certificado SSL. Ahora bien, no se pueden generar certificados para el dominio <em>ovh.net<\/em> con <em>noip.com<\/em> (se han pasado de la cuota, l\u00f3gico). As\u00ed pues, primero me he tenido que registrar en <em>noip.com<\/em> y ahora tengo el dominio <em>jquintana.ddns.net<\/em>.<\/p>\n<p>Poner el MongoDB en el servidor no ha sido ning\u00fan problema. El problema est\u00e1 en la API REST, hecha con <b>Express<\/b>. La API REST se ha tenido que hacer segura (<em>https<\/em>), pues no pod\u00eda ser que llam\u00e1semos a la API desde <em>https<\/em>, y que este servidor respondiese com <em>http<\/em>. Este ha sido el problema principal.<\/p>\n<p>Finalmente la parte del front-end de visualizar las posiciones no ha tenido especial problema. Las llamadas a la API <em>http:\/\/localhost:3000<\/em> se han de cambiar a les llamadas a la API https:\/\/jquintana.ddns.net:8080.<\/p>\n<p>En resumen, t\u00fa puedes tener una aplicaci\u00f3n funcionando con <em>localhost<\/em> sin especiales problemas, y cuando la quieres desplegar en la nube empiezan los problemas de <em>CORS<\/em>, seguridad, protocolos que no te hab\u00edas planteado.<\/p>\n<p>Ahora el \u00faltimo paso es tener un c\u00f3digo que funcione igual de bien en localhost y en la nube, que esto en principio no ser\u00e1 problema. Y la reflexi\u00f3n es que cuando se desarrolla un proyecto, no hay que esperar al final de tot para desplegarlo a la infraestructura de la nube. Hay que hacerlo ya en las primeras fases: es el despliegue continuo. Aunque la aplicaci\u00f3n no tenga muchas funcionalidades, ya se ha podido afrontar todos los problemas de seguridad e infraestructura al intentar desplegar en un entorno real en las primeras fases. Y as\u00ed nos ahorramos problemas al final del proyecto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tenemos una REST API con MongoDB. Tenemos un front-end para generar posiciones y grabarlas en la bd. Y tenemos otro front-end para visualizar las posiciones y ver c\u00f3mo van evolucionando. La parte de generar las posiciones y enviarlas al servidor de momento no es una aplicaci\u00f3n m\u00f3vil, sino que es una p\u00e1gina web. Openlayers tiene [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[300,324,320,340,192,539],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/1233"}],"collection":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1233"}],"version-history":[{"count":2,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/1233\/revisions"}],"predecessor-version":[{"id":1239,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/1233\/revisions\/1239"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}