Skip to content
Go back

使用 Docker 部署简单的 Pastebin 替代工具 wastebin

| 0 Views Edit page

前言

有临时剪切板的需求,本来是考虑 MicroBin 的,结果装完才发现它的环境变量和 API 文档简直灾难,怎么配置都不对,索性放弃。
改用更简化的 wastebin,官方描述核心完全基于 Rust 编写,具有极低的内存占用,且支持多达 170+ 种语言的语法高亮和 Markdown 渲染。


方案概述

  1. 使用 Docker 部署 wastebin
  2. API 调用示例
    1. 创建内容
    2. 获取内容

操作步骤

一、使用 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:8088
WASTEBIN_DATABASE_PATHsqlite3 数据库文件的存储路径,需配合数据卷映射以保留数据。:memory:
WASTEBIN_TITLE站点的 HTML Title 标题内容。wastebin
WASTEBIN_MAX_BODY_SIZE服务端能够接受的 POST 请求最大字节数(限制恶意传包情况,默认 1MB)。1048576
WASTEBIN_CACHE_SIZE渲染项的缓存数量,0 则为禁用缓存。128
WASTEBIN_HTTP_TIMEOUT请求超时时间限制设定(以秒为单位),超过限制时后端返回 408。5
WASTEBIN_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 参数如下:

参数类型是否必填描述说明
textString需要上传的纯文本原文。
extensionString文件扩展名,用于识别并激活对应代码的语法高亮(如 py, rs 等)。如果是 mdmarkdown,还会启用 Markdown 页面渲染。
titleString展示在页面顶部的标题。
expiresInteger控制内容的过期时间(从创建起多少秒后过期)。设定该值后,后端会自动在到期后对其清理。
burn_after_readingBoolean阅后即焚选项。指定为 true 后,首个访问该链接的用户一旦读取其内容,服务端便会将其彻底销毁。
passwordString访问密码。设置后内容会经过端到端加密,后续每一次网页访问和请求内容都需要提供该密码进行解密。

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

结束。


Edit page