linux(ubuntu)部署GraphHopper-9.1
Linux(Ubuntu)部署GraphHopper 9.1
记录下部署过程,该过程针对9.1版本,其它版本是否可用,请自行测试
使用的编译好的jar包进行部署的,也可以选择下载源码编译部署,这里没再写,由于使用maven去编译时,需要下载一些第三方的包,部分包可能需要科学上网才能下载成功,懒得弄了,自己源码没能折腾完就不记录了,免得误人子弟。
1. GraphHopper 简介
GraphHopper 是一个高效的开源路由引擎,广泛用于从 OpenStreetMap 数据中进行路径规划。它支持多种交通方式,如汽车、自行车、步行等,并提供多种路径计算优化算法(如 Contraction Hierarchies)。GraphHopper 在导航、物流优化、GIS 应用等领域应用广泛,能够处理复杂的路网数据和转弯限制等问题。它不仅可以作为独立的路径规划服务运行,还能集成到更大的系统中,支持 REST API 请求,实现快速、高效的路径查询。
2. 使用编译好的 JAR 发布 GraphHopper
如果不需要编译源码,可以直接使用 GraphHopper 官方发布的预编译 JAR 包,快速进行部署。以下是具体步骤。
1. 安装必要的依赖项
首先,确保系统中已经安装了 Java 17 或更高版本:
sudo apt update
sudo apt install openjdk-17-jdk
验证 Java 是否安装成功:
java -version
2. 下载编译好的 GraphHopper JAR 包
前往 GraphHopper Releases 页面,下载最新的稳定版本(如 graphhopper-web-9.1.jar
)。或者直接使用 wget
命令下载到指定的 /usr/local/graphhopper
目录:
sudo wget https://github.com/graphhopper/graphhopper/releases/download/9.1/graphhopper-web-9.1.jar -O /usr/local/graphhopper/graphhopper-web-9.1.jar
3. 下载 OpenStreetMap 数据
GraphHopper 使用 OpenStreetMap (OSM) 数据来进行路径规划。可以从 Geofabrik 下载特定区域的 .osm.pbf
数据到指定的 /usr/local/graphhopper
目录。例如,下载北京的数据:
wget https://download.geofabrik.de/asia/china/beijing-latest.osm.pbf -O /usr/local/graphhopper/beijing-latest.osm.pbf
4. 创建配置文件
配置文件与jar包的版本要一致,部分属性在版本更迭中有改变。
自己创建config.yml文件
在 /usr/local/graphhopper
目录中创建 config.yml
文件
nano /usr/local/graphhopper/config.yml
内容如下:
graphhopper:
# 你自己下载的pbf文件名称
datareader.file: "xxx.osm.pbf"
graph.location: graph-cache
profiles:
- name: car
custom_model_files: [car.json]
profiles_ch:
- profile: car
profiles_lm: []
graph.encoded_values: car_access, car_average_speed
prepare.min_network_size: 200
prepare.subnetworks.threads: 1
routing.non_ch.max_waypoint_distance: 1000000
import.osm.ignored_highways: footway,cycleway,path,pedestrian,steps
graph.dataaccess.default_type: RAM_STORE
server:
application_connectors:
- type: http
port: 8989
bind_host: 0.0.0.0
max_request_header_size: 50k
request_log:
appenders: []
admin_connectors:
- type: http
port: 8990
bind_host: 0.0.0.0
logging:
appenders:
- type: file
time_zone: UTC
current_log_filename: logs/graphhopper.log
log_format: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
archive: true
archived_log_filename_pattern: ./logs/graphhopper-%d.log.gz
archived_file_count: 30
never_block: true
- type: console
time_zone: UTC
log_format: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
loggers:
"com.graphhopper.osm_warnings":
level: DEBUG
additive: false
appenders:
- type: file
currentLogFilename: logs/osm_warnings.log
archive: false
logFormat: '[%level] %msg%n'
按 Ctrl + O
保存,Ctrl + X
退出
graph.flag_encoders
: 指定编码器类型,比如car
、bike
、foot
。datareader.file
: 指定下载的 OSM 数据文件的路径。graph.location
: GraphHopper 缓存图数据的路径。port
: GraphHopper Web 服务的端口。
该配置文件指定了 OSM 数据文件、图数据的存储位置、交通方式(如 car
)以及 Web 服务监听的端口(默认 8989)。
在源码中获取
解压后可以看到config-example.yml
文件,将其改为config.yml
,然后按照前面的设置即可。
注意: 上述涉及的各个文件,都可以提前下载,然后使用指令或者可视化工具将文件拷贝到指定目录(可视化工具 Termius))
5. 导入数据并启动服务
使用以下命令导入 OSM 数据并启动服务:
java -jar graphhopper-web-9.1.jar import config.yml
数据导入完成后,使用以下命令启动 GraphHopper 服务:
java -jar graphhopper-web-9.1.jar server config.yml
启动成功后,GraphHopper 将在 http://<服务器IP>:8989
上提供 Web 服务,可以通过浏览器访问它并测试路径规划功能。
3. 设置 GraphHopper 为系统服务
为了使 GraphHopper 在系统启动时自动运行,并且以后台服务的方式持续运行,可以将其设置为 systemd
服务。
1. 创建服务文件
在 /etc/systemd/system/
目录下创建一个新的服务文件 graphhopper.service
:
sudo nano /etc/systemd/system/graphhopper.service
在文件中添加以下内容:
[Unit]
# 指定启动命令
Description=GraphHopper Routing Engine
After=network.target
[Service]
ExecStart=/usr/bin/java -jar /usr/local/graphhopper/graphhopper-web-9.1.jar server /usr/local/graphhopper/config.yml
# 指定工作目录
WorkingDirectory=/usr/local/graphhopper
# 指定运行服务的用户 (请替换为实际的用户名)
User=yourusername
# 设置重启策略
Restart=on-failure
[Install]
WantedBy=multi-user.target
- User: 需要替换为运行该服务的实际用户。
- ExecStart: 指定 GraphHopper JAR 包和配置文件的路径。
2. 启用并启动服务
执行以下命令使 GraphHopper 服务在系统启动时自动运行,并立即启动该服务:
sudo systemctl daemon-reload
sudo systemctl enable graphhopper
sudo systemctl start graphhopper
3. 检查服务状态
使用以下命令检查 GraphHopper 服务是否成功启动:
sudo systemctl status graphhopper
如果启动成功,将看到类似以下的输出:
graphhopper.service - GraphHopper Routing Engine
Loaded: loaded (/etc/systemd/system/graphhopper.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-10-19 12:00:00 UTC; 2min ago
Main PID: 12345 (java)
Tasks: 20 (limit: 4915)
Memory: 200.0M
CPU: 5.6s
CGroup: /system.slice/graphhopper.service
└─12345 /usr/bin/java -jar /usr/local/graphhopper/graphhopper-web-9.1.jar server /usr/local/graphhopper/config.yml
4. 调试和日志
如需查看服务日志,可以使用以下命令:
sudo journalctl -u graphhopper -f
如果需要停止或重启服务,可以使用以下命令:
sudo systemctl stop graphhopper
sudo systemctl restart graphhopper
访问效果: