专属域名
文档搜索
轩辕助手
Run助手
邀请有礼
返回顶部
快速返回页面顶部
收起
收起工具栏
轩辕镜像 官方专业版
轩辕镜像
专业版
轩辕镜像 官方专业版
轩辕镜像
专业版
首页个人中心搜索镜像

交易
充值流量我的订单
工具
提交工单页面收录一键安装
Npm 源Pip 源Homebrew 源
帮助
常见问题轩辕镜像免费版
其他
关于我们网站地图
热门搜索:
mbtileserver

consbio/mbtileserver

consbio

基于Go的轻量级服务器,用于提供mbtiles格式的地图瓦片服务,支持XYZ瓦片、TileJSON端点、预览地图和ArcGIS API,适合在资源有限的云环境部署。

2 次收藏下载次数: 0状态:社区镜像维护者:consbio仓库类型:镜像最近更新:3 年前
让 AI 帮你使用轩辕镜像? · 展开查看说明

如果你用 DeepSeek、元宝AI、Copilot 等 AI 代为编写轩辕镜像的 docker pull、修改 compose 镜像地址,或排查拉取失败等问题,请让 AI 先读规则再动手,只要在 AI 对话里直接发送下面这句话即可:

生成 docker pull、修改 compose 的 image,或排查拉取失败前,请先阅读并严格遵守 https://xuanyuan.cloud/agents.md 中的规则。

国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

轩辕镜像,让镜像更快,让人生更轻。点击查看
中文简介
标签下载
镜像标签列表与下载命令
轩辕镜像,让镜像更快,让人生更轻。点击查看

mbtileserver

基于Go的轻量级服务器,用于提供https://github.com/mapbox/mbtiles-spec%E6%A0%BC%E5%BC%8F%E5%AD%98%E5%82%A8%E7%9A%84%E5%9C%B0%E5%9B%BE%E7%93%A6%E7%89%87%E6%9C%8D%E5%8A%A1%E3%80%82

!https://github.com/consbio/mbtileserver/actions/workflows/test.yml/badge.svg ![覆盖率状态]([***] https://godoc.org/github.com/consbio/mbtileserver?status.svg](http://godoc.org/github.com/consbio/mbtileserver) https://goreportcard.com/badge/github.com/consbio/mbtileserver](https://goreportcard.com/report/github.com/consbio/mbtileserver)

当前支持mbtiles规范1.0版本定义的png、jpg、webp和pbf(矢量瓦片)格式瓦片集。瓦片遵循基于Web Mercator坐标系统的XYZ瓦片方案提供服务。不再支持UTF8 Grids。

除瓦片级访问外,还提供:

  • 每个瓦片集的TileJSON 2.1.0端点,包含mbtiles文件的完整元数据
  • 用于浏览每个瓦片集的预览地图
  • 最小化的ArcGIS瓦片地图服务API

我们已在AWS t2.nano虚拟机上成功托管多个瓦片集,无性能问题。

目标

  • 为mbtiles格式存储的地图瓦片提供Web瓦片API
  • 高性能
  • 可在资源有限的云托管机器(内存和CPU受限)上运行
  • 易于安装和操作

支持的Go版本

需要Go 1.16+。

mbtileserver使用Go模块,遵循Go 1.16及以上的标准实践。

安装

可通过以下命令安装:

sh
$ go get github.com/consbio/mbtileserver

这将创建并安装名为mbtileserver的可执行文件。

使用方法

命令行参数

从仓库根目录运行(需确保$GOPATH/bin在$PATH中):

$ mbtileserver --help
Serve tiles from mbtiles files.

Usage:
  mbtileserver [flags]

Flags:
  -c, --cert string            X.509 TLS证书文件名。如果提供,将用于启用服务器SSL
  -d, --dir string             包含mbtiles文件的目录。可使用逗号分隔的多个目录列表(默认"./tilesets")
      --disable-preview        禁用每个瓦片集的地图预览(默认启用)
      --disable-svc-list       禁用服务列表端点(默认启用)
      --disable-tilejson       禁用每个瓦片集的TileJSON端点(默认启用)
      --domain string          服务器域名。仅用于AutoTLS
      --dsn string             Sentry DSN
      --enable-arcgis          启用ArcGIS Mapserver端点
      --enable-fs-watch        启用通过监控文件系统重新加载瓦片集
      --enable-reload-signal   启用通过HUP信号优雅重启服务器进程
      --generate-ids           自动生成瓦片集ID,而非使用相对路径
  -h, --help                   帮助信息
  -k, --key string             TLS私钥
  -p, --port int               服务器端口。如果使用--cert或--tls选项,默认443,否则默认8000(默认-1)
  -r, --redirect               将HTTP重定向到HTTPS
      --root-url string        服务端点的根URL(默认"/services")
  -s, --secret-key string      用于HMAC请求认证的共享密钥
      --tiles-only             仅启用瓦片端点(等同于--disable-svc-list --disable-tilejson --disable-preview)
  -t, --tls                    通过Let's Encrypt自动获取TLS证书
  -v, --verbose                详细日志

