源码介绍
AList是一款支持多种存储的目录文件列表程序,支持 web 浏览与 webdav,后端基于gin
,前端使用react
。
支持的存储
- 本地存储
- 阿里云盘
- OneDrive / Sharepoint(国际版, 世纪互联,de,us)
- 天翼云盘 (个人云, 家庭云)
- GoogleDrive
- 123 云盘
- 蓝奏云
- Alist
- FTP
- PikPak
- 闪电盘
- S3
- WebDav
- Teambition(中国,国际)
- 分秒帧
- 和彩云 (个人云, 家庭云)
- Yandex.Disk
- 百度网盘
- 夸克网盘
- 迅雷云盘
演示地址
一键脚本
仅支持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
从源码运行
此步骤只是为需要自行修改源码的用户准备,不了解的话请跳过。
环境准备
首先需要有git
、nodejs
、yarn
、golang>1.17
, gcc
的环境
构建前端
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
限制
如果你的服务器与阿里云盘的服务器通信困难,可选择填小一点,否则默认不填就好
First
首先打开https://tool.nn.ci/onedrive/request
创建应用
你也可以选择跳过此步,使用默认提供的client,但是需要组织管理员批准。
- 在打开的页面,选择所在区域,点击创建应用
- 登陆后选择「注册应用程序」,输入「名称」,选择「任何组织目录中的账户和个人」(注意这里不要看位置选择而是看文字,部分人可能是中间那个选项,不要选成单一租户或者其他选项,否则会导致登陆时出现问题),输入重定向 URL 为 https://tool.nn.ci/onedrive/callback ,「注册」即可,然后可以得到client_id
- 注册好应用程序之后,选择「证书和密码」,点击「新客户端密码」,输入一串密码,选择时间为最长的那个,点击「添加」 (注:在添加之后输入的密码之后会消失,请记录下来 client_secret 的值)
- 选择「API 权限」,点击 「MicroSoft Graph」,在「选择权限」中输入 file,勾选 「Files.read」(注:Files.read 是只读最小权限,图中权限较大,也同样可以),点击「确定」
获取刷新令牌
将上一步骤中获得的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最后面一串,如:
- https://cloud.189.cn/web/main/file/folder/-11 ->
-11
- https://cloud.189.cn/web/main/file/folder/71398114617385472 ->
71398114617385472
家庭云
使用189CloudPc
使用电脑浏览器,打开开发者工具,切换仿真设备选择手机设备,打开https://h5.cloud.189.cn/main.html#/family ,进入你想挂载的文件夹,可在网络中看到请求,然后找到所需参数:

支持团队盘
获取client_id,client_secret,refresh_token
使用https://tool.nn.ci/google/request
根目录file_id
与阿里云盘类似,官网url最后面一串,如:
添加其他的Alist服务。
alist site url
另一个Alist的地址
Token
可以在登陆之后的请求的请求头中找到,名称为Authorization
,也可以自己计算,计算方式为:
md5(`https://github.com/Xhofe/alist-${YOUR_PASSWORD}`)
Copy
根目录路径
要添加的目录的pathname,不填默认为根目录,如:
- https://alist.nn.ci ->
/
- https://alist.nn.ci/a ->
/a
- https://alist.nn.ci/a/b ->
/a/b
所有信息都从请求中获取,对于个人云:
对于家庭云:
注:家庭云不支持重命名、移动、复制和上传。
由于夸克网盘的限制,下载必须携带cookie,所以只能使用本程序中的代理功能进行中转。(可以使用其他机器中转)
Cookie和根目录ID从请求中获取: 或者根目录id也可以从地址栏获取:
填写账号密码即可。根目录ID:

不填默认为根目录
支持度
存储策略 | 列表 | 下载 | 创建文件夹 | 重命名 | 移动 | 复制 | 上传 |
---|---|---|---|---|---|---|---|
本地存储 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
阿里云盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
Onedrive | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
天翼云盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
GoogleDrive | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
123 云盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
蓝奏云 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Alist | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
FTP | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
PikPak | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
闪电盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
S3 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
WebDav | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Teambition | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
分秒帧 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
和彩云 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Yandex.Disk | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
百度网盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
夸克网盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
迅雷网盘 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
暂无评论内容