Thứ sáu, 20/02/2015 | 00:00 GMT+7

Cách thiết lập server OSRM trên Ubuntu 14.04

Dự án OpenStreetMap bao gồm dữ liệu bản đồ thô, được thu thập và tổng hợp bởi hàng nghìn user . Tuy nhiên, policy truy cập mở của nó đã làm dấy lên một số dự án tài sản thế chấp, bao gồm chung nhiều tính năng thường được cung cấp bởi các dịch vụ bản đồ thương mại.

Ưu điểm rõ ràng nhất khi sử dụng phần mềm dựa trên OpenStreetMap so với giải pháp thương mại là sự tiện lợi về kinh tế, bởi vì OpenStreetMap là phần mềm miễn phí (cả trong bia và giọng nói). Nhược điểm là cần một chút cấu hình để cài đặt một dịch vụ web hoạt động.

Hướng dẫn này bao gồm cấu hình và bảo trì một dịch vụ web có thể trả lời các câu hỏi như:

  • Đường nào gần nhất với một cặp tọa độ nhất định?
  • Cách tốt nhất để đi từ điểm A đến điểm B là gì?
  • Mất bao lâu để đi từ A đến B bằng ô tô hay đi bộ?

Phần mềm có thể thực hiện điều này là một dự án open-souce được gọi là Máy định tuyến nguồn mở (OSRM) , dựa trên dữ liệu OpenStreetMap. Các chức năng để nhúng OpenStreetMaps vào các trang Web đã được cung cấp sẵn bởi các API như OpenLayers .

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Một server Ubuntu 14.04.
  • Bạn có thể tạo user không phải root có quyền sudo theo hướng dẫn này . Hướng dẫn này giả sử tên user không phải root có quyền sudo của bạn là osrm .
  • Khuyến nghị 4 Gigabyte swap , như được đề cập trong Cách thêm swap trên Ubuntu 14.04 .

Một số hoạt động trong hướng dẫn này, chẳng hạn như xây dựng OSRM từ nguồn và các giai đoạn tiền xử lý, tốn nhiều bộ nhớ. Trên Server bộ nhớ thấp, các hoạt động này có thể không thành công, đó là lý do tại sao cần phải cấp phát file swap .

Dịch vụ web thường không yêu cầu trao đổi bổ sung trong khi chạy, vì vậy file swap này có thể bị xóa sau khi cài đặt hoàn tất. Tuy nhiên, khi cung cấp các bản đồ lớn, một file swap nhỏ có thể thực sự cần thiết, đặc biệt là trong các server bộ nhớ thấp. Nếu vậy, hãy làm theo hướng dẫn trong hướng dẫn ở trên để làm cho file swap liên tục.

Bước 1 - Cập nhật và bảo mật

Trong bước này, ta sẽ cấu hình các bản cập nhật cho server .

Điều quan trọng là phải giữ cho server của ta được cập nhật và an toàn theo thời gian. Do đó, trước tiên ta nâng cấp tất cả các gói trong hệ thống bằng cách chạy các lệnh sau.

sudo apt-get update sudo apt-get upgrade 

Sau đó, ta bật các nâng cấp bảo mật không cần giám sát của Ubuntu. Để làm điều này, trước tiên ta cần cài đặt các gói cần thiết.

sudo apt-get install unattended-upgrades 

Tiếp theo, bật nâng cấp tự động bằng cách chỉnh sửa file /etc/apt/apt.conf.d/10periodic . Ta cần sử dụng sudo vì đây là file cấu hình toàn hệ thống.

sudo nano /etc/apt/apt.conf.d/10periodic 

Thêm dòng sau vào cuối file , sau đó lưu file .

APT::Periodic::Unattended-Upgrade "1"; 

Bước 2 - Download Bản đồ xuất

Trong bước này, ta sẽ chọn và download bản xuất bản đồ.

Để giữ cho mọi thứ gọn gàng và sạch sẽ, bạn nên tạo một folder chuyên dụng để xây dựng mã, xử lý bản đồ, v.v.

mkdir osrm 

Di chuyển vào folder mới.

cd osrm 

Dịch vụ web của ta sẽ dựa trên bản xuất bản đồ từ OpenStreetMap. Có một số cách khả thi để xuất bản đồ.

Tùy chọn đầu tiên là trỏ trình duyệt của bạn đến trang xuất của OpenStreetMap, phóng to khu vực quan tâm và nhấp vào Xuất . (Bạn có thể cần phải sử dụng một trong các nguồn khác nếu tính năng xuất root không hoạt động; API Overpass là một lựa chọn tốt.) Điều này sẽ cho phép bạn lựa chọn chính xác những khu vực nào để đưa vào bản đồ của bạn và nói chung, cắt giảm thời gian tiền xử lý.