托管瓦片只需将mbtiles文件放入tilesets目录并启动服务器即可。

瓦片集目录可包含子目录,这些将转换为相应的URL:
<tile_dir>/foo/bar/baz.mbtiles将可通过/services/foo/bar/baz访问。

如果提供--generate-ids,瓦片集ID将使用每个瓦片集路径的SHA1哈希自动生成。默认情况下,瓦片集ID基于使用--dir提供的基础目录的相对路径。

需要移除、修改或添加新瓦片集时,只需重启服务器进程或使用以下重新加载方法。

如果提供有效的Sentry DSN,警告、错误、致命错误和恐慌将报告给Sentry。

如果提供redirect选项,服务器还会监听80端口并将请求重定向到443端口。

如果提供--tls选项,将自动代表您接受Let's Encrypt服务条款。请在此查看条款。证书缓存在执行mbtileserver的目录下创建的.certs文件夹中。请确保该文件夹可由mbtileserver进程写入,否则会出错。证书在服务器收到第一个请求时才会请求。建议启动后通过访问https://<hostname>/services并观察服务器日志确保证书正确处理。常见错误包括Let's Encrypt无法访问您提供的域名。localhost或仅限内部的域名无效。

如果提供--cert或--tls,默认端口为443。

环境变量

也可使用环境变量代替命令行参数,这在Docker部署中更有用。以下变量可用:

  • PORT(对应--port)
  • TILE_DIR(对应--dir)
  • GENERATE_IDS(对应--generate-ids)
  • ROOT_URL(对应--root-url)
  • DOMAIN(对应--domain)
  • TLS_CERT(对应--cert)
  • TLS_PRIVATE_KEY(对应--key)
  • HMAC_SECRET_KEY(对应--secret-key)
  • AUTO_TLS(对应--tls)
  • REDIRECT(对应--redirect)
  • DSN(对应--dsn)
  • VERBOSE(对应--verbose)

示例:

$ PORT=7777 TILE_DIR=./path/to/your/tiles VERBOSE=true mbtileserver

在docker-compose.yml中:

yaml
mbtileserver:
  ...
  environment:
    PORT: 7777
    TILE_DIR: "./path/to/your/tiles"
    VERBOSE: true
  entrypoint: mbtileserver
  ...

重新加载

使用信号重新加载

mbtileserver可选择支持优雅重新加载(不中断任何进行中的请求)。此功能需通过--enable-reload-signal标志启用。启用后,可通过向服务器进程发送HUP信号触发重新加载:

$ kill -HUP <pid>

重新加载服务器将使其检测瓦片目录的变化,添加新瓦片集并移除不再存在的瓦片集。

使用文件系统监控重新加载

mbtileserver可选择通过监控文件系统变化支持单个瓦片集的重新加载。此功能需通过--enable-fs-watch标志启用。

服务器启动时,-d/--dir指定的所有目录及其当时存在的子目录将被监控瓦片集变化。

正在更新的现有瓦片集在磁盘文件更新时会被锁定。这将导致对该瓦片集的传入请求最多停滞30秒,一旦瓦片集完全更新并解锁就会返回。如果瓦片集更新超过30秒,将返回HTTP 503错误,直到瓦片集完全更新并解锁。

在极高请求量下,文件首次修改到检测到修改(并锁定瓦片集)之间的请求可能会遇到错误。

警告:不要在服务器运行时移除顶级监控目录。
警告:不要在服务器运行时在监控目录内创建或删除子目录。
警告:不要直接在监控目录中生成瓦片。应在单独目录中创建,完成后复制到监控目录。

与反向代理一起使用

可在mbtileserver前使用反向代理拦截传入请求、提供TLS等。

我们在各种项目的生产环境中使用过Caddy和NGINX,通常在需要代理到其他后端服务时使用。

