把链接交给服务器,剩下的交给网速。
715
把链接交给服务器,剩下的交给网速。
一个跑在浏览器里的下载中转站,支持两种模式,特别适合:
| 能力 | 说明 |
|---|---|
| 生成下载链接 | 给任意 URL 签发带 Token 的直链,客户端直接从源站流式下载,文件不落盘、不占服务器空间 |
| 链接带原始文件名 | 链接形如 /d/<token>/<原始文件名>,wget / curl -O / aria2 会自动用它命名 |
| 链接有效期 | 1 小时 / 6 小时 / 24 小时 / 7 天可选,随时「取消链接」让其立即失效 |
| 随机密码策略 | 默认每次启动都重新生成随机密码,重启即变,不用再担心口令写死在环境变量里 |
| 全新界面 | 统一的按钮 / 卡片 / 空状态体系,暗色玻璃拟态,移动端自适应 |
docker run -d --name webget \
-p 80:80 \
-v $(pwd)/downloads:/downloads \
micrograils/webget:latest
默认每次启动都会重新生成一个随机密码,查看方式:
docker logs webget
看到这段就是本次口令:
==========================================
本次访问密码: osf2xz
==========================================
口令每次都不一样,详见 访问口令。
文件先落到服务器,再从「已下载文件」列表取回。
适合「别人要从某个源地址拿文件,我不想当二传手」的场景。
https://<你的域名>/d/<token>/harbor-offline-installer-v2.15.2.tgz
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"
直连模式的要点:
wget / curl -O 等工具保存时自动用它命名.exe 也不会改变下载内容HTTP 206)curl -I 可以拿到文件名和类型做预检,不会真的把文件拖下来/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
指定本地目录保存文件,容器内挂载点是 /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.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。
docker run -d --name webget \
-p 80:80 \
-v $(pwd)/downloads:/downloads \
micrograils/webget:latest
服务器 IP + 端口即可访问。
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,否则链接会变成内网地址。
页面能做的事接口都能做,方便脚本化:
# 登录
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 之一,非法值回落到 3600 | 3600 |
CHUNK_SIZE | 转发分片大小(字节) | 65536 |
CONNECT_TIMEOUT | 连接上游超时(秒) | 15 |
READ_TIMEOUT | 读取上游超时(秒) | 60 |
SECRET_KEY | Session 签名密钥,默认每次随机生成(重启后需重新登录) | 随机 |
密码相关:本镜像不提供默认密码,也不支持通过环境变量指定固定密码。口令每次启动随机生成,请通过
docker logs <容器名>查看。
/d/<token>/<文件名>,流式转发、不落盘、支持 Range 和 HEADwget / curl -O / aria2 保存时自动命名/usr/share/nginx/html/downloads 改为 /downloads(与 nginx 静态根目录解耦);
升级时把 -v 右边改掉即可,宿主机上的文件不受影响DOWNLOAD_PASSWORD / FIXED_PASSWORD / RANDOM_PASSWORD 变量,只保留 PASSWORD_LENGTH 控制长度有问题? 提交 Issue
Content type
Image
Digest
sha256:d7385429e…
Size
44.3 MB
Last updated
7 days ago
docker pull micrograils/webget