GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar OSRM en Ubuntu 20.04 – Máquina de enrutamiento de código abierto

OSRM (máquina de enrutamiento de código abierto) es un motor de enrutamiento súper rápido para redes de carreteras OpenStreetMap (OSM). En tutoriales anteriores, explicamos el proceso de configuración de un servidor de teselas OpenStreetMap autohospedado y cómo agregar la funcionalidad de búsqueda de direcciones a su mapa con Nominatim. Este tutorial le mostrará cómo agregar funciones de navegación a su OpenStreetMap con OSRM, que proporciona rutas de automóviles. , rutas para bicicletas y rutas peatonales .

Este tutorial también funciona en Ubuntu 18.04.

Requisitos

Para seguir este tutorial, debe tener un servidor de teselas OSM en funcionamiento. De lo contrario, siga el tutorial a continuación para configurar su propio servidor de teselas OSM.

  • Cómo configurar OpenStreetMap Tile Server en Ubuntu 20.04

También debe tener acceso a un servicio de codificación geográfica como Nominatim para la búsqueda de direcciones.

  • Configurar el servidor de geocodificación OSM Nominatim en Ubuntu 20.04

Una vez que se cumplan los requisitos, siga las instrucciones a continuación para configurar el servidor OSRM.

Paso 1:compilar OSRM desde la fuente

Instalar paquetes de dependencia.

sudo apt update

sudo apt install build-essential git cmake pkg-config doxygen libboost-all-dev libtbb-dev lua5.2 liblua5.2-dev libluabind-dev libstxxl-dev libstxxl1v5 libxml2 libxml2-dev libosmpbf-dev libbz2-dev libzip-dev libprotobuf-dev

Crear el osrm usuario. (No es necesario crear una contraseña para este usuario).

sudo useradd -d /srv/osrm -s /bin/bash -m osrm

Otorga permisos a tu propia cuenta de usuario.

sudo apt install acl

sudo setfacl -R -m u:username:rwx /srv/osrm/

Cambie a /srv/osrm/ directorio.

cd /srv/osrm/

Descarga el código fuente de OSRM desde su repositorio de Github.

git clone https://github.com/Project-OSRM/osrm-backend.git

Crea la build directorio.

mkdir build

Cambie a este directorio y configure el entorno de compilación.

cd build

cmake /srv/osrm/osrm-backend/

Compile el código fuente.

make

Instale los binarios.

sudo make install

Se instalarán los siguientes binarios.

  • /usr/local/bin/osrm-extract:
  • /usr/local/bin/partición-osrm:
  • /usr/local/bin/osrm-personalizar:
  • /usr/local/bin/osrm-contrato:
  • /usr/local/bin/osrm-datastore:
  • /usr/local/bin/osrm-routed:

Paso 2:Instalar GNU Screen

En el siguiente paso, necesitaremos extraer las redes de carreteras de OpenStreetMap, lo que puede llevar mucho tiempo. Es posible que su computadora esté desconectada de Internet, por lo que se recomienda usar la utilidad GNU Screen para mantener activa su sesión. Pantalla de instalación en el servidor Ubuntu 20.04:

sudo apt install screen

Luego pantalla de inicio:

screen

En el primer lanzamiento, verá un texto de introducción, simplemente presione Enter para terminar. Entonces podrá ejecutar comandos como de costumbre.

Paso 3:generar datos de enrutamiento OSRM

Ahora necesitamos descargar los datos de OpenStreetMap y hacerlo utilizable para el enrutamiento. Ejecute el siguiente comando para descargar los datos del mapa de todo el planeta (56G) en formato PBF (ProtoBufBinary).

wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf -P /srv/osrm/osrm-backend

Si desea un mapa de un país/estado/provincia/ciudad individual, vaya a http://download.geofabrik.de. Por ejemplo, descargue los datos del mapa de Gran Bretaña (1.2G) con el siguiente comando.

wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf -P /srv/osrm/osrm-backend

BBBike.org también ofrece extractos de más de 200 ciudades y regiones de todo el mundo en diferentes formatos.

Asegúrate de estar en /srv/osrm/osrm-backend/ directorio.