为确保正确的请求URL传递给mbtileserver,使TileJSON和地图预览端点正常工作,请确保反向代理发送以下头:

  • 协议(HTTP/HTTPS):X-Forwarded-Proto、X-Forwarded-Protocol或X-Url-Scheme以设置请求协议;或X-Forwarded-Ssl自动设置为HTTPS
  • 主机:设置Host和X-Forwarded-Host

Caddy v2示例

对于本地运行在8000端口的mbtileserver,在域名配置块中添加:

<domain_name> {
  route /services* {
    reverse_proxy localhost:8000
  }
}

根据瓦片集内容变化频率,可在route块中添加缓存控制头。例如,防止客户端缓存瓦片超过1小时:

  route /services* {
    header Cache-Control "public, max-age=3600, must-revalidate"
    reverse_proxy localhost:8000
  }

NGINX示例

对于本地运行在8000端口的mbtileserver,在server块中添加:

nginx
server {
   <其他配置选项>

    location /services {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://localhost:8000;
    }
}

Docker部署

拉取镜像

从GitHub Packages拉取最新镜像:

$ docker pull ghcr.io/consbio/mbtileserver:latest

本地构建镜像

构建本地Docker镜像(命名为mbtileserver):

$ docker build -t mbtileserver -f Dockerfile .

运行容器

在8080端口运行容器,瓦片集位于<host tile dir>。默认情况下,容器内mbtileserver运行在8000端口。

$ docker run --rm -p 8080:8000 -v <host tile dir>:/tilesets ghcr.io/consbio/mbtileserver

可传递额外命令行参数,例如使用证书使服务器支持HTTPS。以下示例使用https://github.com/FiloSottile/mkcert%E7%94%9F%E6%88%90%E7%9A%84%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%EF%BC%8C%E5%B9%B6%E5%90%AF%E7%94%A8%E8%87%AA%E5%8A%A8%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%88%E4%BD%BF%60mbtileserver%60%E5%90%8C%E6%97%B6%E7%9B%91%E5%90%AC80%E7%AB%AF%E5%8F%A3%E5%B9%B6%E8%87%AA%E5%8A%A8%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0443%EF%BC%89%EF%BC%9A

$ docker run --rm -p 80:80 -p 443:443 -v <host tile dir>:/tilesets -v <host cert dir>:/certs/ ghcr.io/consbio/mbtileserver -c /certs/localhost.pem -k /certs/localhost-key.pem -p 443 --redirect

使用docker-compose

通过docker-compose运行:

$ docker-compose up -d

默认docker-compose.yml配置mbtileserver连接主机8080端口,并使用./mbtiles/testdata文件夹作为瓦片集目录。可使用自定义docker-compose.override.yml或环境特定文件进行配置。

重新加载容器内服务器

$ docker exec -it mbtileserver sh -c "kill -HUP 1"

规格

  • 期望mbtiles文件遵循https://github.com/mapbox/mbtiles-spec1.0%E7%89%88%E6%9C%AC%EF%BC%8C%E6%8E%A8%E8%8D%901.1%E7%89%88%E6%9C%AC
  • 实现https://github.com/mapbox/tilejson-spec

创建瓦片

可使用多种工具创建mbtiles文件。我们使用以下工具创建与mbtileserver兼容的瓦片:

  • TileMill(图像瓦片)
  • https://github.com/mapbox/tippecanoe%EF%BC%88%E7%9F%A2%E9%87%8F%E7%93%A6%E7%89%87%EF%BC%89
  • https://github.com/consbio/pymbtiles%EF%BC%88Python%E5%88%9B%E5%BB%BA%E7%9A%84%E7%93%A6%E7%89%87%EF%BC%89
  • https://github.com/consbio/tpkutils%EF%BC%88%E4%BB%8EArcGIS%E7%93%A6%E7%89%87%E5%8C%85%E8%BD%AC%E6%8D%A2%E7%9A%84%E5%9B%BE%E5%83%8F%E7%93%A6%E7%89%87%EF%BC%89

每个mbtiles文件的根名称成为下文使用的"tileset_id"。

XYZ瓦片API

mbtileserver的主要用途是作为XYZ瓦片主机。

瓦片通过以下URL提供:
/services/<tileset_id>/tiles/{z}/{x}/{y}.<format>

其中<format>根据瓦片集数据类型为png、jpg、webp或pbf。

TileJSON API

mbtileserver自动为每个服务创建TileJSON端点,位于/services/<tileset_id>。TileJSON使用与传入请求相同的协议和域名;--domain设置不影响自动生成的URL。

此API提供mbtiles文件中metadata表的大部分元素,以及从瓦片数据自动推断的其他元素。

例如,http://localhost/services/states_outline返回:

json
{
  "bounds": [
    -179.23108,
    -14.601813,
    179.85968,
    71.441055
  ],
  "center": [
    0.314297,
    28.419622,
    1
  ],
  "credits": "US Census Bureau",
  "description": "States",
  "format": "png",
  "id": "states_outline",
  "legend": "[{\"elements\": [{\"label\": \"\", \"imageData\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAGFJREFUOI3tlDEOgEAIBClI5kF+w0fxwXvQdjZywcZEtDI31YaQgWrdPsYzAPFGJCmmEAhJGzCash0wSVE/HHnlKcDMfrPXYgmXcAl/JswK6lCrz89BdGVm1+qrH0bbWDgA3WwmgzD8ueEAAAAASUVORK5CYII=\"}], \"name\": \"tl_2015_us_state\"}]",
  "map": "http://localhost/services/states_outline/map",
  "maxzoom": 4,
  "minzoom": 0,
  "name": "states_outline",
  "scheme": "xyz",
  "tags": "states",
  "tilejson": "2.1.0",
  "tiles": [
    "http://localhost/services/states_outline/tiles/{z}/{x}/{y}.png"
  ],
  "type": "overlay",
  "version": "1.0.0"
}

地图预览

mbtileserver自动为每个瓦片集创建地图预览页面,位于/services/<tileset_id>/map。

当前图像瓦片使用Leaflet,矢量瓦片使用Mapbox GL JS。

ArcGIS API

项目提供mbtiles文件中瓦片的最小化ArcGIS瓦片地图服务API。

通过--enable-arcgis标志启用。

这应足以用于在线平台如Data Basin。由于ArcGIS API依赖mbtiles文件中不常见的属性,某些方面使用最小信息填充。

此API不旨在用于更全功能的ArcGIS应用(如ArcGIS Desktop)。

可用端点:

  • 服务信息:http://localhost:8000/arcgis/rest/services/<tileset_id>/MapServer
  • 图层信息:http://localhost:8000/arcgis/rest/services/<tileset_id>/MapServer/layers
  • 瓦片:http://localhost:8000/arcgis/rest/services/<tileset_id>/MapServer/tile/0/0/0

请求授权

通过-s/--secret-key或设置HMAC_SECRET_KEY环境变量提供密钥,将限制所有服务器端点和瓦片请求的访问。只有提供使用相同密钥创建的加密签名的请求才会被处理。例如,应用服务器可向授权客户端提供短期令牌,客户端使用该令牌访问特定服务的瓦片。

签名自创建日期起15分钟内有效,防止暴露或泄露的签名在长时间内有用。

创建签名

签名是使用SHA1算法的URL安全base64编码HMAC哈希。哈希密钥是从随机生成的盐和密钥字符串创建的SHA1密钥。哈希负载是哈希创建

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

轩辕镜像加速拉取命令点我查看更多 mbtileserver 镜像标签

docker pull docker.xuanyuan.run/consbio/mbtileserver:<标签>

使用方法:

  • 登录认证方式
  • 免认证方式

DockerHub 原生拉取命令

docker pull consbio/mbtileserver:<标签>

更多 mbtileserver 镜像推荐

consbio/mbgl-renderer logo

consbio/mbgl-renderer

consbio
使用Mapbox GL生成静态地图图像的工具,支持命令行、HTTP接口和NodeJS API,兼容栅格/矢量瓦片及本地mbtiles文件,适用于报告或下载的静态地图生成,当前依赖不再维护的NodeJS 10绑定,处于维护模式。
2 次收藏1万+ 次下载
4 年前更新

查看更多 mbtileserver 相关镜像

轩辕镜像配置手册

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式

Docker 配置

登录仓库拉取

通过 Docker 登录认证访问私有仓库

用 AI 使用轩辕镜像

发给 Cursor、ChatGPT、豆包等 AI 的说明文档

专属域名拉取

无需登录使用专属域名

K8s Containerd

Kubernetes 集群配置 Containerd

K3s

K3s 轻量级 Kubernetes 镜像加速

Dev Containers

VS Code Dev Containers 配置

Podman

Podman 容器引擎配置

Singularity/Apptainer

HPC 科学计算容器配置

其他仓库配置

ghcr、Quay、nvcr 等镜像仓库

Harbor 镜像源配置

Harbor Proxy Repository 对接专属域名

