基于AList搭建各类网盘列表程序网盘程序

源码介绍

AList是一款支持多种存储的目录文件列表程序,支持 web 浏览与 webdav,后端基于gin,前端使用react

支持的存储

演示地址

一键脚本

仅支持Linux-x86_64/aarch64平台。

安装

curl -fsSL "https://nn.ci/alist.sh" | bash -s install
DANGER

已经安装过再次执行安装会删除之前的数据,更新请使用更新命令。

更新

curl -fsSL "https://nn.ci/alist.sh" | bash -s update

卸载

curl -fsSL "https://nn.ci/alist.sh" | bash -s uninstall

自定义路径

默认安装在/opt/alist,要自定义安装路径,添加安装路径为第二个参数,必须是绝对路径(路径以alist结尾时直接安装到给定路径,否则会安装在给定路径alist目录下),如安装到/root

# 安装
curl -fsSL "https://nn.ci/alist.sh" | bash -s install /root
# 更新
curl -fsSL "https://nn.ci/alist.sh" | bash -s update /root
# 卸载
curl -fsSL "https://nn.ci/alist.sh" | bash -s uninstall /root

手动安装

获取Alist

打开AList Release下载要部署的系统对应的文件,最新的版本前端已经与后端打包在一起,无需再次下载前端文件。

运行起来

Linux

# 解压下载对文件得到可执行文件:
tar -zxvf alist-xxxx.tar.gz
# 赋予程序执行权限:
chmod +x alist-xxxx
# 运行程序
./alist-xxxx

Windows

其中的xxxx是指不同系统/架构对应的名称,一般Linux-x86/64是alist-linux-amd64Windows

当看到输出start server @ 0.0.0.0:5244且之后没有报错后,就表示运行成功了,首次运行会输出初始密码,程序默认监听5244端口,现在打开http://ip:5244就可以看见登陆页面了,webdav相关请看WebDav。

守护进程

vim /etc/systemd/system/alist.service添加以下内容,其中path_alist为alist所在的路径

[Unit]
Description=alist
After=network.target
 
[Service]
Type=simple
WorkingDirectory=path_alist
ExecStart=path_alist/alist-xxxx -conf data/config.json
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

然后systemctl daemon-reload,现在你就可以使用这些命令来管理程序了:

  • 启动: systemctl start alist
  • 关闭: systemctl stop alist
  • 自启: systemctl enable alist
  • 状态: systemctl status alist
  • 重启: systemctl restart alist

使用Docker安装

初始密码请查看日志输出:

docker logs alist
# 或者
docker exec -it alist ./alist -password

稳定版

docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest

开发版

docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:v2

从源码运行

此步骤只是为需要自行修改源码的用户准备,不了解的话请跳过。

环境准备

首先需要有gitnodejsyarngolang>1.17gcc的环境

构建前端

clone https://github.com/Xhofe/alist-web 这个项目,执行yarn && yarn build,得到dist目录下的目标文件

构建后端

clone https://github.com/Xhofe/alist 这个项目,将上一步dist目录下的文件全部拷贝至项目下的public目录,然后:

appName="alist"
builtAt="$(date +'%F %T %z')"
goVersion=$(go version | sed 's/go version //')
gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
gitCommit=$(git log --pretty=format:"%h" -1)
gitTag=$(git describe --long --tags --dirty --always)
ldflags="\
-w -s \
-X 'github.com/Xhofe/alist/conf.BuiltAt=$builtAt' \
-X 'github.com/Xhofe/alist/conf.GoVersion=$goVersion' \
-X 'github.com/Xhofe/alist/conf.GitAuthor=$gitAuthor' \
-X 'github.com/Xhofe/alist/conf.GitCommit=$gitCommit' \
-X 'github.com/Xhofe/alist/conf.GitTag=$gitTag' \
"
go build -ldflags="$ldflags" alist.go

反向代理

程序默认监听5244端口

nginx

在网站的配置文件的server字段中加入

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:5244;
    # 上传的最大文件尺寸
    client_max_body_size 20000m;
}

如果你使用宝塔,请务必删除以下默认配置

  • location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md
  • location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
  • location ~ .*.(js|css)?$

Apache

在VirtualHost字段下加入反代配置项ProxyPass,比如:

<VirtualHost *:80>
    ServerName myapp.example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /www/myapp/public

    AllowEncodedSlashes NoDecode
    ProxyPass "/" "http://127.0.0.1:5244/" nocanon
</VirtualHost>

在Caddyfile文件下加入反代配置项reverse_proxy,比如:

:80 {
    reverse_proxy 127.0.0.1:5244
}

网盘挂载教程

所有账号的必填项

name(名称)

唯一标识符,也是当有多个账号时展示的路径