cd /srv/osrm/osrm-backend/

Extraiga un gráfico de los datos de OpenStreetMap.

osrm-extract britain-and-ireland-latest.osm.pbf --threads=10

Por defecto, usará el car.lua perfil.

Ahora probablemente no necesite hacer otras cosas en su servidor. Ya que está utilizando Pantalla, puede presionar Ctrl+A , suelte esas teclas y luego presione D para desconectarse de la sesión de pantalla actual. Verá un mensaje como el siguiente.

[detached from 32113.pts-1.focal]

Esto me dice que el ID de sesión de pantalla anterior es 32113. Puede cerrar la sesión de SSH e incluso apagar su computadora. No te preocupes, el osrm-extract el proceso aún se está ejecutando. Cuando necesite regresar y verificar el progreso, acceda a SSH a su servidor y ejecute el siguiente comando para obtener el ID de sesión de pantalla anterior.

screen -ls

Salida de muestra:

There is a screen on:
	32113.pts-1.focal	(05/19/2020 03:45:29 PM)	(Detached)
1 Socket in /run/screen/S-linuxbabe.

Luego puede volver a adjuntar a la sesión de pantalla anterior.

screen -r 32113

Este proceso requiere mucha memoria. (Usa 7 GB de RAM en mi servidor). Una vez que esté terminado, habrá un archivo con el mismo nombre pero con .osrm extensión. Ejecute el siguiente comando para particionar este gráfico recursivamente en celdas

osrm-partition britain-and-ireland-latest.osrm

Personalice las celdas calculando los pesos de enrutamiento para todas las celdas.

osrm-customize britain-and-ireland-latest.osrm

Ahora puede iniciar el motor de enrutamiento.

osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm

Como puede ver, escucha en el puerto TCP 5000.

Paso 4:Creación de un servicio systemd

Podemos ejecutar manualmente el motor de enrutamiento OSRM con osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm , pero es más conveniente ejecutar osrm-routed como un servicio systemd en segundo plano. Presiona Ctrl+C para detener el proceso enrutado osrm actual y crear un archivo de unidad de servicio systemd para enrutado osrm con el siguiente comando.

sudo nano /etc/systemd/system/osrm-routed.service

Ponga las siguientes líneas en el archivo.

[Unit]
Description=Open Source Routing Machine
Wants=network-online.target
After=network.target network-online.target

[Service]
ExecStart=/usr/local/bin/osrm-routed --algorithm=MLD /srv/osrm/osrm-backend/britain-and-ireland-latest.osrm
User=osrm
Group=osrm
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

Guarde y cierre el archivo. Cambiar la propiedad de /srv/osrm/osrm-backend/ directorio.

sudo chown osrm:osrm /srv/osrm/osrm-backend/ -R

Ahora podemos iniciar y habilitar el osrm-routed servicio systemd.

sudo systemctl start osrm-routed

sudo systemctl enable osrm-routed

Comprobar estado.

systemctl status osrm-routed

Si el osrm-routed el servicio no está activo (en ejecución), puede ejecutar el siguiente comando para ver qué está mal.

sudo journalctl -eu osrm-routed

Paso 5:configurar el servidor web Apache

Podemos configurar el servidor web Apache como un proxy inverso para el osrm-routed servicio, por lo que podemos usar un nombre de dominio para acceder al servicio de enrutamiento y también habilitar el cifrado HTTPS.

Instale el servidor web Apache.

sudo apt install apache2

Para usar Apache como proxy inverso, debemos habilitar el proxy , proxy_http y rewrite módulo.

sudo a2enmod proxy proxy_http rewrite

Luego cree un archivo de host virtual para OSRM.

sudo nano /etc/apache2/sites-available/osrm.conf

Agregue los siguientes textos al archivo. Reemplace osrm.your-domain.com con su nombre de dominio real y no olvide crear un registro DNS A para él.

<VirtualHost *:80>
    ServerName osrm.your-domain.com

    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
</VirtualHost>

Guarde y cierre el archivo. Luego habilite este servidor virtual.

sudo a2ensite osrm.conf

