零、先决条件
- 磁盘空间: 几十GB到几百GB(取决于PBF文件大小和导入后的数据库大小)。
- 内存 (RAM): 建议至少 16GB,32GB+ 更佳,尤其是对于大区域数据导入。
- CPU: 多核CPU有助于加速导入和渲染。
- SSD: 强烈推荐使用SSD,对导入和查询性能有巨大提升。
一、准备主机环境
# 假设 PBF 文件将放在 /data/openstreetmap-tile-server/
# 假设 PostgreSQL 数据将持久化到 /data/openstreetmap-tile-server/pgdata/
sudo mkdir -p /data/openstreetmap-tile-server/pgdata
# 示例:
sudo mv /data/openstreetmap-tile-server/china-latest.osm.pbf /data/openstreetmap-tile-server/china-latest.osm.pbf
# 如果遇到权限问题,可以尝试 (999 通常是容器内 postgres 用户的 UID):
sudo chown -R 999:999 /data/openstreetmap-tile-server/pgdata
# 或者更宽松的权限 (不推荐生产环境):
sudo chmod -R 777 /data/openstreetmap-tile-server/pgdata
二、数据导入 (使用 Docker)
此步骤将 OSM PBF 数据导入到 overv/openstreetmap-tile-server 镜像内置的 PostGIS 数据库中。
docker run –rm \\
–name osm-importer-china \\
-e THREADS=6 \\
-e OSM2PGSQL_EXTRA_ARGS="–slim –drop -C 24000 –number-processes 6" \\
-v /data/openstreetmap-tile-server/china-latest.osm.pbf:/data/region.osm.pbf:ro \\
-v /data/openstreetmap-tile-server/pgdata:/var/lib/postgresql/14/main \\
–shm-size="2g" \\
overv/openstreetmap-tile-server:2.3.0 \\
import
参数解释:
- –rm: 容器停止后自动删除,因为此容器仅用于一次性导入。
- –name osm-importer-china: 容器名称。
- -e THREADS=6: 设置渲染和可能的 osm2pgsql 线程数 (根据CPU核心调整)。
- -e OSM2PGSQL_EXTRA_ARGS="–slim –drop -C 24000 –number-processes 6":
- –slim: 使用 slim 模式导入 (必须用于大区域)。
- –drop: 如果是重新导入,则删除旧的与样式相关的表。首次导入可省略。
- -C 24000: osm2pgsql 使用的内存缓存 (MB),根据可用RAM调整 (例如,系统内存的 70-80%)。
- –number-processes 6: osm2pgsql 并行处理进程数。
- -v /data/openstreetmap-tile-server/china-latest.osm.pbf:/data/region.osm.pbf:ro: 将主机 PBF 文件只读挂载到容器。
- -v /data/openstreetmap-tile-server/pgdata:/var/lib/postgresql/14/main: 将主机目录挂载为 PostgreSQL 数据持久化目录。注意: 14 是 PostgreSQL 版本,可能随镜像更新而变。
- –shm-size="2g": 增加共享内存大小,有益于 PostgreSQL 和 osm2pgsql。
- overv/openstreetmap-tile-server: 使用的 Docker 镜像。
- import: 告知镜像执行导入操作。
监控导入:
docker logs -f osm-importer-china
导入过程会非常耗时(数小时至数天,取决于数据大小和硬件)。
三、启动瓦片服务并暴露 PostGIS
导入完成后,启动一个新的容器来提供瓦片服务,并将 PostGIS 端口暴露出来。
docker run -d \\
–name osm-tile-server-china-service \\
-p 8080:80 \\
-p 54321:5432 \\
-e THREADS=6 \\
-v /data/openstreetmap-tile-server/pgdata:/var/lib/postgresql/14/main \\
–shm-size="1g" \\
overv/openstreetmap-tile-server:2.3.0 \\
run
参数解释:
- -d: 后台运行容器。
- –name osm-tile-server-china-service: 服务容器名称。
- -p 8080:80: 将主机的 8080 端口映射到容器的 80 端口 (瓦片服务)。
- -p 54321:5432: 将主机的 54321 端口映射到容器的 5432 端口 (PostgreSQL)。可按需更改主机端口 54321。
- -e THREADS=6: 设置渲染线程数。
- -v /data/openstreetmap-tile-server/pgdata:/var/lib/postgresql/14/main: 挂载之前导入并持久化的 PostgreSQL 数据。**注意这里没有 **:ro,因为 PostgreSQL 服务启动时可能需要写权限。
- –shm-size="1g": 为服务容器分配共享内存。
- overv/openstreetmap-tile-server: 使用的 Docker 镜像。
- run: 告知镜像启动服务。
四、访问服务
renderer 用户通常只有对 OSM 数据表的读取权限。
- 主机 (Host): localhost (或 127.0.0.1)
- 端口 (Port): 54321 (或你在上面命令中设置的主机端口)
- 数据库名 (Database Name): gis
- 用户名 (Username): renderer
- 密码 (Password): renderer
评论前必须登录!
注册