index(索引)

当有多个账号时,用于排序,越小越靠前

proxy(代理相关)

一个有三个相关选项:

  • proxy:网页端和直链走不走中转
  • webdav_proxy:webdav文件下载走不走中转
  • webdav_direct:webdav直接由本机中转

如果没有proxy和webdav_proxy选项,则说明只能走中转

存储分可以直接请求(有proxy开关)和不可以直接请求的(无proxy开关) 不可以直接请求的会直接走程序所在服务器(如果你没有填down_proxy_url) 可以直接请求的:

  • proxy关、webdav_proxy关:文件下载请求完全不走服务器
  • proxy开、webdav_proxy关:网页上的预览、直链下载都走服务器,但webdav下载不走服务器
  • proxy关、webdav_proxy开:网页上的预览、直链下载不走服务器,但webdav下载走服务器
  • proxy开、webdav_proxy开:网页预览、直链下载和webdav下载都走服务器。
  • webdav_direct: 如果打开此开关,则webdav文件直接由本机中转,且不经过302跳转。如果此项关闭且打开webdav_proxy,文件下载是可能会经过多次302跳转。

down_proxy_url(下载代理地址)

不填此字段开启代理时,默认使用本机进行中转。提供两种代理方法:

cloudflare workers

可以使用cloudflare workers进行代理,此处填写cloudflare workers地址即可。 workers代码可以在https://github.com/alist-org/alist-proxy/blob/main/alist-proxy.js 找到。其中:

  • HOST: 你的Alist地址,必须添加协议头,且后面不能添加/。如https://alist.nn.ci
  • TOKEN:参见Alist部分的Token。

通用二进制

你也可以使用另外一台机器进行代理,在https://github.com/alist-org/alist-proxy/releases 下载程序

./alist-proxy -help查看使用方法。

你也可以自己开发代理程序,一般的步骤为:

  • 下载时会请求PROXY_URL/path?sign=sign_value
  • 在代理程序中验证sign,sign的计算方式为:
const name = path.split('/').pop();
const sign = md5(`alist-${TOKEN}-${name}`).slice(8, 24)
  • 验证sign无误后,请求HOST/api/admin/link,可以得到文件的URL与需要携带的请求头
  • 使用得到的信息请求并返回

api_proxy_url(API代理地址)

同down_proxy_url,请求API使用的代理,专门为GoogleDrive和PikPak等国内无法直接访问的存储准备。

extract_folder

  • front: 排序时将文件夹全部放到最前面
  • back: 排序时将文件夹全部放到最后面

只需填写本地的要设置为根目录的路径即可。

由于阿里云盘referrer的限制,必须使用移动端token,使用桌面web端token会导致无法下载与预览。

refresh_token(刷新令牌)

请使用:Get Token

排序与排序方向

自行选择,或者不选

根目录file_id

打开阿里云盘官网,点进去你要设置的文件夹时url后面的一串,如https://www.aliyundrive.com/drive/folder/5fe01e1830601baf774e4827a9fb8fb2b5bf7940 就是5fe01e1830601baf774e4827a9fb8fb2b5bf7940 file_id

限制

如果你的服务器与阿里云盘的服务器通信困难,可选择填小一点,否则默认不填就好

First

首先打开https://tool.nn.ci/onedrive/request

创建应用

你也可以选择跳过此步,使用默认提供的client,但是需要组织管理员批准。

  • 在打开的页面,选择所在区域,点击创建应用
  • 登陆后选择「注册应用程序」,输入「名称」,选择「任何组织目录中的账户和个人」(注意这里不要看位置选择而是看文字,部分人可能是中间那个选项,不要选成单一租户或者其他选项,否则会导致登陆时出现问题),输入重定向 URL 为 https://tool.nn.ci/onedrive/callback ,「注册」即可,然后可以得到client_id client_id
  • 注册好应用程序之后,选择「证书和密码」,点击「新客户端密码」,输入一串密码,选择时间为最长的那个,点击「添加」 (注:在添加之后输入的密码之后会消失,请记录下来 client_secret 的值) client_secret
  • 选择「API 权限」,点击 「MicroSoft Graph」,在「选择权限」中输入 file,勾选 「Files.read」(注:Files.read 是只读最小权限,图中权限较大,也同样可以),点击「确定」 api

获取刷新令牌

将上一步骤中获得的client_id和client_secret填入https://tool.nn.ci/onedrive/request 这个页面,点击获取刷新令牌,就可以得到刷新令牌了

获取Sharepoint site_id

如果需要挂载Sharepoint,完成上一步后,在显示刷新令牌的界面会出现一个输入站点地址,输入站点地址后点击获取site_id即可。

添加账号

将上述过程中获取得到的值依次填入即可。

根目录路径