Tuy nhiên, có những giới hạn về kích thước của file xuất mà bạn có thể nhận được từ trang web OSRM, vì vậy bạn có thể cần download file xuất được tạo sẵn. Một số dịch vụ, chẳng hạn như GeofabrikMapzen cung cấp xuất khẩu bản đồ cập nhật và sẵn sàng của các quốc gia và các khu vực đô thị được chọn, phù hợp với hầu hết các trường hợp sử dụng.

Cho dù bạn sử dụng phương pháp nào, hãy sao chép URL của file xuất và tải nó xuống Server.

wget -O map.osm url_of_the_export 

Đến đây bạn sẽ có một file có tên map.osm trong folder làm việc của bạn .

Bước 3 - Cài đặt phụ thuộc

Trong bước này, ta sẽ cài đặt các phụ thuộc của OSRM.

OSRM phải được biên dịch từ nguồn, vì vậy trước tiên ta cần cài đặt máy móc xây dựng cần thiết. May mắn là Ubuntu đi kèm với một gói meta tiện lợi có tên là build-essential chứa chuỗi công cụ biên dịch cần thiết. Ngoài ra, ta cần git để lấy mã nguồn OSRM và CMake để tạo hệ thống xây dựng. Lệnh sau sẽ cài đặt cả 3 trong số đó.

sudo apt-get install build-essential git cmake 

OSRM là một phần mềm khá phức tạp và cũng dựa trên một số thư viện. Ta có thể cài đặt các phụ thuộc bằng lệnh sau.

sudo apt-get install libboost-all-dev libtbb-dev liblua5.2-dev libluabind-dev libstxxl-dev libxml2 libxml2-dev libosmpbf-dev libbz2-dev libprotobuf-dev 

Những phụ thuộc này được sử dụng cho nhiều thứ khác nhau. Lua được sử dụng để xác định tập lệnh cấu hình tốc độ tùy chỉnh, ví dụ: xác định rằng trên đường phụ, không có giới hạn, ô tô đi trung bình với tốc độ 80 km / h và trên đường sỏi, tốc độ trung bình là 50 km / h. STXXL là một version của thư viện tiêu chuẩn của C ++, sử dụng không gian đĩa làm bộ nhớ, được sử dụng để thao tác các file lớn. Cache LibXML và Giao thức được sử dụng để tải, ghi và thao tác các file OSM, Boost và TBB được sử dụng để song song hóa và biểu diễn cấu trúc dữ liệu.

Bước 4 - Biên dịch OSRM

Trong bước này, ta sẽ lấy mã nguồn của OSRM và biên dịch nó.

Nhờ thực tế là hệ thống xây dựng của OSRM được lựa chọn là CMake, một khi các phụ thuộc được cài đặt, việc tạo file xây dựng và biên dịch OSRM khá dễ dàng.

Đầu tiên, ta sao chép mã nguồn từ trang của dự án. Dự án bao gồm một số repository , xử lý các chức năng khác nhau. Ta quan tâm đến phần back-end (phần phía server ).

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

Tiếp theo, chuyển vào folder mã.

cd osrm-backend 

Bước tiếp theo là sử dụng CMake để tạo các file bản dựng. Bạn nên xây dựng OSRM trong folder build chuyên dụng trong folder root của mã nguồn, để tránh làm ô nhiễm folder nguồn với các file xây dựng tạm thời.

Tạo một folder xây dựng.

mkdir build 

Di chuyển vào folder xây dựng.

cd build 

Cuối cùng, ta sẽ tạo các file xây dựng bằng cmake . Lệnh này sẽ tạo ra một số folder và Makefiles trong cây folder build .

cmake .. 

Nếu bạn gặp lỗi ở đây, hãy đảm bảo bạn đã bật swap qua hướng dẫn trong yêu cầu .

Tiếp theo, biên dịch và cài đặt OSRM.

sudo make install 

Lưu ý : Quá trình này có thể mất từ 5 đến 10 phút.

Việc xây dựng với sudo là cần thiết ở đây vì mục tiêu cài đặt sẽ sao chép một số file thực thi trong đường dẫn binary của hệ thống, bao gồm một số file ta cần . Cụ thể:

  • osrm-extract sẽ mở file bản đồ và chạy bước xử lý trước đầu tiên trên dữ liệu.
  • osrm-prepare xử lý kết quả của osrm-extract và tính toán thời gian di chuyển cho tất cả các cạnh bản đồ theo một cấu hình tốc độ Lua nhất định.
  • osrm-routed daemon dịch vụ web thực tế, cho phép ta truy vấn khoảng cách và vị trí.

