前言
有临时剪切板的需求,本来是考虑 MicroBin 的,结果装完才发现它的环境变量和 API 文档简直灾难,怎么配置都不对,索性放弃。
改用更简化的 wastebin,官方描述核心完全基于 Rust 编写,具有极低的内存占用,且支持多达 170+ 种语言的语法高亮和 Markdown 渲染。
方案概述
- 使用 Docker 部署
wastebin - API 调用示例
- 创建内容
- 获取内容
操作步骤
一、使用 Docker 部署 wastebin
我们通过 Docker Compose 方式进行部署。创建工作目录并编写 docker-compose.yml 文件:
mkdir -vp /opt/wastebin/data
# 确保 data 目录对 wastebin 镜像内默认的 10001 用户具有写权限
chown 10001:10001 /opt/wastebin/data
cd /opt/wastebin
nano docker-compose.yml
编辑 docker-compose.yml 填入以下内容:
version: "3.8"
services:
wastebin:
image: quxfoo/wastebin:latest
container_name: wastebin
restart: always
environment:
# 指定 SQLite 数据库路径以保障持久化
- WASTEBIN_DATABASE_PATH=/data/state.db
- WASTEBIN_TITLE=My Wastebin
- WASTEBIN_MAX_BODY_SIZE=10485760 # 限制为 10MB
ports:
- "8088:8088"
volumes:
- ./data:/data
环境变量参数 描述说明 默认值 WASTEBIN_ADDRESS_PORT允许绑定的服务器 IP 地址和端口。 0.0.0.0:8088WASTEBIN_DATABASE_PATHsqlite3 数据库文件的存储路径,需配合数据卷映射以保留数据。 :memory:WASTEBIN_TITLE站点的 HTML Title 标题内容。 wastebinWASTEBIN_MAX_BODY_SIZE服务端能够接受的 POST 请求最大字节数(限制恶意传包情况,默认 1MB)。 1048576WASTEBIN_CACHE_SIZE渲染项的缓存数量,0 则为禁用缓存。 128WASTEBIN_HTTP_TIMEOUT请求超时时间限制设定(以秒为单位),超过限制时后端返回 408。 5WASTEBIN_BASE_URL用于设置平台对外展示的 Base URL,比如可以用来在移动端访问时正确加载扫码生成的 URL。 (无) WASTEBIN_THEME定制语法高亮主题颜色,可选用诸如 ayu,monokai,solarized等各种偏好样式。ayu
启动容器:
docker compose up -d
启动成功后,即可通过 http://<服务器IP>:8088 访问:
二、API 调用示例
wastebin 本身并未包含复杂的后台界面,而是提供了简单易用的开放 API 接口供第三方调度。
1、创建内容
以下 API 接口参数信息参考自:wastebin 官方 API 文档
向服务根端点 / 发起 POST 请求,携带 JSON 格式的 Payload 载荷配置项。支持的 JSON 参数如下:
| 参数 | 类型 | 是否必填 | 描述说明 |
|---|---|---|---|
text | String | 是 | 需要上传的纯文本原文。 |
extension | String | 否 | 文件扩展名,用于识别并激活对应代码的语法高亮(如 py, rs 等)。如果是 md 或 markdown,还会启用 Markdown 页面渲染。 |
title | String | 否 | 展示在页面顶部的标题。 |
expires | Integer | 否 | 控制内容的过期时间(从创建起多少秒后过期)。设定该值后,后端会自动在到期后对其清理。 |
burn_after_reading | Boolean | 否 | 阅后即焚选项。指定为 true 后,首个访问该链接的用户一旦读取其内容,服务端便会将其彻底销毁。 |
password | String | 否 | 访问密码。设置后内容会经过端到端加密,后续每一次网页访问和请求内容都需要提供该密码进行解密。 |
JSON Payload 示例:
{
"text": "print('Hello World')",
"extension": "py",
"title": "My Python Script",
"expires": 3600,
"burn_after_reading": false,
"password": "secret_password"
}
cURL 请求示例:
curl -X POST http://<服务器IP>:8088/ \
-H 'Content-Type: application/json' \
-d '{"text": "print(\"Hello World\")", "extension": "py", "title": "Example Code"}'
接口调用成功后,会返回带有你刚创建的内容链接路径 JSON 响应文本:
{"path":"/Ibv9Fa.py"}
2、获取内容
通过 GET 请求访问带有动态 ID 参数的 /raw/:id 端点:
curl http://<服务器IP>:8088/raw/Ibv9Fa
如果在创建时传递了
password参数对文本进行了加密,获取查询时则需要在请求的 Headers 处追加wastebin-password: <你的密码>进行解密验证,否则无法查看到原始内容:curl -H "wastebin-password: secret_password" http://<服务器IP>:8088/raw/Ibv9Fa
结束。