默认为/,如果需要自定义,就填路径就行,从根路径开始,和本地路径一样,比如/test

个人云

使用189Cloud或者189CloudPc均可。区别为:

  • 189Cloud使用web端api
  • 189CloudPc使用客户端api

用户名

即用于登陆的手机号

密码

即用于登陆的密码

排序与排序方向

自行选择

根目录ID

与阿里云盘类似,官网url最后面一串,如:

家庭云

使用189CloudPc

使用电脑浏览器,打开开发者工具,切换仿真设备选择手机设备,打开https://h5.cloud.189.cn/main.html#/family ,进入你想挂载的文件夹,可在网络中看到请求,然后找到所需参数:

189family

支持团队盘

获取client_id,client_secret,refresh_token

使用https://tool.nn.ci/google/request

根目录file_id

与阿里云盘类似,官网url最后面一串,如: google

https://www.123pan.com/

填写账号密码即可。

用户名

即用于登陆的手机号

密码

即用于登陆的密码

根目录file_id

与阿里云盘类似,官网url最后面一串,如: 123

由于每个人的链接可能不一样,所以cookie挂载也需要填写share url,随便一个分享链接就可以。

通过cookie获取账号内的文件夹,cookie有效期未知,测试一直未失效。

打开浏览器开发者工具,切至网络tab,然后登陆蓝奏云,并打开要分享的文件夹,找到最新的https://pc.woozooo.com/doupload.php请求: doupload.php 就可以看到cookie和要分享的文件夹id。 不填文件夹id则默认为根目录。

share url

只填写外链分享地址与分享密码即可。 蓝奏云的分享只能分享一个文件夹内的文件,所以看不到文件夹是正常现象。

添加其他的Alist服务。

alist site url

另一个Alist的地址

Token

可以在登陆之后的请求的请求头中找到,名称为Authorization,也可以自己计算,计算方式为:

md5(`https://github.com/Xhofe/alist-${YOUR_PASSWORD}`)

Copy

根目录路径

要添加的目录的pathname,不填默认为根目录,如:

ftp host url

FTP地址

用户名

FTP用户名

密码

FTP密码

根目录路径

不填默认为 ‘/’

用户名

用户名,邮箱

密码

密码

root folder id

可在https://mumuchenchen.github.io/pikpak 这个网站登录查看: image.png 不填默认为根目录。

用户名

用户名,手机号

密码

密码

root folder id

可在网页版中查看,如图所示: image.png 不填默认为根目录。

S3对象存储协议,如COS、OSS、B2等。

视频教程

OSS

COS

BucKet

存储桶名称

Endpoint

Endpoint地址

Region

地区

Access Key

密钥ID

Access Secret

访问密钥

root folder path

根路径,不填默认为根目录。

Custom Host

自定义cdn加速域名

url expire time

签名的下载地址有效期,默认为4小时,如果使用自定义加速域名则此项无效。

webdav root url

WebDAV根地址

用户名

用户名

密码

密码

Teambition项目文件,支持中国服务器和国际服务器。

登陆之后获取,有效期未知

cookie

Project ID 和 root folder id

登陆后从URL中获取

id

Token

有效期仅七天,登陆后获取

root folder id

登陆后从请求中获取

id

所有信息都从请求中获取,对于个人云: Personal

对于家庭云: Family

注:家庭云不支持重命名、移动、复制和上传。

刷新令牌

点此获取刷新令牌。

根目录路径

要挂载的根目录,默认为/

由于百度网盘API的限制,下载较大的文件(目测>20M)需要携带header:”User-Agent”:”pan.baidu.com”,所以在下载大于20M的文件时,需要自行设置请求头,如使用curl:

curl -L -X GET 'YOUR_LINK' -H 'User-Agent: pan.baidu.com' 

或使用本程序中的代理功能进行中转。

刷新令牌

点此获取刷新令牌。

根目录路径

要挂载的根目录,默认为/

由于夸克网盘的限制,下载必须携带cookie,所以只能使用本程序中的代理功能进行中转。(可以使用其他机器中转)

Cookie和根目录ID从请求中获取: quark 或者根目录id也可以从地址栏获取: url

填写账号密码即可。根目录ID: 

root_folder id

 不填默认为根目录

支持度

存储策略列表下载创建文件夹重命名移动复制上传
本地存储
阿里云盘
Onedrive
天翼云盘
GoogleDrive
123 云盘
蓝奏云
Alist
FTP
PikPak
闪电盘
S3
WebDav
Teambition
分秒帧
和彩云
Yandex.Disk
百度网盘
夸克网盘
迅雷网盘
    © 版权声明
    THE END
    喜欢就支持一下吧
    点赞14 分享
    评论 抢沙发

    请登录后发表评论