Featured image of post 来尝试无限容量,可以webdav挂载的teldrive吧!

来尝试无限容量,可以webdav挂载的teldrive吧!

部署无限容量的teldrive,使用rclone挂载webdav,甚至可以备份nas

前言

两个月前偶然间看到telegram团队做了一个网盘叫teldrive 仔细看了一眼,和tg团队无任何关系,只是一个开源项目请注意甄别.据说是可以无限存储的网盘,且可以webdav挂载到本地,于是部署到了服务器上,但当时没有写博客记录,最近空闲了决定补一下博客。

2025/01/07更新,由于teldrive已经全面重构,本文档安装方法官方已经不使用了,如果看得懂英文建议跟随官方文档,官方文档点此,如果跟随我的文档,请自行解决可能出现的错误

2025/05/30更新,提交了alistgoteldrive驱动的实现pull request,已经完整支持alist挂载,请看pull request,若你想编译使用,请直接拉取我的仓库分支, 然后跟随文档(目前未合并)即可

2025/08/25, pull request被openlist合并,待下个正式版发布,openlist就会支持teldrive存储,请见https://github.com/OpenListTeam/OpenList/pull/1116

teldrive介绍

teldrive仓库地址

teldrive是一个通过telegram账号登陆后存储到私人账户空间的一个网盘空间,类似于google driveonedrive

特点如下

  • 数据很安全,官方保证存储数据不会丢失
  • 可以webdav挂载到本地
  • 无限容量
  • 上传下载速度取决于你的服务器链接至telgram服务器的速度,非会员会达到一定量以后限速,非会员会达到一定量以后限速,非会员会达到一定量以后限速!

缺点是无法直链共享,共享需要走自己的服务器流量

ui界面

共享选项

这里可以看到这个url指向本地ip,需要公网环境才可以共享

部署teldrive

根据teldrive官方仓库的指引即可

本文采取docker-compose部署的方式

填写配置信息

首先创建并填写config.toml 创建config

根据提示填写数据库地址secret即可

数据库地址比较容易理解,secret则是可以通过openssl rand -hex 64生成,或者通过官方的vercel app链接一键获取

这里可能会比较疑惑的是app-idapp-hash

其实app-idapp-hash是telegram的api相关密钥

telegram 获取api密钥

根据英文指引即可获得,这里不再赘述 英文指引

特别提示:如果你部署在国内本地服务器,那你需要在[tg]下添加proxy选项

最终我的配置是这样的 最终的配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[db]
data-source = "postgres://postgres:xxx@postgres_db:5432/teldrive"

[jwt]
secret = "xxxxxxx"

[tg]
app-id = "xxxx"
app-hash = "xxxxxxxxxxxxxxxxxxxxxxxx"
proxy = "http://192.168.50.171:10809" # 如果国内部署写你的代理,不是国内不需要添加

2025/05/16更新,这里如果你用的是最新版teldrive,请添加如下配置,如果不知道我在说什么,请看官方文档

1
2
3

[tg.uploads]
encryption-key = '请在这里替换为一个随机且复杂的字符串'

填写docker-compose

我的docker-compose.yml仅供参考,官方docker-compose文件是不含postgre数据库部署的,若你使用官方的docker-compose请自行配置连接数据库的url即可

在同一文件夹下创建docker-compose.yml

1
vim docker-compose.yml

填入如下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
services:
  teldrive:
image:: ghcr.io/tgdrive/teldrive
    restart: always
    container_name: teldrive
    ports:
     - '8080:8080'
    volumes:
      - ./config.toml:/config.toml
      - ./session.db:/session.db
    networks:
      - teldrive
  postgres_db:
image:: ghcr.io/tgdrive/postgres:17-alpine
    container_name: postgres_db
    restart: always
    networks:
      - teldrive
    environment:
      - POSTGRES_PASSWORD=xxxxxxxxx
      - POSTGRES_DB=teldrive
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:
networks:
  teldrive:
    external: true

