Alist有很详细的官方文档(没看过建议先看)和非常丰富的第三方教程,这里主要按照我自己配置的方式来记录一下,很多千篇一律的地方就略去了。

安装

我使用的安装方式是Docker Compose + nginx反向代理 + Cloudflare CDN,和官方安装教程有一点点细节的不同。

假设已经拥有了一个托管在Cloudflare的域名,叫my.domain,这一步就不展开了,有需要自行搜索

docker-compose.yaml文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
services:
  alist:
    image: 'xhofe/alist:latest'
    container_name: alist
    volumes:
      - './data:/opt/alist/data'
    ports:
      - '127.0.0.1:5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    restart: unless-stopped

这里和官方的有两个细小区别,

  1. volumes的data目录和compose文件放在一起,因为我觉得这样方便管理
  2. ports的端口映射加上了127.0.0.1,因为https是在nginx上配置的,出于安全考虑,这里不对外暴露此端口。

先运行docker compose up -d启动,按要求设置密码,再docker compose down关闭。如无意外,当前目录会有个data目录生成,且data目录下有个config.json文件,再按要求配置site_urlhttps://my.domain

接下来需要到Cloudflare的Dashboard,

  1. 先选择自己的域名,点击DNS菜单,添加一条DNS记录,确保Proxy Status是开启的状态
  2. (尽管实际可选,但对于我的配置来说是必选)点击展开SSL/TLS菜单
    1. 点击Overview,选择Full (strict)模式
    2. 点击Origin Server,为对应的域名创建一个15年的证书
    3. 将证书的公钥和私钥分别放到服务器上。这里我存放的路径为/etc/nginx/certs/my.domain.pem /etc/nginx/certs/my.domain.key

然后配置nginx,就是用的官方配置,完整的文件如下,因为配置了证书,所以只需要监听443端口即可

 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
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name my.domain;

    ssl_certificate /etc/nginx/certs/my.domain.pem;
    ssl_certificate_key /etc/nginx/certs/my.domain.key;

    access_log  /var/log/nginx/alist_access.log;
    error_log   /var/log/nginx/alist_error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
        proxy_redirect off;
        proxy_pass http://127.0.0.1:5244;
        # the max size of file to upload
        client_max_body_size 20000m;
    }
}

都配置完成之后docker compose up -d启动容器,nginx -t && nginx -s reload 重载nginx,浏览器打开 https://my.domain,就可以看到页面了。用户名是admin,密码是前面自己设置的。

配置

安装完成之后下面就来进行一番配置,Alist支持特别多的存储类型,这里就以本机存储为例来说明一下,其他方式可以自行查看相关教程

添加本机存储

首先在终端执行docker exec -it alist /bin/sh,进入容器内部,然后在data目录创建一个文件夹,名字就叫test吧,对应命令为mkdir /opt/alit/data/test,接着输入exit退出即可。这一步也可以在宿主机操作,不过为了避免未知的权限问题,我还是选择进入容器操作。

然后进入web端的管理页面 ➡️ 点击存储 ➡️ 添加 ➡️ 选择本机存储,会多出来一堆选项,我来解释下几个比较关键的选项如何使用,

  • 挂载路径:这里可以填自己容易记的名称,比如和刚才的文件夹一样,也可以嵌套到已经存在的文件夹下。除了常规的字符串,还有一种用法,填一个长的随机字符串,比如一个uuid,或者用openssl rand -hex 16命令生成一个,由于使用了https,这一段路径是无法被外界探测到的,这也是一种加密方式,有点类似于私有的gist,不同之处在于私有gist后面一段hash会随内容变化而变化,而这里的不会。此处假设我填一个2c815e094039bdda4c867c18960b054d
  • WebDAV 策略:本地存储可选本地代理或使用代理URL,由于已经套了Cloudflare的CDN,因此这里选择本地代理即可
  • 启用签名:这同样是一种加密方式,和前面提到的路径用长字符串不同,这个签名是加在URL的参数中的,而且每个文件是不一样的,且可以设置过期时间。
  • 根文件夹路径:这里的路径是容器内的路径,即/opt/alit/data/test,必须确保这里填的路径存在,否则会报错
  • 创建文件夹权限:这指的是在根文件夹下新创建的文件夹的权限,一般是755
  • 回收站路径:这里可以保持默认,即没有回收站,如果设置,注意需要确保文件夹是存在的

都设置好之后,点击最下面的添加,一个存储就添加好了,此时可以点击左边的主页按钮到主页进行查看。

添加一个WebDAV专用用户

一切顺利的话,下一步我们来添加一个只有该目录WebDAV权限的用户。进入管理页面 ➡️ 点击用户 ➡️ 添加,自行设置用户名和密码。这里假设分别为user password

接着到基本路径这里,如果选择/root,那么根目录的所有目录,包括后续添加的,该用户都能看见; 如果选择刚才的挂载路径,即/2c815e094039bdda4c867c18960b054d,那么该用户将只能看到这个目录下的文件,并且这个用户是看不到2c815e094039bdda4c867c18960b054d这串路径的,这里选择后者。

权限选择Webdav 读取Webdav 管理,这样此用户将只能通过WebDAV api来管理目录,而无法通过alist的api管理。

rclone配置

下面使用rclone来实际挂载,安装就略过了,直接配置。

由于交互式太麻烦了,可以直接把下面这段配置放到~/.config/rclone/rclone.conf

1
2
3
4
5
6
[webdav-test]
type = webdav
url = https://my.domain/dav
vendor = other
user = user
pass = zZzF8wsKEkniXs7_OvZ5uoMjFY5O6KAQ

其中中括号内的是存储的名称,密码是用rclone obscure 'password'命令生成的。

接着运行rclone mkdir webdav-test:/test,没报错就是成功了,用rclone lsd webdav-test:来验证,可以看到test文件夹的相关信息。

总结

拥有一个自己的文件服务器之后,做很多事情就很方便了,相比传统的FTP/FTPS/WEBDAV等文件服务器,alist的优势就在于简单、方便、稳定。

容器化的配置相当简单;自带实用的web界面,既可以利用其WebDAV特性来写一些自动化脚本,又能够通过web端进行文件管理,相当方便;自由组合各种存储方式,让人拥有一个相当稳定的文件服务器(可以保持路径不变替换其对应的存储介质)。