Zipline:自建文件分享服务,ShareX 截图自动上传利器

Zipline:自建文件分享服务,ShareX 截图自动上传利器

Zipline 是一款基于 Next.js 的轻量级自托管文件托管服务,与 ShareX 深度集成,截图后自动上传并将分享链接复制到剪贴板,彻底告别第三方图床的隐私和稳定性问题。


目录

  1. [为什么选择 Zipline](#为什么选择 Zipline)
  2. 服务器配置
  3. [Docker Compose 部署](#Docker Compose 部署)
  4. 环境变量配置
  5. [Caddy 反向代理](#Caddy 反向代理)
  6. 创建管理员账户
  7. 文件上传与管理
  8. [ShareX 集成详细教程](#ShareX 集成详细教程)
  9. 进阶功能配置
  10. [S3 存储对接](#S3 存储对接)
  11. 总结

为什么选择 Zipline

在截图工具领域,ShareX 是 Windows 下的绝对标杆------强大的截图、录屏、标注功能,加上高度可定制的上传目标,让它拥有大量忠实用户。但默认的图床方案(Imgur、Gyazo 等)存在隐私泄露风险、文件被删风险,以及访问速度不稳定等问题。

Zipline 正是为解决这些问题而生:

  • 完全自控:文件存储在自己的服务器,不受第三方服务条款限制
  • 与 ShareX 原生集成 :一键下载 .sxcu 配置文件,导入即用
  • 功能丰富:文件画廊、图片/视频内联预览、URL 短链、文件过期、密码保护上传
  • 用户系统:支持多用户、OAuth 登录(GitHub/Discord/Google)
  • 轻量高效:Next.js 构建,1 核 2GB 即可流畅运行

服务器配置

Zipline 基于 Next.js,资源占用极低,推荐使用 1 核 2GB 机型即可满足日常使用需求(包括 PostgreSQL 数据库在内)。

可考虑 雨云服务器 rainyun-com ,注册填码 2026off 领 5 折,选择 Ubuntu 22.04 系统,非常适合个人图床场景。


Docker Compose 部署

创建项目目录:

bash 复制代码
mkdir -p /opt/zipline
cd /opt/zipline
mkdir -p uploads

创建 docker-compose.yml

yaml 复制代码
version: "3.8"

services:
  zipline:
    image: ghcr.io/diced/zipline:latest
    container_name: zipline
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - CORE_SECRET=${SECRET}
      - CORE_DATABASE_URL=postgresql://zipline:${POSTGRES_PASSWORD}@postgres:5432/zipline
      - CORE_HOST=0.0.0.0
      - CORE_PORT=3000
      - DATASOURCE_TYPE=local
      - DATASOURCE_LOCAL_DIRECTORY=/uploads
      - TZ=Asia/Shanghai
    volumes:
      - ./uploads:/uploads
    depends_on:
      postgres:
        condition: service_healthy

  postgres:
    image: postgres:15-alpine
    container_name: zipline-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_DB=zipline
      - POSTGRES_USER=zipline
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U zipline"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  postgres_data:
    driver: local

环境变量配置

创建 .env 文件:

bash 复制代码
# 生成随机密钥(32字节十六进制)
SECRET=$(openssl rand -hex 32)

cat > .env << EOF
# 应用密钥,用于会话加密,请妥善保管
SECRET=${SECRET}

# PostgreSQL 密码
POSTGRES_PASSWORD=$(openssl rand -hex 16)

# 数据库连接(在 docker-compose.yml 中引用)
# CORE_DATABASE_URL 已在 compose 文件中配置

# 文件存储类型:local 或 s3
DATASOURCE_TYPE=local
DATASOURCE_LOCAL_DIRECTORY=/uploads
EOF

echo ".env 文件已创建,SECRET: ${SECRET}"

重要配置说明

变量 说明
CORE_SECRET 会话加密密钥,更换后所有用户需重新登录
CORE_DATABASE_URL PostgreSQL 连接字符串
DATASOURCE_TYPE 存储类型,local 本地磁盘或 s3 对象存储
DATASOURCE_LOCAL_DIRECTORY 本地存储时的文件目录
CORE_HOST 监听地址,0.0.0.0 接受所有连接
CORE_PORT 服务端口,默认 3000

启动服务:

bash 复制代码
docker compose up -d
docker compose logs -f zipline

等待日志出现 ready - started server on 0.0.0.0:3000 即表示启动成功。


Caddy 反向代理

安装 Caddy:

bash 复制代码
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install caddy

编辑 /etc/caddy/Caddyfile

caddyfile 复制代码
files.example.com {
    reverse_proxy localhost:3000

    # 上传文件大小限制(根据需要调整)
    request_body {
        max_size 100MB
    }

    header {
        Strict-Transport-Security "max-age=31536000"
        X-Content-Type-Options "nosniff"
    }
}

重载 Caddy:

bash 复制代码
systemctl reload caddy

创建管理员账户

Zipline 首次访问时会自动引导创建管理员账户:

  1. 打开浏览器访问 https://files.example.com
  2. 系统检测到无账户,自动跳转到初始化页面
  3. 填写管理员用户名和密码
  4. 点击 Create Administrator

登录后进入仪表盘,可看到文件统计、最近上传等信息。

基本设置(Settings → General):

  • Site Name:网站名称,显示在页面标题
  • Invite Only:是否仅允许邀请注册
  • Default Upload Expiry:默认文件过期时间

文件上传与管理

手动上传文件

  1. 进入 Zipline 主界面,点击 Upload 按钮
  2. 拖拽文件或点击选择文件
  3. 可设置:
    • Expires At:文件过期时间(如 7 天后自动删除)
    • Password:访问密码保护
    • Max Views:最大查看次数(超过后自动删除)
  4. 上传完成后自动复制分享链接

文件画廊视图

Files 页面可以:

  • 图片和视频直接内联预览,无需下载
  • 按日期、文件名、大小排序
  • 批量删除文件
  • 查看每个文件的访问统计(查看次数、最后访问时间)

URL 短链功能

URLs 页面可以创建短链接:

  1. 粘贴原始 URL
  2. 可选自定义短码
  3. 生成类似 https://files.example.com/go/abcd 的短链接

ShareX 集成详细教程

这是 Zipline 最强大的特性,以下是完整配置流程:

第一步:下载 .sxcu 配置文件

  1. 登录 Zipline 管理界面
  2. 进入 Account → ShareX Config(或点击右上角用户头像)
  3. 点击 Download .sxcu 按钮,下载 zipline.sxcu 配置文件

该文件包含:

json 复制代码
{
  "Version": "14.0.0",
  "Name": "Zipline",
  "DestinationType": "ImageUploader, FileUploader",
  "RequestMethod": "POST",
  "RequestURL": "https://files.example.com/api/upload",
  "Headers": {
    "Authorization": "your-api-token-here"
  },
  "Body": "MultipartFormData",
  "FileFormName": "file",
  "URL": "$json:files[0]$"
}

第二步:导入 ShareX

  1. 打开 ShareX
  2. 在左侧菜单找到 Destinations → Custom uploader settings
  3. 点击 Import → From file ,选择下载的 zipline.sxcu
  4. 配置自动导入,弹出确认窗口,点击 Yes

第三步:设置为默认上传目标

  1. 在 ShareX 主界面,点击 Destinations
  2. Image Uploader 设为 Custom Image Uploader
  3. File Uploader 设为 Custom File Uploader

第四步:配置快捷键

  1. 进入 Task Settings → Hotkeys
  2. 推荐设置:
    • Print Screen:截取全屏并上传
    • Ctrl+Print Screen:截取区域并上传
  3. 截图完成后,Zipline 的分享链接会自动复制到剪贴板

测试截图上传

按下快捷键截图,等待约 1-2 秒,剪贴板中会自动出现类似 https://files.example.com/u/xK3mP9 的链接,粘贴即可分享。


进阶功能配置

文件过期设置

Settings → Default Expiry 中可设置全局默认过期时间,也可在每次上传时单独指定:

  • never:永不过期
  • 1h1d7d30d:对应时间后删除

密码保护上传

上传时勾选 Password Protect,设置密码后,访问者需输入密码才能查看文件。适用于分享敏感文件。

OAuth 登录配置

docker-compose.yml 的 environment 中添加:

yaml 复制代码
# GitHub OAuth
- OAUTH_GITHUB_CLIENT_ID=your_github_client_id
- OAUTH_GITHUB_CLIENT_SECRET=your_github_client_secret

# Discord OAuth
- OAUTH_DISCORD_CLIENT_ID=your_discord_client_id
- OAUTH_DISCORD_CLIENT_SECRET=your_discord_client_secret

在对应平台创建 OAuth 应用,回调 URL 设为 https://files.example.com/api/auth/callback/github(以 GitHub 为例)。

用户管理

管理员可在 Admin → Users 中:

  • 创建新用户并发送邀请链接
  • 查看每个用户的存储使用量
  • 设置用户存储配额
  • 禁用账户

S3 存储对接

当本地磁盘空间不足时,可切换到 S3 兼容存储(AWS S3、Cloudflare R2、MinIO 等):

修改 .env 文件:

bash 复制代码
DATASOURCE_TYPE=s3
DATASOURCE_S3_ACCESS_KEY_ID=your_access_key
DATASOURCE_S3_SECRET_ACCESS_KEY=your_secret_key
DATASOURCE_S3_BUCKET=your-bucket-name
DATASOURCE_S3_REGION=us-east-1
# 如果使用 Cloudflare R2 或 MinIO,需要指定 endpoint
DATASOURCE_S3_ENDPOINT=https://your-minio-endpoint.com
# 是否强制路径风格(MinIO 需要设为 true)
DATASOURCE_S3_FORCE_PATH_STYLE=true

修改后重启容器:

bash 复制代码
docker compose down && docker compose up -d

注意 :切换存储后,原有本地文件不会自动迁移,需要手动将 uploads/ 目录中的文件上传至 S3 存储桶。


总结

Zipline 将自建文件托管的门槛降至最低:1 核 2GB 的轻量服务器,几分钟完成部署,与 ShareX 完美集成后,截图工作流变得无缝流畅。完全掌控自己的文件数据,不受任何第三方限制,是追求效率与隐私的开发者和创作者的理想选择。

相关推荐
用户3228360084473 小时前
python-rapidjson:用 C++ 速度处理 JSON 的 Python 库
github
逛逛GitHub3 小时前
4 个比较实用的 GitHub 开源项目,浅浅的收藏一波。
github
大树883 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
Hommy883 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
霸道流氓气质4 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz4 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工5 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化