Bước 5 - Cấu hình STXXL

Trong bước này, ta sẽ tạo một file cấu hình cho STXXL.

Trước khi chạy dịch vụ web, ta cần xử lý trước quá trình xuất bản đồ của bạn . Bởi vì ta đã cài đặt các file binary cần thiết trong đường dẫn hệ thống, ta có thể thực hiện việc này từ bất kỳ đâu. Với mục đích của hướng dẫn này, ta sẽ chạy tiền xử lý trong folder root của folder osrm mà ta đã tạo.

Đầu tiên, chuyển đến folder osrm .

cd ~/osrm 

Quá trình xử lý trước bản đồ khá tốn bộ nhớ. Vì lý do này, OSRM sử dụng một thư viện gọi là STXXL để ánh xạ các hoạt động bên trong của nó trên đĩa cứng. STXXL dựa vào file cấu hình có tên .stxxl , nằm trong cùng folder nơi bạn đang chạy phần mềm của bạn , để xác định bao nhiêu dung lượng dành riêng cho cấu trúc dữ liệu STXXL. Tùy thuộc vào dung lượng của Server của ta và kích thước của bản đồ mà ta muốn xử lý, ta cần viết file cấu hình .stxxl phù hợp, phân bổ đủ bộ nhớ cho các hoạt động.

Tạo và mở .stxxl để chỉnh sửa.

nano .stxxl 

Tệp phải chứa một dòng với định dạng disk= path , capacity , access , trong đó path là đường dẫn nơi file phân bổ sẽ được đặt, capacity là dung lượng của file và access là triển khai truy cập file .

Đây là một ví dụ về file .stxxl . Bạn có thể dán .stxxl này vào .stxxl , nhưng có thể cần thay đổi kích thước của file dựa trên bản đồ bạn đang sử dụng và kích thước server của bạn. Xem tài liệu để biết các tùy chọn nâng cao.

disk=/tmp/stxxl,10G,syscall 

Lưu và đóng .stxxl .

Bước 6 - Extract bản đồ

Trong bước này, ta sẽ extract bản đồ.

Bước đầu tiên của quá trình tiền xử lý là extract bản đồ. Lệnh osrm-extract mong đợi đường dẫn xuất bản đồ như một đối số và giả định sự hiện diện của tập lệnh cấu hình tốc độ phù hợp dưới tên profile.lua trong folder làm việc. Cấu hình tốc độ được sử dụng để tìm ra những tuyến đường hiện có được dùng (ví dụ: cấu hình tốc độ cho xe tải có thể cấm một số đường phố).

Phân phối backend OSRM bao gồm một số tập lệnh cấu hình tốc độ mặc định trong folder profiles của repository . Trong hướng dẫn này, ta sẽ sử dụng cấu hình car.lua , tốt cho hầu hết các trường hợp sử dụng

Bởi vì tập lệnh cấu hình tốc độ có thể phụ thuộc vào một số hàm Lua được xác định trong thư viện cấu hình, ta cũng tạo một softlink đến nó trong cùng một folder bằng cách chạy hai lệnh sau.

ln -s osrm-backend/profiles/car.lua profile.lua ln -s osrm-backend/profiles/lib 

map.osm xuất bản đồ của ta được gọi là map.osm , vì vậy tiếp theo, hãy chạy:

osrm-extract map.osm 

Bước này tạo ra một loạt các file trong folder tiền xử lý, bao gồm map.osrm , là dữ liệu đầu vào cho bước tiếp theo.

Bước 7 - Tính toán thời gian di chuyển

Trong bước này, ta sẽ tính toán thời gian di chuyển cho bản đồ.

Bước này được thực hiện bằng lệnh osrm-prepare lệnh này lại sử dụng tập lệnh profile tốc độ để tính toán thời gian di chuyển cho mỗi cạnh của biểu đồ bản đồ. Để thực hiện việc này, hãy chạy lệnh sau.

osrm-prepare map.osrm 

Bước này cũng tạo ra một số file bổ sung cần thiết cho dịch vụ web, mà ta sẽ cài đặt trong phần tiếp theo.

Bước 8 - Chạy và kiểm tra dịch vụ web

Trong bước này, ta sẽ chạy OSRM và kiểm tra xem nó có hoạt động thông qua trình duyệt hay không.

Phần backend OSRM đi kèm với một lệnh cuối cùng, osrm-routed , có thể đọc bản đồ đã xử lý và cho phép truy vấn nó thông qua một API dịch vụ web. Để kiểm tra nó, hãy chạy:

osrm-routed map.osrm 

Bây giờ, bằng cách trỏ trình duyệt của bạn vào http:// your_server_ip :5000 , bây giờ bạn có thể thấy dịch vụ web đang hoạt động. Nó sẽ hiển thị thông báo lỗi như {"status_message":"Query string malformed close to position 0","status":400} vì bạn không sử dụng đúng định dạng truy vấn.

Để thử nghiệm, hãy chọn một tập hợp các vĩ độ và kinh độ trong ranh giới bản đồ của bạn và truy cập URL sau, thay thế latitudelongitude bằng các tọa độ bạn đã chọn.

http://your_server_ip:5000/nearest?loc=latitude,longitude 

Bạn sẽ thấy kết quả JSON tương tự như sau:

{     "name": "street_name",     "mapped_coordinate": [         latitude,         longitude     ],     "status":0 } 

Nếu bạn nhận được thông báo lỗi thay vì thông báo này, có thể bạn đã chọn một tập hợp các tọa độ bên ngoài ranh giới bản đồ hoặc cú pháp truy vấn của bạn có thể sai. Để biết thêm các truy vấn có sẵn, hãy xem API server .

Đến đây bạn có thể dừng osrm-routed bằng cách sử dụng CTRL+C

Bước 9 - Cài đặt Nginx

Trong bước này, ta sẽ cài đặt Nginx để hoạt động với osrm-routed .

Bây giờ ta có một dịch vụ web đang hoạt động, nhưng việc truy vấn nó bằng cách chỉ định cổng là một điều khó khăn. Hơn nữa, nếu ta quyết định cung cấp các bản đồ hoặc bản đồ khác nhau được xử lý với các cấu hình tốc độ khác nhau, ta muốn tránh phải nhớ một tập hợp các cổng.

Nginx là một web server hiệu suất cao cũng có thể hoạt động như một proxy và hoạt động như một cổng cho các dịch vụ web của ta . Cài đặt nó để hoạt động với osrm-routed khá dễ dàng.

Đầu tiên, ta cài đặt Nginx.

sudo apt-get install nginx 

Tiếp theo, ta thêm một file cấu hình cho các dịch vụ Web của ta . Nginx sử dụng hai folder cho các file cấu hình dành riêng cho trang web của bạn : /etc/nginx/sites-available (tất cả các trang web có thể được cung cấp) và /etc/nginx/sites-enabled (tất cả các trang web đang được cung cấp). Cách tiêu chuẩn để thêm một trang web là thêm file cấu hình của nó vào sites-available , sau đó liên kết nó một cách tượng trưng trong sites-enabled .

Vì vậy, trước tiên, ta sẽ thêm một cấu hình fime cho OSRM vào sites-available .

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

Tệp cấu hình của ta sẽ xác định một hướng upstream trỏ đến dịch vụ web của ta và một server lắng nghe trên cổng 80 và chuyển hướng một tập hợp con các truy vấn đến ngược dòng của ta .

