云计算百科
云计算领域专业知识百科平台

Docker 部署 OpenStreetMap 瓦片服务器

零、先决条件

  • 安装 Docker: 确保你的系统已安装并运行 Docker。
  • 下载 OSM PBF 数据: 从 Geofabrik 或其他来源下载你需要的区域的 .osm.pbf 文件。例如,中国最新数据:china-latest.osm.pbf。
  • 足够的系统资源:
    • 磁盘空间: 几十GB到几百GB(取决于PBF文件大小和导入后的数据库大小)。
    • 内存 (RAM): 建议至少 16GB,32GB+ 更佳,尤其是对于大区域数据导入。
    • CPU: 多核CPU有助于加速导入和渲染。
    • SSD: 强烈推荐使用SSD,对导入和查询性能有巨大提升。
  • 一、准备主机环境

  • 创建数据存储目录: 在主机上创建一个目录用于存放下载的 PBF 文件和持久化的 PostgreSQL 数据。
  • # 假设 PBF 文件将放在 /data/openstreetmap-tile-server/
    # 假设 PostgreSQL 数据将持久化到 /data/openstreetmap-tile-server/pgdata/
    sudo mkdir -p /data/openstreetmap-tile-server/pgdata

  • 放置 PBF 文件: 将下载的 .osm.pbf 文件移动到指定目录。
  • # 示例:
    sudo mv /data/openstreetmap-tile-server/china-latest.osm.pbf /data/openstreetmap-tile-server/china-latest.osm.pbf

  • (可选)设置目录权限: 根据系统配置,可能需要调整 pgdata 目录的权限,以确保 Docker 容器内的 postgres 用户有权写入。
  • # 如果遇到权限问题,可以尝试 (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: 告知镜像启动服务。

    四、访问服务

  • 访问地图瓦片服务: 在浏览器中打开 http://localhost:8080 (或 http://<你的主机IP>:8080)。 首次加载瓦片可能较慢,因为需要实时渲染和缓存。
  • 访问 PostGIS 数据库: 使用 PostGIS 客户端 (如 psql, DBeaver, pgAdmin) 连接:
  • renderer 用户通常只有对 OSM 数据表的读取权限。

    • 主机 (Host): localhost (或 127.0.0.1)
    • 端口 (Port): 54321 (或你在上面命令中设置的主机端口)
    • 数据库名 (Database Name): gis
    • 用户名 (Username): renderer
    • 密码 (Password): renderer
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Docker 部署 OpenStreetMap 瓦片服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!