Portainer 镜像源配置

Portainer Registries 加速拉取

Nexus 镜像源配置

Nexus3 Docker Proxy 内网缓存

系统配置

Linux

在 Linux 系统配置镜像服务

Windows/Mac

在 Docker Desktop 配置镜像

MacOS OrbStack

MacOS OrbStack 容器配置

Docker Compose

Docker Compose 项目配置

NAS 设备

群晖

Synology 群晖 NAS 配置

飞牛

飞牛 fnOS 系统配置镜像

绿联

绿联 NAS 系统配置镜像

威联通

QNAP 威联通 NAS 配置

极空间

极空间 NAS 系统配置服务

网络设备

爱快路由

爱快 iKuai 路由系统配置

宝塔面板

在宝塔面板一键配置镜像

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

使用与功能问题

配置了专属域名后,docker search 为什么会报错?

docker search 限制

Docker Hub 上有的镜像,为什么在轩辕镜像网站搜不到?

站内搜不到镜像

机器不能直连外网时,怎么用 docker save / load 迁镜像?

离线 save/load

docker pull 拉插件报错(plugin v1+json)怎么办?

插件要用 plugin install

WSL 里 Docker 拉镜像特别慢,怎么排查和优化?

WSL 拉取慢

轩辕镜像安全吗?如何用 digest 校验镜像没被篡改?

安全与 digest

第一次用轩辕镜像拉 Docker 镜像,要怎么登录和配置?

新手拉取配置

轩辕镜像合规吗?轩辕镜像的合规是怎么做的?

镜像合规机制

轩辕镜像支持 docker push 上传本地镜像吗?

不支持 push

错误码与失败问题

docker pull 提示 manifest unknown 怎么办?

manifest unknown

docker pull 提示 no matching manifest 怎么办?

no matching manifest(架构)

镜像已拉取完成,却提示 invalid tar header 或 failed to register layer 怎么办?

invalid tar header(解压)

Docker pull 时 HTTPS / TLS 证书验证失败怎么办?

TLS 证书失败

Docker pull 时 DNS 解析超时或连不上仓库怎么办?

DNS 超时

docker 无法连接轩辕镜像域名怎么办?

域名连通性排查

Docker 拉取出现 410 Gone 怎么办?

410 Gone 排查

出现 402 或「流量用尽」提示怎么办?

402 与流量用尽

Docker 拉取提示 UNAUTHORIZED(401)怎么办?

401 认证失败

遇到 429 Too Many Requests(请求太频繁)怎么办?

429 限流

docker login 提示 Cannot autolaunch D-Bus,还算登录成功吗?

D-Bus 凭证提示

为什么会出现「单层超过 20GB」或 413,无法加速拉取?

413 与超大单层

账号 / 计费 / 权限

轩辕镜像免费版和专业版有什么区别?

免费版与专业版区别

轩辕镜像支持哪些 Docker 镜像仓库?

支持的镜像仓库

镜像拉取失败还会不会扣流量?

失败是否计费

麒麟 V10 / 统信 UOS 提示 KYSEC 权限不够怎么办?

KYSEC 拦截脚本

如何在轩辕镜像申请开发票?

申请开发票(企业 / 个人)

怎么修改轩辕镜像的网站登录和仓库登录密码?

修改登录密码

如何注销轩辕镜像账户?要注意什么?

注销账户

配置与原理类

写了 registry-mirrors,为什么还是走官方或仍然报错?

mirrors 不生效

怎么用 docker tag 去掉镜像名里的轩辕域名前缀?

去掉域名前缀

如何拉取指定 CPU 架构的镜像(如 ARM64、AMD64)?

指定架构拉取

用轩辕镜像拉镜像时快时慢,常见原因有哪些?

拉取速度原因

为什么拉取镜像的 :latest 标签,拿到的往往不是「最新」镜像?

latest 与「最新」

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
consbio/mbtileserver
博客Docker 镜像公告与技术博客
热门查看热门 Docker 镜像推荐
安装一键安装 Docker 并配置镜像源
镜像拉取问题咨询请 提交工单。官方公众号:源码跳动。官方技术交流群:51517718。轩辕镜像所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
镜像拉取问题咨询请提交工单。官方公众号:源码跳动。官方技术交流群:。轩辕镜像所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
商务合作:点击复制邮箱
©2024-2026 源码跳动
商务合作:点击复制邮箱Copyright © 2024-2026 杭州源码跳动科技有限公司. All rights reserved.