Dán file cấu hình sau vào osrm.conf . Bạn cần chỉ định hai biến, được đánh dấu bên dưới: IP server của bạn và một đường dẫn (sẽ được sử dụng để truy cập dịch vụ web, như trong http:// your_server_ip / example_path ).

upstream osrm {     server 0.0.0.0:5000; }  server {     listen 80;     server_name your_server_ip;      location /example_path {         proxy_pass http://osrm/;         proxy_set_header Host $http_host;     } } 

Khi bạn đã lưu file , hãy chuyển đến folder sites-enabled .

cd /etc/nginx/sites-enabled 

Sau đó, ta có thể liên kết file osrm.conf .

sudo ln -s /etc/nginx/sites-available/osrm.conf 

Tiếp theo, reload cấu hình.

sudo service nginx reload 

Cuối cùng, khởi động lại Nginx.

sudo service nginx restart 

Bây giờ chạy osrm-routed .

osrm-routed ~/osrm/map.osrm 

Bạn có thể truy cập dịch vụ Web bằng cách trỏ trình duyệt của ta tới http:// your_server_ip / example_path . Lưu ý bạn không cần chỉ định cổng nữa. Đến đây bạn có thể dừng osrm-routed bằng cách sử dụng CTRL+C

Bằng cách thêm nhiều stream và vị trí, và bằng cách chạy osrm-routed bằng cách chỉ định cổng có -p hoặc --port ta có thể chạy nhiều version hơn của dịch vụ Web và liên kết chúng với các đường dẫn khác nhau. Hướng dẫn này sẽ không đi vào chi tiết về điều này, nhưng bạn có thể xem tài liệu backend OSRM để biết thêm thông tin.

Bước 10 - Cài đặt và cấu hình người giám sát

Trong bước này, ta sẽ cài đặt và cấu hình Trình giám sát để giữ cho Nginx chạy, cho phép dịch vụ web của ta khả dụng thông qua khởi động lại.

Nginx hiện hoạt động như một cổng cho dịch vụ web của ta . Tuy nhiên, ta đã khởi động nó theo cách thủ công, vì vậy nếu ta đăng xuất khỏi hệ thống, nó sẽ ngừng chạy. Để làm cho các dịch vụ web của ta tồn tại thông qua khởi động lại và nói chung, để làm cho chúng phục hồi sau những lỗi có thể xảy ra, ta có thể sử dụng một công cụ có tên là Người giám sát .

Người giám sát là một hệ thống kiểm soát quá trình chủ yếu đảm nhận việc giữ cho các dịch vụ hoạt động tốt. Cài đặt nó là khá dễ dàng. Đầu tiên, ta cài đặt Supervisor.

sudo apt-get install supervisor 

Sau đó, ta thêm dịch vụ web của bạn vào group dịch vụ do Người giám sát kiểm soát bằng cách thêm file cấu hình mới.

sudo nano /etc/supervisor/conf.d/osrm.conf 

Tệp cấu hình phải chứa định nghĩa của biểu mẫu này cho mọi dịch vụ web mà ta muốn giám sát và tên chương trình phải khác nhau đối với mọi dịch vụ web.

Dán cấu hình bên dưới vào file osrm.conf , sau đó lưu và đóng nó.

[program:osrm] directory=/home/osrm/osrm command=/usr/local/bin/osrm-routed -p 5000 map.osrm user=osrm 

Những gì cấu hình này nói là ta muốn user osrm giữ cho lệnh /usr/local/bin/osrm-routed -p 5000 map.osrm đang chạy và nó phải được chạy từ folder được chỉ định, /home/osrm/osrm (đó là cách ta có thể chỉ định map.osrm làm đường dẫn tương đối trong lệnh). Trong ví dụ này, ta chỉ định cổng cho osrm-routed bằng -p để nhiều chương trình có thể được thêm vào bằng cách tăng cổng.

Sau khi bạn lưu file , hãy khởi động lại Người giám sát.

sudo service supervisor restart 

Sau đó, ta có thể kiểm tra trạng thái của dịch vụ web bằng lệnh:

sudo supervisorctl status 

Nếu mọi thứ đều ổn, ta sẽ thấy một cái gì đó tương tự như thế này

osrm          RUNNING    pid 12698, uptime 0:00:40 

Điều này nghĩa là dịch vụ web của ta đang chạy. Vì ngược dòng trỏ đến cổng 5000 nên Nginx sẽ có thể phân phát nó trên đường dẫn được chỉ định.

Kết luận

Hướng dẫn này nói về việc cài đặt phần backend OSRM, nhưng tài liệu khác có sẵn tại trang này .

Tại thời điểm viết bài, phần kết thúc OSRM vẫn đang trong giai đoạn thử nghiệm và có một số hạn chế được mã hóa cứng về số lượng vị trí có thể được đưa vào một truy vấn (hiện tại là 100, ảnh hưởng đến API ma trận thời gian). Những hạn chế như vậy có thể bị vô hiệu hóa, nhưng cần phải sửa đổi mã nguồn của osrm-routed để làm điều đó.

Tùy thuộc vào kích thước bản đồ của bạn và dung lượng của Server, bạn có thể cần phân bổ file swap lớn hơn hoặc tăng dung lượng trong file cấu hình .stxxl để dịch vụ web hoạt động bình thường. Bạn có thể cần kiểm tra một vài cấu hình để xem cấu hình nào phù hợp nhất với cài đặt của bạn .


Tags:

Các tin liên quan

Cách cài đặt Linux Dash trên Ubuntu 14.04
2015-02-18
Cách bảo vệ server Linux của bạn chống lại lỗ hổng GHOST
2015-01-28
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 14.04
2015-01-23
Cách cấu hình xác thực dựa trên khóa SSH trên server FreeBSD
2015-01-14
Giới thiệu so sánh về FreeBSD cho người dùng Linux
2015-01-14
Tại sao bạn có thể không muốn chạy mail server của riêng mình
2014-12-11
Cách kiểm tra lưu lượng mạng trong server LAMP với sysdig trên CentOS 7
2014-12-05
Giới thiệu về quyền của Linux
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Giới thiệu về Linux Terminal
2014-11-14