besticon是一个用Go语言编写的网站图标服务

besticon


这是一个网站图标服务:

  • 支持 favicon.icoapple-touch-icon.png

  • 简洁的 URL API

  • 备用图标生成

  • 提供 Docker 镜像和单个二进制文件下载,方便轻松托管

这是什么?

网站过去要么有 favicon.ico,要么没有。随着 apple-touch-icon.png 的引入,为网站查找“图标”变得更加复杂。此服务用于查找网站图标,并在必要时生成图标。

API

GET /icon

此端点始终返回给定网站的图标图像——如果可能,它会重定向到官方图标;如果需要,它会创建并返回一个备用图像。

参数 示例 描述 默认值
url http://yelp.com 必填
size 32..50..100 期望的尺寸范围(最小..完美..最大) 如果找不到尺寸为 perfect..max 或 perfect..min 的图像,则会生成一个备用图标。 必填
formats png,ico 以逗号分隔的可接受图像格式列表:png、ico、gif、jpg gif,ico,jpg,png,svg
fallback_icon_url HTTP 图像 URL 如果提供此参数,则在找不到合适的图标时,将重定向到此图像。这将覆盖默认的备用图像行为。
fallback_icon_color ff0000 如果提供此参数,则在找不到任何图标颜色时,字母图标将使用提供的十六进制值着色,而不是灰色。

GET /allicons.json

此端点返回指定网站的所有图标。

参数 示例 描述 默认值
url http://yelp.com 必填
formats png,ico 以逗号分隔的可接受图像格式列表:png、ico、gif、jpg png,ico,gif,jpg

示例

已知问题和限制

我尽力使这个图标实用,但请注意,它存在一些已知限制:

  • 对字母图标的国际化支持不佳 (#13)

欢迎在 https://github.com/mat/besticon/issues 提交其他错误报告并提供帮助。

托管

以下是一些简单的托管选项,例如:

Docker

Docker 镜像可在 https://hub.docker.com/r/matthiasluedtke/iconserver/ 获取,该镜像基于本仓库中的 Dockerfile 生成。我会尽量在每个版本发布时更新该镜像。

请注意,此 Docker 镜像并未用于运行 https://besticon-demo.herokuapp.com,因此未经充分测试。

监控

Prometheus 指标已在 /metrics 下公开。基于这些指标的 Grafana 仪表盘配置位于 grafana-dashboard.json

服务器可执行文件

下载二进制文件

部分操作系统的二进制文件可从 https://github.com/mat/besticon/releases/latest 下载。

自行构建

如果您的系统已安装 Go,则可以使用 go get 获取源代码并构建服务器:

shell 复制代码
$ go get -u github.com/mat/besticon/v3/...

如果您想为其他目标操作系统构建可执行文件,可以添加 GOOSGOARCH 环境变量:

shell 复制代码
$ GOOS=linux GOARCH=amd64 go get -u github.com/mat/besticon/v3/...

运行中

要使用默认端口 8080 启动服务器,只需执行以下命令:

shell 复制代码
$ iconserver

要使用其他端口,请使用:

language 复制代码
$ PORT=80 iconserver

要监听其他地址(例如 localhost),请使用:

language 复制代码
$ ADDRESS=127.0.0.1 iconserver

要启用 CORS 标头,您需要设置 CORS_ENABLED=true。您还可以选择设置其他环境变量,这些变量将作为选项传递给rs/cors 中间件

language 复制代码
$ CORS_ENABLED=true iconserver

现在,当您打开 http://localhost:8080/icons?url=instagram.com 时,您应该会看到类似以下内容:

Favicon Finder 的屏幕截图

配置

配置项不多,但需要设置以下环境变量:

变量 描述 默认值
ADDRESS HTTP 服务器监听地址 0.0.0.0
CACHE_SIZE_MB groupcache 的大小,设置为 0 可禁用 32
CORS_ENABLED 启用 rs/cors 中间件 false
CORS_ALLOWED_HEADERS 以逗号分隔,传递给中间件的 CORS 标头
CORS_ALLOWED_METHODS 以逗号分隔,传递给中间件的 CORS 方法
CORS_ALLOWED_ORIGINS 逗号分隔,传递给中间件
CORS_ALLOW_CREDENTIALS 布尔值,传递给中间件
CORS_DEBUG 布尔值,传递给中间件
DISABLE_BROWSE_PAGES 布尔值,如果为 true,服务器将不提供任何 HTML 页面 false
HOST_ONLY_DOMAINS *
HTTP_CLIENT_TIMEOUT HTTP 请求超时时间。支持毫秒 (ms)、秒 (s)、分钟 (m) 等单位。 5 秒
HTTP_MAX_AGE_DURATION 所有动态生成的 HTTP 响应的缓存持续时间。支持毫秒 (ms)、秒 (s)、分钟 (m) 等单位。 720 小时(30 天)
HTTP_USER_AGENT HTTP 请求使用的用户代理 iPhone 用户代理字符串
METRICS_PATH Prometheus 指标的服务器路径。设置为 disable 可禁用 Prometheus 指标 /metrics
POPULAR_SITES /popular 页面使用的域名列表(以逗号分隔) 一些随机网站
PORT HTTP 服务器端口 8080
SERVER_MODE 设置为 download 可通过 besticon 代理下载,设置为 redirect 则允许浏览器直接下载。(示例见 #40 redirect

许可证

MIT 许可证 (MIT)

关于项目

besticon是一个用Go语言编写的网站图标服务,支持 favicon.ico 和 apple-touch-icon.png,简洁的 URL API,备用图标生成 Docker 镜像和单个二进制文件下载,方便托管。
MIT
Golang
971
173
17
2015-01-31
2025-11-16

增长趋势 - stars