Sign inSign up

micrograils/webget

By micrograils

•Updated 7 days ago

把链接交给服务器,剩下的交给网速。

Image
Developer tools
Web servers
0

715

micrograils/webget repository overview

⁠字节驿站 WebGet

把链接交给服务器,剩下的交给网速。

Docker Image Size Docker Pulls Platforms

一个跑在浏览器里的下载中转站,支持两种模式,特别适合:

  • 服务器下载大文件(不受本地带宽限制)
  • 免去文件传输的麻烦
  • 随时随地通过浏览器管理下载
  • 临时给别人一个直链,让他直接从源站拖走,不占你的磁盘

⁠✨ 2.0 新增能力一览

能力说明
生成下载链接给任意 URL 签发带 Token 的直链,客户端直接从源站流式下载,文件不落盘、不占服务器空间
链接带原始文件名链接形如 /d/<token>/<原始文件名>,wget / curl -O / aria2 会自动用它命名
链接有效期1 小时 / 6 小时 / 24 小时 / 7 天可选,随时「取消链接」让其立即失效
随机密码策略默认每次启动都重新生成随机密码,重启即变,不用再担心口令写死在环境变量里
全新界面统一的按钮 / 卡片 / 空状态体系,暗色玻璃拟态,移动端自适应

⁠🚀 最快上手(一条命令跑起来)

⁠1. 一键启动
docker run -d --name webget \
  -p 80:80 \
  -v $(pwd)/downloads:/downloads \
  micrograils/webget:latest
⁠2. 打开浏览器

访问 http://localhost⁠

⁠3. 输入密码登录

默认每次启动都会重新生成一个随机密码,查看方式:

docker logs webget

看到这段就是本次口令:

==========================================
  本次访问密码: osf2xz
==========================================

口令每次都不一样,详见 访问口令⁠。


⁠📖 基础使用

⁠模式一:下载到服务器

文件先落到服务器,再从「已下载文件」列表取回。

  1. 顶部保持「⬇ 下载到服务器」选中
  2. 输入 URL,回车或点「下载」
  3. 实时看进度条 / 速度 / 平均值 / 峰值,随时「✕ 停止」
  4. 完成后在下方卡片点文件名直接下载到本机
⁠模式二:生成下载链接(不落盘)

适合「别人要从某个源地址拿文件,我不想当二传手」的场景。

  1. 切到「🔗 生成下载链接」,选好有效期
  2. 输入源地址,回车或点「生成链接」
  3. 拿到一条直链:
https://<你的域名>/d/<token>/harbor-offline-installer-v2.15.2.tgz
  1. 把链接发出去,对方用任何工具都能拖:
wget "https://<你的域名>/d/<token>/harbor-offline-installer-v2.15.2.tgz"
curl -OJ "https://<你的域名>/d/<token>/harbor-offline-installer-v2.15.2.tgz"
aria2c -x 8 -o harbor.tgz "https://<你的域名>/d/<token>/harbor-offline-installer-v2.15.2.tgz"

直连模式的要点:

  • 流式转发:文件从头到尾不写入服务器磁盘,只过一遍内存(64KB 分片),多大的文件都不占存储
  • 文件名来自原始 URL:末段是源地址的文件名,wget / curl -O 等工具保存时自动用它命名
  • 末段文件名只是装饰:实际下载文件名以签发时记录的为准,把后缀改成 .exe 也不会改变下载内容
  • 支持断点续传:源站支持 Range 时,客户端可续传(实测 HTTP 206)
  • 支持 HEAD:curl -I 可以拿到文件名和类型做预检,不会真的把文件拖下来
  • 有效期:默认 1 小时,可在生成时选 1h / 6h / 24h / 7d
  • 重复签发:有效期内反复生成同一地址,返回的是同一条链接(♻ 复用),不会刷出一堆
  • 随时作废:在「生效中的下载链接」里点「取消链接」,链接立即失效
  • 旧链接兼容:不带文件名的 /d/<token> 依然可用
⁠管理文件
  • 下载文件:点击文件名直接下载
  • 删除文件:点「删除」按钮释放空间
  • 刷新列表:卡片右上角「刷新」
⁠查看磁盘空间

页面顶部实时显示已用 / 可用 / 总计,超过 70% 变橙、90% 变红并提示清理。


⁠🔐 访问口令

没有默认密码,也不支持设置固定密码。 每次容器启动都会重新生成一个随机口令并打到日志里:

docker logs webget
==========================================
  本次访问密码: osf2xz
  (随机生成,容器重启后会重新生成)
==========================================

设计取舍:

  • 不落默认口令:代码里不存在"出厂密码",不会因为忘记改而被扫库
  • 重启即换:哪怕口令泄露,重启容器就作废(SECRET_KEY 也是每次随机,旧 Session 全部失效)
  • 唯一入口是日志:想拿到口令必须有 docker logs 权限,也就是已经拿到了宿主机 shell

口令长度可调(默认 6 位小写字母+数字):

-e PASSWORD_LENGTH=12

外部传入的 DOWNLOAD_PASSWORD 会被直接忽略,并在日志里给出提示。


⁠⚙️ 自定义配置

⁠更改访问端口

把 80:80 改成你想要的端口,如 8080:80:

docker run -d --name webget \
  -p 8080:80 \
  -v $(pwd)/downloads:/downloads \
  micrograils/webget:latest

