Caddy 简单配置下载站

不会用 fish 的 Arch 用户是我 | (つД`)

主要是在配置 Caddy 的时候踩了不少坑外加各种智商掉线
,怀疑我 s u d o y t e m c t l a u r 这几个键都快打出油花了(…包浆,包浆

环境

结构

1
2
3
4
5
6
7
8
└── yourdomain.com (未使用,可自定义)
├── file.yourdomain.com (下载站 {path}/public)
| ├── file.yourdomain.com/dl (AriaNg 面板 {path}/public/dl)
| └── 可直链下载文件 ...
└── filem.yourdomain.com (文件管理面板 {path})
├── database.db (Filemanager 数据库,默认账户密码: admin admin)
| (若忘记密码可删除重置)
└── public/ (即下载站目录)

安装

1
2
3
$ yaourt -S caddy aria2 aria-ng aria-ng-deploy
# {path}/public 为下载站目录绝对路径,可自行设定,注意目录权限
$ cp /usr/share/aria-ng-deploy {path}/public/dl -r

这里偷懒使用AUR安装了,记得在安装的时候编辑PKGBUILD,选择自己想要的插件,
这里我选用filemanagerdns-cloudflare。手动安装方法请自行搜索。

配置

Caddy 配置

仅供参考,详细配置请见Caddy 官方文档,配置文件目录/etc/caddy/

默认的caddy.conf中有import caddy.conf.d/*.conf一行,
用于导入文件夹下的配置文件,文中为了粘贴方便全都放在单个配置文件中,下为caddy.conf配置。

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
*:80 {
# 80 端口 Caddy 默认页面
root /usr/share/caddy
# 80 端口指向站点
# proxy / https://yourdomain.com
}

# 下载站页面,使用了子域名
file.yourdomain.com {
# {path} 同上,注意目录权限
root {path}/public
# 开放式下载站,若 browse 未指定参数,则默认显示 root 目录
browse
# tls 验证,替换成你自己的邮箱
tls [email protected]

# 如果你使用 Cloudflare 的话可以在安装插件之后使用
# tls {
# dns cloudflare
# }
# gzip 压缩,压缩程度可在 1~9 之间选择
gzip {
level 4
}
# 开启缓存
cache
# 反向代理 aria2 rpc 服务端口,以实现 https 下连接 aria2 服务
proxy /jsonrpc localhost:6800
# 为 ariaNG 面板设置简易认证
basicauth /dl username password
}

# filemanager 页面我这里用另外一个子域名隔开了
filem.yourdomain.me {
root {path}
# tls 验证,同上
tls [email protected]
# tls {
# dns cloudflare
# }

filemanager / {path} {
database {path}/database.db
allow_commands true
allow_edit true
allow_new true
allow_publish true
}
}

之前在配置 filemanager 总是遇到 “read only file system” 报错,仔细一看 systemd 配置文件,
上面ReadWritePaths一行设置了可读写的目录,在后面加上自己的{path}就好。下为caddy.service 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network.target

[Service]
User=http
Group=http
Environment=CADDYPATH=/var/lib/caddy
EnvironmentFile=-/etc/caddy/envfile
ExecStart=/usr/bin/caddy -log stdout -agree -conf /etc/caddy/caddy.conf -root /tmp
ExecReload=/usr/bin/kill -USR1 $MAINPID
LimitNOFILE=1048576
LimitNPROC=64
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/caddy /var/log/caddy {path}
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Cloudflare 配置(或者其他 CDN 加速服务)

Cloudflare

添加站点,并且在 Crypto 版块开启全站 https,以及自动改写 http 为 https,
在 DNS 版块添加上面的两个子级域名即可。

aria2 配置

aria2 官方文档

aria2.conf配置见下,将<TOKEN>替换成自己的,建议长度至少为16位。
因为在 Caddy 中为 rpc 默认端口6800配置了反向代理,所以这里为了安全考虑设置仅监听本地。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 开启 rpc 服务
enable-rpc=true
# 允许其他来源
rpc-allow-origin-all=true
# 监听本地 localhost:6800
rpc-listen-all=false
# 以守护进程模式启动(后台运行)
daemon=true
# 设置令牌,欢迎脸滚键盘
rpc-secret=<TOKEN>
# 文件预分配方式,NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=trunc
# 默认下载目录,之后可在面板中设置
dir={path}
# 断点续传
continue=true

启动

设置别名,以减少调试时候的输入量。

安装 fish
后可以通过alias设置别名,通过funcsave保存配置

1
2
$ alias sctl "sudo systemctl"
$ funcsave sctl

启动 systemd 服务并设为开机启动

1
2
3
4
$ sudo systemctl start caddy
$ sudo systemctl enable caddy
$ sudo systemctl start aria2
$ sudo systemctl enable aria2

在 AriaNg 面板添加 rpc 服务地址,直接将端口为:443,填入<TOKEN>即可正常连接。
例如:
https://file.yourdomain.com:443/jsonrpc

YAAW:
https://token:<TOKEN>@file.yourdomain.com/jsonrpc

小结

教程至此就结束了,如果 Caddy 无法启动,可查看 systemd service 日志手动排除问题。
如果提示重定向次数过多则将 caddy.conf 配置文件中所有的域名前面加上 http://
通过 CDN 强制跳转和改写到 https。