文章

使用 Docker 搭建 Alist 网盘挂载

Alist 一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs。

1、安装

1
docker run -d --restart=unless-stopped -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest

2、生成管理员密码

3.25.0以上版本将密码改成加密方式存储的hash值,无法直接反算出密码,如果忘记了密码只能通过重新 随机生成 或者 手动设置

1
2
3
4
# 随机生成一个密码
docker exec -it alist ./alist admin random
# 手动设置一个密码,`NEW_PASSWORD`是指你需要设置的密码
docker exec -it alist ./alist admin set NEW_PASSWORD

3、配置 Nginx

3.1、生成证书

1
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d alist.youhost.com --email '[email protected]'

3.2、将域名解析到服务器,利用 Nginx 代理请求 127.0.0.1:5244

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
upstream alist {
server 127.0.0.1:5244;
}

#HTTP 重定向到 HTTPS

server {
listen 80;
listen [::]:80;
server_name alist.youhost.com;

if ($host = alist.youhost.com) {
return 301 https://$host$request_uri;
}
return 404;
}

server {

listen 443 ssl;
listen [::]:443 ssl;

server_name alist.youhost.com; #你的域名,已经解析到服务器ip

#HTTP 重定向到 HTTPS
# if ($ssl_protocol = "") { return 301 https://$host$request_uri; }

#判断 $host 如果不是设置好的域名,就返回403页面,可以禁止 IP 访问 Web。
if ($host !~ (alist.youhost.com)$){
return 403;
}

# IP 访问跳转至域名,将域名替换成自己的。就是判断 $host 如果不是域名结尾的,就重定向至该域名。
# if ($host !~ (youhost.com)$){
# rewrite ^ https://youhost.com$request_uri?;
# }

# IP 访问跳转至域名,将 IP 和域名替换成自己的。判断是 IP 的,就重定向。
# if ($host ~ 192.168.1.1){
# rewrite ^ https://www.yourdomain.com$request_uri?;
# }


#证书位置
ssl_certificate /etc/letsencrypt/live/alist.youhost.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/alist.youhost.com/privkey.pem;

#证书配置
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #安全链接可选的加密协议
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #加密算法
ssl_prefer_server_ciphers on; #表示优先使用服务端加密套件。默认开启
ssl_session_timeout 10m; #缓存有效期
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;

client_max_body_size 525m;

#Nginx 默认的 client_max_body_size 配置大小为 1m,可能会导致你在 Halo 后台上传文件被 Nginx 限制,
#所以此示例配置文件加上了 client_max_body_size 1024m; 这行配置。当然,1024m 可根据你的需要自行修改

#日志
access_log /var/log/nginx/nginx.alist.access.log;
error_log /var/log/nginx/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://alist;
# the max size of file to upload
client_max_body_size 20000m;
}
#反代设置结束#

#禁止访问的文件或目录
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}
#禁止访问的文件或目录

}

3.3、验证并重载 nginx 配置

1
nginx -t
1
nginx -s reload

4、更新

4.1、停止并移除旧容器

1
docker stop alist && docker rm alist

4.2、拉取最新镜像

1
docker pull xhofe/alist:latest

4.3、重新安装

1
docker run -d --restart=unless-stopped -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest

5、设置

对照 官方文档 进行设置。


本文由作者按照 CC BY 4.0 进行授权