Vuelva a cargar Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Ahora puede acceder a OSRM de forma remota ingresando el nombre de dominio (osrm.your-domain.com ) en la barra de direcciones del navegador.

Paso 6:habilite HTTPS

Podemos habilitar HTTPS instalando un certificado TLS gratuito emitido por Let's Encrypt. En el tutorial de configuración del servidor de teselas de OSM, ya instalamos el cliente Let's Encrypt (certbot) desde la tienda Snap. Entonces solo necesitamos ejecutar el siguiente comando para obtener e instalar el certificado TLS.

sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d osrm.your-domain.com

donde:

  • --apache :Utilice el complemento de Apache.
  • --agree-tos :Acepto los términos del servicio.
  • --redirect :Forzar HTTPS por redirección 301.
  • --hsts :agregue el encabezado Strict-Transport-Security a cada respuesta HTTP. Obligar al navegador a usar siempre TLS para el dominio. Protege contra la eliminación de SSL/TLS.
  • --staple-ocsp :activa el grapado OCSP. Se grapa una respuesta OCSP válida al certificado que ofrece el servidor durante TLS.

Ahora se debe obtener el certificado e instalarlo automáticamente. Y podrá acceder a la interfaz web de Webmin a través de una conexión HTTPS segura.

Paso 7:integre OSRM con un mapa deslizable

Asumo que su mapa deslizable se muestra usando la biblioteca de JavaScript del folleto, y ha agregado el servicio de geocodificación de Nominatim a su mapa deslizable.

Para integrar OSRM con un mapa deslizante, podemos usar un complemento llamado Leaflet Routing Machine. Primero, incluya el archivo JavaScript y CSS de la máquina de enrutamiento de folletos en su mapa deslizable. Tenga en cuenta que deben colocarse después del JavaScript del folleto principal y del JavaScript del geocodificador de control del folleto.

<html>
  <head>
     ....
     ....
     <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.css" />
     <script src="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.js"></script>
 </head>
 <body>
 ....
 ....
 </body>
</html>

A continuación, agregue las siguientes líneas al <script>...</script> fragmento en el cuerpo HTML.

     L.Routing.control({
         serviceUrl: 'https://osrm.your-domain.com/route/v1',
         geocoder: L.Control.Geocoder.nominatim({serviceUrl:'https://tile.your-domain.com/nominatim/'}),
         routeWhileDragging: true
       }).addTo(map);

Así:

<html>
  <head>
     ....
     ....
     <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.css" />
     <script src="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.js"></script>
 </head>
 <body>
   <div id="map"></div>
     <script>
     ....
     ....


     L.Routing.control({
         serviceUrl: 'https://osrm.your-domain.com/route/v1',
         geocoder: L.Control.Geocoder.nominatim({serviceUrl:'https://tile.your-domain.com/nominatim/'}),
         routeWhileDragging: true
       }).addTo(map);

    </script>

  </body> 
</html>

Guarde y cierre el archivo. Luego vuelva a cargar el mapa en su navegador web, debería ver un panel de control en la esquina superior derecha, donde puede ingresar la dirección de inicio y la dirección de destino.

Puede arrastrar los waypoints en el mapa y OSRM recalculará automáticamente la ruta.


Ubuntu
  1. Cómo instalar R en Ubuntu 20.04

  2. Cómo instalar Open Real Estate en Ubuntu 16.04

  3. Instalación de Ubuntu | ¿Cómo instalar Ubuntu 11.10 (Oneiric Ocelot)?

  4. Cómo instalar TensorFlow “Aprendizaje automático” en Ubuntu 21.04

  5. ¿Cómo instalar Ubuntu en una máquina sin cabeza?

Cómo instalar RStudio Server de código abierto en Ubuntu 20.04 LTS

Cómo instalar Ubuntu 21.04 (Hirsute Hippo) en una máquina VirtualBox

Cómo instalar una red social de código abierto en Ubuntu 16.04

Cómo instalar Open Visual Traceroute en Ubuntu 16.04 LTS

Cómo instalar Open Eshop en Ubuntu 16.04 LTS

Cómo instalar Open Web Analytics en Ubuntu 18.04 LTS