注意这里POSTGRES_DBPOSTGRES_PASSWORD环境信息需要修改为同刚才config.toml相同的配置,如我的配置

2025/05/16更新,由于这里使用external networks,请运行docker network create teldrive后再docker-compose up -d

1
2
[db]
data-source = "postgres://postgres:xxx@postgres_db:5432/teldrive"

这里

  • postgres://代表协议对接postgresql数据库
  • 冒号前则是用户名
  • 冒号后面的xxx则是密码
  • @后面就是访问终结点,postgres_db,可以看作是ip
  • 5432则是端口,这里是默认没有改
  • /teldrive代表访问的数据库是teldrive

其实就是数据库的标准url访问i形式

1
<protocol>://<username>:<password>@<ip or domain or alias>:<port(optional)>/<database_name>

顺带一提halo博客用的springboot,链接mysql的话也一个格式

1
mysql://twoonefour:[email protected]/halo

题外话扯远了,配置完docker-compose.yml后,这里还需要一个session.db文件,创建一下就可以开启容器了

1
2
touch session.db
docker-compose up -d

之后可以尝试访问

http://<teldrive部署地址>:8080

还需要把你的机器人拉入tg频道才能使用,如下图,访问http://<teldrive部署地址>:8080/settings/account。在这里选择一个频道作为存放文件的位置

在这里选择一个频道作为存放文件的位置

之后就能正常使用辣

对接rclone使用webdav

rclone是一个开源的用于挂载盘到本地的一个开源软件 github仓库地址

但这里teldrive是不能使用开源的rclone的,坑死我了

teldrive需要使用telegram团队魔改的版本 需要使用魔改版本

魔改teldrive 仓库地址

直接从release下载下来即可使用

下载完以后创建文件配置,位于~/.config/rclone/rclone.conf

1
2
3
4
5
6
7
8
[teldrive]
type = teldrive
api_host = http://localhost:8080 # default host
access_token = #session token obtained from cookies
chunk_size = 500M
upload_concurrency = 4
encrypt_files = false # Enable this to encrypt files make sure encryption key is not empty in teldrive config file.
random_chunk_name= true # Use random chunk names when uploading files to channel instead of original filename.

需要动脑筋的是access_token,在teldrive登陆以后,在控制台cookie中获取

user-session就是access_token

复制这个值填上就可以了

其他的根据需要填写

填完以后就可以运行了,我的命令示例如下

1
2
3
4
5
6
7
rclone mount teldrive:/ /volume3 \
--vfs-cache-mode full \
--vfs-cache-max-age 72h \
--vfs-cache-poll-interval 5m \
--vfs-cache-max-size 15G \
--dir-cache-time 200h \
--cache-dir /opt/rclonecache

这里我是挂载到/volume3下的

其他参数请看文档rclone文档

自动挂载请参照官方文档自动挂载 rclone-as-unix-mount-helper

我这里给出我的方案,我是使用的systemd

vim /usr/lib/systemd/system/rclone.service 填入以下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[Unit]
Description=Rclone webdav
After=network.target

[Service]
User=root
Nice=1
RestartSec=5
Restart=always
SuccessExitStatus=0 1
ExecStart=rclone mount teldrive:/ /volume3 --vfs-cache-mode full --vfs-cache-max-age 72h --vfs-cache-poll-interval 5m --vfs-cache-max-size 15G --dir-cache-time 200h --cache-dir /opt/rclonecache
[Install]
WantedBy=multi-user.target

接着素质二连即可启动

1
2
systemctl daemon-reload
systemctl start rclone

之后就能同普通文件夹一样,访问/volume3就是访问远程,使用cp命令,mv命令都可以,看你的脑洞要如何运用了

顺带一提我的nas就是整个备份到了teldrive里,可以看到我已经用了1T空间

ui界面

至此搭建结束,enjoy