然后访问 http://localhost:8080⁠

⁠持久化存储

指定本地目录保存文件,容器内挂载点是 /downloads:

docker run -d --name webget \
  -p 80:80 \
  -v /your/path/here:/downloads \
  micrograils/webget:latest

2.0 之前挂载点是 /usr/share/nginx/html/downloads。升级后请把 -v 右边改成 /downloads;文件本来就在宿主机目录里,改完挂载点即可继续访问,不会丢。 页面的下载 URL 仍是 /downloads/<文件名>,没有变化。


⁠🐳 Docker Compose 部署(推荐)

创建 docker-compose.yml:

services:
  webget:
    image: micrograils/webget:latest
    container_name: webget
    ports:
      - "80:80"
    environment:
      # 口令始终随机生成,不需要也不能设置固定密码
      - PASSWORD_LENGTH=6
    volumes:
      - ./downloads:/downloads
    restart: unless-stopped

启动:

docker compose up -d
docker compose logs webget   # 查看本次访问口令

restart: unless-stopped 下容器重启会换口令,重启后记得重新 docker compose logs。


⁠🌐 远程访问

⁠通过 IP 访问
docker run -d --name webget \
  -p 80:80 \
  -v $(pwd)/downloads:/downloads \
  micrograils/webget:latest

服务器 IP + 端口即可访问。

⁠配合 Nginx 反向代理
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

生成的链接是按请求的 Host 拼出来的,所以反向代理一定要带上 proxy_set_header Host $host,否则链接会变成内网地址。


⁠🔧 命令行使用(API)

页面能做的事接口都能做,方便脚本化:

# 登录
curl -c ck.txt -X POST https://example.com/api/login \
  -H 'Content-Type: application/json' -d '{"password":"你的密码"}'

# 签发一条直链(ttl 单位秒:3600 / 21600 / 86400 / 604800)
curl -b ck.txt -X POST https://example.com/api/link \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://github.com/goharbor/harbor/releases/download/v2.15.2/harbor-offline-installer-v2.15.2.tgz","ttl":3600}'

# 查看生效中的链接
curl -b ck.txt https://example.com/api/links

# 取消某条链接
curl -b ck.txt -X POST https://example.com/api/links/<token>/revoke

# 下载到服务器(返回 task_id,配合 /api/status/<task_id> 查进度)
curl -b ck.txt -X POST https://example.com/api/download \
  -H 'Content-Type: application/json' -d '{"url":"https://example.com/big.iso"}'

# 已下载文件列表
curl -b ck.txt https://example.com/api/files

⁠❓ 常见问题

Q: 密码忘了怎么办? A: docker logs webget 看本次口令;想换一个新的,重启容器即可。

Q: 能不能设成固定密码? A: 不能,也不打算支持。口令只允许随机生成,DOWNLOAD_PASSWORD 之类的变量一律忽略(会在日志里提示)。理由是:默认口令必然有人不改,固定口令容易写进 compose 提交到仓库,随机口令则把"知道口令"和"有宿主机 shell 权限"绑定在一起。

Q: 生成的链接,别人下载会不会占我服务器流量? A: 会过一遍服务器的带宽(直连模式是流式转发),但不占磁盘。

Q: 下载中断了怎么办? A: 刷新页面,已下载的部分保留,可以继续下载。

Q: 支持 BT / 磁力链吗? A: 不支持,这是 HTTP 下载工具。

Q: 文件存哪里了? A: 存在你挂载的 volume 目录里,默认是 ./downloads。直连模式的链接不存储任何文件。


⁠📝 环境变量

变量说明默认值
PASSWORD_LENGTH随机密码长度(首字符为字母,其余字母+数字),每次容器启动重新生成6
LINK_TTL链接默认有效期(秒),只能是 3600 / 21600 / 86400 / 604800 之一,非法值回落到 36003600
CHUNK_SIZE转发分片大小(字节)65536
CONNECT_TIMEOUT连接上游超时(秒)15
READ_TIMEOUT读取上游超时(秒)60
SECRET_KEYSession 签名密钥,默认每次随机生成(重启后需重新登录)随机

密码相关:本镜像不提供默认密码,也不支持通过环境变量指定固定密码。口令每次启动随机生成,请通过 docker logs <容器名> 查看。


⁠🔄 更新日志

⁠2.0.0
  • 新增生成下载链接模式:带 Token 的直连接口 /d/<token>/<文件名>,流式转发、不落盘、支持 Range 和 HEAD
  • 链接带原始文件名,wget / curl -O / aria2 保存时自动命名
  • 链接有效期可选,支持列表管理、随时取消 / 复用
  • 数据目录挂载点从 /usr/share/nginx/html/downloads 改为 /downloads(与 nginx 静态根目录解耦); 升级时把 -v 右边改掉即可,宿主机上的文件不受影响
  • 密码策略收紧:彻底移除固定密码与默认密码,口令每次启动随机生成、重启即换;移除了 DOWNLOAD_PASSWORD / FIXED_PASSWORD / RANDOM_PASSWORD 变量,只保留 PASSWORD_LENGTH 控制长度
  • 界面全面重做:统一设计令牌与按钮体系,重构卡片布局,移动端适配

有问题? 提交 Issue⁠

Tag summary

Content type

Image

Digest

sha256:d7385429e…

Size

44.3 MB

Last updated

7 days ago

docker pull micrograils/webget