简单文件共享服务部署

0x0

一个无废话的极简文件共享URL:0x0

使用

上传文件:

1
2
# MIME使用multipart/form-data
curl -F 'file=@文件路径' [-F expires=24] [-F secret=密码] https://0x0.st

删除文件:

1
curl -F token=Token -F delete= https://0x0.st/文件名

filebrowser

项目名为 filebrowser/filebrowser

安装

在Github页面下载二进制包,内容极其简单,只有一个二进制文件。

快速启动

将文件所有者修改为Root,权限设为755,然后移动到/usr/local/bin,在不使用任何子命令的情况下,fliebrowser会启动临时服务器并自动创建初始数据库,命令参数如下,注意,这些临时选项仅用于没有数据库时的初次设置,会被已有数据库中的配置覆盖,如果已经建立了数据库,请使用config子命令或配置文件进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
filebrowser -c 配置文件路径 -d 数据库路径 其他选项
-a 设置监听IP,默认127.0.0.1
-p 设置监听端口,默认8080
--cache-dir 设置缓存目录,默认不设置
-t 设置TLS证书路径
-k 设置TLS密钥路径
-r 文件的根目录,默认二进制文件同目录
--disable-exec 禁用条件命令
--disable-preview-resize 禁用调整预览大小
--disable-thumbnails 禁用图标预览
--disable-type-detection-by-header 禁用文件类型检测
--noauth 危险!无认证模式启动,仅供调试
--username 指定创建的初始(UID=1)用户的用户名,默认为admin
--password 指定初始(UID=1)用户的密码,默认为admin,此密码应该为加密的密码,使用"filebrowser hash 明文密码"命令生成加密密码,不建议这么设置,应该在创建初始数据库后使用"users update"子命令修改

公用选项:
-c 配置文件路径,如果不设置,默认会搜索"./", "$HOME/", "/etc/filebrowser"这三个目录,这个配置文件在线上导入导出配置时有用
-d 设置数据库路径,默认二进制文件同目录下的filebrowser.db

输入filebrowser hash 明文密码生成加密密码。

执行filebrowser -a 0.0.0.0 -p 8080 -d ~/.local/filebrowser/filebrowser.db -r /共享路径以用户模式启动临时用户名和密码都为admin的服务器并创建初始数据库。

配置(进阶)

启动时,如果没有使用-d选项指定数据库路径,fliebrowser会直接在当前目录下创建初始配置数据库。

我们推荐先执行filebrowser -d /数据库路径 config init手动指定数据库路径在不启动的情况下进行初始化。这种情况下建立的数据库中全部为默认设置,也不会创建初始(UID=1)用户,需要之后使用filebrowser users add手动添加。

使用filebrowser -d /数据库路径 config cat可以显示数据库中的配置详情。

导出配置文件的一些关键选项内容如下,均为默认内容:

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
{
"server": {
"root": ".", // 共享文件目录
"tlsKey": "", // TLS私钥路径
"tlsCert": "", // TLS证书路径
"port": "8080", // 监听端口
"address": "127.0.0.1", // 监听IP
"log": "stdout", // 日志文件路径,默认标准输出
"enableThumbnails": false, // 启用图标预览
"resizePreview": false, // 启用预览大小调整
"enableExec": false, // 启用命令执行功能
"typeDetectionByHeader": false // 启用文件类型检测
},
"settings": {
"key": "", // 序列号
"signup": false, // 允许注册
"createUserDir": false, // 允许创建用户目录
"userHomeBasePath": "/users", // 用户目录存储路径,这是相对于root的路径
"defaults": {
"scope": ".", // 默认访问目录,这是相对于root的路径
"locale": "en", // 默认语言
"viewMode": "list", // 默认显示模式
"singleClick": false, // 默认单击打开
"sorting": { // 默认排序模式
"by": "name", // name, size, modified
"asc": false
},
"perm": {
"admin": false, // 用户默认是否有管理员权限
"execute": true, // 用户默认是否有执行权限
"create": true, // 用户默认是否有创建文件权限
"rename": true, // 用户默认是否有重命名权限
"modify": true, // 用户默认是否有修改权限
"delete": true, // 用户默认是否有删除权限
"share": true, // 用户默认是否有分享权限
"download": true // 用户默认是否有下载权限
},
"commands": [], // 允许用户在网页执行的命令列表
"hideDotfiles": false // 默认隐藏点开头文件
},
"authMethod": "json", // 认证方式,可选json, proxy, noauth
"branding": {
"name": "", // 网站名
"disableExternal": false, // 禁用外部链接
"files": "" // 自定义文件路径
}
}
}

这些配置可以通过filebrowser -d /数据库路径 config set --option="value"进行设置,对应选项如下,这些设置会写入数据库所以也是永久化的。

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
--root
--key
--cert
--port
--address
--log
--disable-thumbnails
--disable-preview-resize
--disable-exec
--disable-type-detection-by-header
--signup
--scope
--locale
--viewMode
--singleClick
--sorting.by
--sorting.asc
--perm.admin
--perm.create
--perm.delete
--perm.download
--perm.execute
--perm.modify
--perm.rename
--perm.share
--commands 字符串列表
--auth.method
--branding.name
--branding.disableExternal
--branding.files

--cache-dir

修改后,使用filebrowser export 路径可以导出配置文件。

之后可以使用filebrowser config import 路径导入外部配置文件到数据库。

一个模板配置文件(用于全局模式的):

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
{
"settings": {
"signup": false,
"createUserDir": false,
"userHomeBasePath": "/home",
"defaults": {
"scope": ".",
"locale": "zh-cn",
"viewMode": "list",
"singleClick": true,
"sorting": {
"by": "name",
"asc": false
},
"perm": {
"admin": false,
"execute": true,
"create": true,
"rename": true,
"modify": true,
"delete": true,
"share": true,
"download": true
}
},
"authMethod": "json"
},
"server": {
"root": "/srv/filebrowser",
"tlsKey": "",
"tlsCert": "",
"port": "8080",
"address": "0.0.0.0",
"log": "stdout",
"enableExec": false
},
"auther": {
"recaptcha": null
}
}

用户控制

使用用户控制命令时请使用Root权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
filebrowser users add|find|export|import|ls|rm|update

add 用户名 未加密密码 其他选项 # 添加用户,选项包括以上配置中的defaults中的大部分选项
export 路径 # 导出用户列表到文件
import 路径 # 从文件导入用户
find 用户名 # 搜索指定用户并打印详细信息
ls # 列出所有用户
rm ID|用户名 # 删除用户
update ID|用户名 选项 # 设置用户,选项包括以上配置中的defaults中的大部分选项

其他的选项:
--username|-u # 修改用户名
--password|-p # 修改密码

条件命令

1
2
3
4
5
filebrowser cmds add|ls|rm

add [before|after]_[copy|rename|delete|save] "command" 添加一条条件命令
rm [before|after]_[copy|rename|delete|save] 序号 删除一条条件命令
ls 列出所有条件命令

systemd

使用用户模式下的一个简单的systemd service文件模板为:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=File browser(User mode)
After=network.target

[Service]
Type=simple
ProtectSystem=yes
ExecStart=/usr/local/bin/filebrowser -c $HOME/.config/filebrowser.json -d $HOME/.local/filebrowser/filebrowser.db
SuccessExitStatus=0 1

[Install]
WantedBy=multi-user.target

相关配置文件请自行创建。

建议放在~/.config/systemd/user目录下,使用systemct --user enable启动。

系统全局安装标准方法

方法一

添加filebrowser用户
useradd -M -s /sbin/nologin filebrowser

在标准目录下创建filebrowser共享目录和数据库目录
mkdir /srv/filebrowser /var/lib/filebrowser /usr/local/etc/filebrowser

创建配置文件
nano /usr/local/etc/filebrowser/filebrowser.json
chown -R filebrowser:filebrowser /srv/filebrowser /var/lib/filebrowser /usr/local/etc/filebrowser

根据配置文件创建数据库
sudo -u filebrowser filebrowser -d /var/lib/filebrowser/filebrowser.db config init

导入配置文件
sudo -u filebrowser filebrowser -d /var/lib/filebrowser/filebrowser.db config import /usr/local/etc/filebrowser/filebrowser.json

创建systemd服务filebrowser.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=File browser
After=network.target

[Service]
Type=simple
User=filebrowser
Group=filebrowser
ProtectSystem=yes
ExecStart=/usr/local/bin/filebrowser -a 0.0.0.0 -c /usr/local/etc/filebrowser/filebrowser.json -d /var/lib/filebrowser/filebrowser.db
SuccessExitStatus=0 1

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now filebrowser.service

方法二(无配置文件)

添加filebrowser用户
useradd -M -s /sbin/nologin filebrowser

在标准目录下创建filebrowser共享目录和数据库目录
mkdir -p /srv/filebrowser/data
mkdir -p /srv/filebrowser/share
chown -R filebrowser:filebrowser /srv/filebrowser

创建systemd服务filebrowser.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=File browser
After=network.target

[Service]
Type=simple
User=filebrowser
Group=filebrowser
ProtectSystem=yes
ExecStart=/usr/local/bin/filebrowser -a 0.0.0.0 -d /srv/filebrowser/data/filebrowser.db -r /srv/filebrowser/share [-t SSL证书路径] [-k SSL密钥路径]
SuccessExitStatus=0 1

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now filebrowser.service

Docker搭建

命令为

1
2
3
4
5
6
7
8
9
docker run -itd \
-v /srv/filebrowser/share:/srv \ # 指定根目录路径映射
-v /srv/filebrowser/data/filebrowser.db:/database/filebrowser.db \ # 指定数据库路径映射
-v /srv/filebrowser/data/settings.json:/config/settings.json \ # 指定配置文件路径映射
-e PUID=$(id -u) \ # 指定启动用户UID
-e PGID=$(id -g) \ # 指定启动用户GID
-p 8080:80 \ # 端口映射
--restart on-failure \
filebrowser/filebrowser

使用docker cp your-container-name:/database/filebrowser.db /path/to/filebrowser.db提取数据库文件。

借鉴上方系统服务搭建流程进行搭建。

dufs

支持WebDAV、HTTPS的无配置文件简易小型文件服务器
sigoden/dufs

安装

下载二进制文件,将文件所有者和所有组修改为root,权限设为755,然后移动到/usr/local/bin即可。

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
dufs [选项] [共享目录根路径,默认为.]

选项:
-b, --bind IP 指定监听IP
-p, --port 端口号 指定监听端口,默认5000
--path-prefix 路径 指定根URL路径前缀
--hidden 目录名 隐藏某些目录,以','分隔
-a, --auth 认证信息 添加认证信息,格式为 /相对路径@用户名:密码
--auth-method 认证方法 设置认证方法,默认digest,可选basic, digest
-A, --allow-all 允许所有操作
--allow-upload 允许上传操作
--allow-delete 允许删除操作
--allow-search 允许搜索操作
--allow-symlink 允许链接操作
--allow-archive 允许归档操作
--enable-cors 启用CORS跨域资源共享
--render-index 请求目录时显示目录下的index.html,否则404
--render-try-index 请求目录时显示目录下的index.html,否则显示目录结构
--render-spa 使用SPA(单页面应用程序)
--assets 路径 使用自定义资源文件覆盖内置资源文件
--tls-cert 证书路径 指定TLS证书路径
--tls-key 私钥路径 指定TLS私钥路径
--log-format 日志格式 自定义日志格式
--completions Shell名 显示Shell补全脚本,可选bash, elvish, fish, powershell, zsh

系统全局安装标准方法

添加dufs用户
useradd -M -s /sbin/nologin dufs

在标准目录下创建dufs共享目录,并修改所有权
mkdir /srv/dufs
chown -R dufs:dufs /srv/dufs

创建systemd服务dufs.serivce,放在/etc/systemd/system目录下

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=dufs WebDAV server
After=network.target

[Service]
User=dufs
Group=dufs
ProtectSystem=yes
ExecStart=/usr/local/bin/dufs -b 0.0.0.0 -p 5000 -A -a /@admin:password /srv/dufs [--tls-cert 证书路径] [--tls-key 私钥路径]

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now dufs

Docker搭建

命令为

1
2
3
4
docker run -itd --name dufs \
-v /srv/dufs:/data \
-p 5000:5000 \
sigoden/dufs /data [选项,如-A]

选项与之前列出的保持一致。

alist

支持网盘同步和WebDAV的文件存储服务。

安装

alist-org/alist 下载二进制包,解压后执行chown root:root alistchmod 755 alist赋予权限,然后移动到/usr/local/bin/目录。

使用

1
2
3
4
5
6
7
8
9
admin       显示管理员信息
completion 生成Shell补全脚本
server 在指定IP下启动服务
restart 重启服务
start 以当前目录为工作目录,启动服务
stop 停止服务

--data 目录 指定配置文件所在目录和默认的数据保存目录,配置文件名为config.json
--force-bin-dir 强制使用当前目录作为配置文件保存目录

在管理-索引界面选择一种索引方式,保存后建立索引,即可使用搜索功能。

配置

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
{
"force": false,
"address": "0.0.0.0", // 监听的IP
"port": 5244, // 监听的端口
"site_url": "", // 监听的FQDN域名
"cdn": "", // 使用的CDM
"jwt_secret": "", // 唯一密钥
"token_expires_in": 48, // Token过期时间
"database": { //数据库配置
"type": "sqlite3", // 可选sqlite3,mysql或postgres
"host": "", // 数据库服务器IP
"port": 0, // 数据库服务器端口
"user": "", // 数据库用户名
"password": "", // 数据库用户密码
"name": "", // 数据库库名
"db_file": "/etc/alist/data.db", // sqlite3文件保存位置
"table_prefix": "x_", // 表的前缀
"ssl_mode": "" // 是否使用SSL连接数据库
},
"scheme": {
"https": false, // 是否使用HTTPS
"cert_file": "", // SSL证书路径
"key_file": "" // SSL密钥路径
},
"temp_dir": "/etc/alist/temp", // 临时文件目录
"bleve_dir": "/etc/alist/bleve", // bleve索引文件目录
"log": {
"enable": true, // 启用日志
"name": "/etc/alist/log/log.log", // 日志文件路径
"max_size": 10, // 最大日志文件大小
"max_backups": 5, // 最大日志备份数量
"max_age": 28, // 最大保存时间
"compress": false // 是否压缩
},
"max_connections": 0 // 最大并发连接数
}

系统全局安装标准方法

方法一

添加alist用户
useradd -M -s /sbin/nologin alist

在标准目录下创建alist共享目录和数据库目录,并修改所有权
mkdir /usr/local/etc/alist
mkdir /var/lib/alist
mkdir /var/log/alist
mkdir /srv/alist

创建配置文件/usr/local/etc/alist/config.json,内容如下:

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
{
"force": false,
"address": "0.0.0.0",
"port": 5244,
"site_url": "",
"cdn": "",
"jwt_secret": "",
"token_expires_in": 48,
"database": {
"type": "sqlite3",
"host": "",
"port": 0,
"user": "",
"password": "",
"name": "",
"db_file": "/var/lib/alist/data.db",
"table_prefix": "x_",
"ssl_mode": ""
},
"scheme": {
"https": false,
"cert_file": "",
"key_file": ""
},
"temp_dir": "/var/lib/alist/temp",
"bleve_dir": "/var/lib/alist/bleve",
"log": {
"enable": true,
"name": "/var/log/alist/alist.log",
"max_size": 10,
"max_backups": 5,
"max_age": 28,
"compress": true
},
"max_connections": 0
}

修改目录所有权:
chown -R alist:alist /usr/local/etc/alist
chown -R alist:alist /var/lib/alist
chown -R alist:alist /var/log/alist
chown -R alist:alist /srv/alist

创建systemd服务alist.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Alist web service
After=network.target

[Service]
User=alist
Group=alist
ProtectSystem=yes
ExecStart=/usr/local/bin/alist server --data /usr/local/etc/alist
Restart=on-failure

[Install]
WantedBy=multi-user.target

执行sudo -u alist alist admin --data /usr/local/etc/alist查看管理员信息。

执行systemctl enable --now alist启动服务。

进入管理页面,在存储-本机存储中添加/srv/alist作为本机存储服务根文件夹路径。

访问http[s]://IP:Web端口/dav[/挂载目录]挂载WebDAV,用户名密码与WebUI一致。

方法二(无配置文件)

添加alist用户
useradd -M -s /sbin/nologin alist

创建alist服务目录并修改所有权
mkdir -p /srv/alist/data
mkdir -p /srv/alist/share
chown -R alist:alist /srv/alist

创建systemd服务alist.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Alist web service
After=network.target

[Service]
User=alist
Group=alist
ProtectSystem=yes
WorkingDirectory=/srv/alist
ExecStart=/usr/local/bin/alist server --data /srv/alist/data
Restart=on-failure

[Install]
WantedBy=multi-user.target

执行sudo -u alist alist admin --data /srv/alist/data查看管理员信息。

执行systemctl enable --now alist启动服务。

进入管理页面,在存储-本机存储中添加将/srv/alist/share作为本机存储服务根文件夹路径。

访问http[s]://IP:Web端口/dav[/挂载目录]挂载WebDAV,用户名密码与WebUI一致。

Docker搭建

执行以下命令:

1
2
3
4
5
6
7
docker run --name=alist -d --restart=always \
-v /srv/alist:/opt/alist \
-p 5244:5244 \
-e PUID=0 \
-e PGID=0 \
-e UMASK=022 \
xhofe/alist

执行docker exec -it alist ./alist admin查看管理员信息。

执行docker exec -it alist mkdir /opt/alist/share创建共享目录。

进入管理页面,在存储-本机存储中添加将/opt/alist/share作为本机存储服务根文件夹路径

访问http[s]://IP:Web端口/dav[/挂载目录]挂载WebDAV,用户名密码与WebUI一致。

ghfs

一个轻量级的HTTP文件共享服务器,特点是基于Vue。

安装

mjpclab/go-http-file-server 下载二进制包,解压后执行chown root:root ghfschmod 755 ghfs赋予权限,然后移动到/usr/local/bin/目录。

使用

配置文件与选项格式相同,在配置文件中一行写一个选项。

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
--config  指定读取的配置文件,这会无视其他所有选项
--listen-plain 指定HTTP监听的套接字
--listen-tls 指定HTTPS监听的套接字
--hostname 指定监听的hostname
-r|--root 指定根URL目录
-R|--empty-root 不使用根URL
-a|--alias ":/url目录:/本机目录" 指定URL路径映射
--prefix 指定URL前缀
-/|--force-dir-slash 访问末尾必须带/
--default-sort 默认排序方式,可选n名称排序,e类型排序,s大小排序,t时间排序,_不排序
--global-restrict-access 指定禁止访问的IP
-U|--global-upload 全局允许上传
--upload 设置允许上传的目录,相对路径
--global-mkdir 全局允许创建
--mkdir-dir 设置允许创建的目录
--global-delete 全局允许删除
--delete 设置允许删除的目录,相对路径
-A|--global-archive 全局允许下载
--archive 设置允许下载的目录,相对路径
--global-cors 全局允许CORS
--cors 设置允许CORS的目录,相对路径
--global-auth 全局要求认证
--auth-dir 设置需要认证的目录
--user 用户名:密码 指定用户名和密码
-c|--cert 指定证书路径
-k|--key 指定密钥路径
--to-https 重定向到HTTPS
-S|--show 显示指定文件
-H|--hide 隐藏指定文件
-L|--access-log 指定access日志文件,默认的-表示标准输出
-E|--error-log 指定error日志文件,默认的-表示标准输出

系统全局安装标准方法

添加ghfs用户
useradd -M -s /sbin/nologin ghfs

在标准目录下创建ghfs共享目录和数据库目录,并修改所有权
mkdir /usr/local/etc/ghfs
mkdir /var/log/ghfs
mkdir /srv/ghfs

创建配置文件/usr/local/etc/ghfs/config.conf,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
--listen-plain :8080
--root /srv/ghfs
--global-auth
--user 用户名:密码
--global-upload
--global-mkdir
--global-delete
--global-archive
--global-cors
--cert 证书路径
--key 密钥路径
--hide '.*'

修改目录所有权:
chown -R ghfs:ghfs /usr/local/etc/ghfs
chown -R ghfs:ghfs /var/log/ghfs
chown -R ghfs:ghfs /srv/ghfs

创建systemd服务ghfs.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Go http file server
After=network.target

[Service]
User=ghfs
Group=ghfs
ProtectSystem=yes
ExecStart=/usr/local/bin/ghfs --config=/usr/local/etc/ghfs.conf
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

执行systemctl enable --now ghfs启动服务

CuteHttpFileServer

支持WebDAV的小型文件服务器,特色是有Windows下的GUI。

下载

CuteHttpFileServer 下载二进制包即可。

安装

下载二进制文件,将文件所有者修改为root,权限设为755,然后移动到/usr/local/bin即可。

使用

命令选项如下:

1
2
3
4
5
6
--path=  指定分享目录,用|分隔
--port= 监听的端口
--allow= 允许访问的IP,使用not()进行黑名单模式
--rule=用户名:密码:rwd 进行用户认证,空用户名和密码表示游客用户,用|分隔
--log= 指定日志目录
--file= 指定配置文件

配置文件格式如下,可以在 iscute.cn/asset/chfs.ini 获取:

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
# 监听端口
port=
# 共享根目录,通过'|'进行分割
path=
# IP地址过滤
allow=
# 账户控制规则
rule=
# 日志存放目录,如果赋值为空,表示禁用日志
log=
# 网页标题
html.title=
# 网页顶部的公告板。可以是文字,也可以是HTML标签,需要用一对``(反单引号)括住所有HTML标签。几个例子:
html.notice=
# 是否启用图片预览,true表示开启,false为关闭。默认开启
image.preview=
# 下载目录策略。disable禁用; leaf仅限叶子目录的下载; enable或其他值不进行限制。默认值为enable
folder.download=
# 设置后启用HTTPS,注意监听端口变为为443
# 指定certificate文件
ssl.cert=
# 指定private key文件
ssl.key=
# 设置会话的生命周期,单位:分钟,默认为30分钟
session.timeout=

系统全局安装标准方法

添加chfs用户
useradd -M -s /sbin/nologin chfs

在标准目录下创建chfs共享目录,并修改所有权
mkdir /srv/chfs
mkdir /usr/local/etc/chfs
chown -R chfs:chfs /srv/chfs
chown -R chfs:chfs /usr/local/etc/chfs

创建/usr/local/etc/chfs/chfs.conf文件,内容如下:

1
2
3
4
5
6
# 监听端口
port=
# 共享根目录,通过'|'进行分割
path=/srv/chfs
# 账户控制规则
rule=::r|用户名:密码:rwd

创建systemd服务chfs.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=chfs WebDAV server
After=network.target

[Service]
User=chfs
Group=chfs
ProtectSystem=yes
ExecStart=/usr/local/bin/chfs --file=/usr/local/etc/chfs/chfs.conf

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now chfs

Cloudreve

网络文件服务器,支持多家云厂商。

下载

cloudreve/Cloudreve) 下载二进制包即可。

安装

下载二进制文件,将文件所有者修改为root,权限设为755,然后移动到/usr/local/bin即可。

使用

命令选项如下:

1
2
3
4
5
6
--path=  指定分享目录,用|分隔
--port= 监听的端口
--allow= 允许访问的IP,使用not()进行黑名单模式
--rule=用户名:密码:rwd 进行用户认证,空用户名和密码表示游客用户,用|分隔
--log= 指定日志目录
--file= 指定配置文件

配置文件格式如下,可以在 iscute.cn/asset/chfs.ini 获取:

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
[System]
; 运行模式
Mode = master
; 监听端口
Listen = :5212
; 是否开启 Debug
Debug = false
; Session 密钥, 一般在首次启动时自动生成
SessionSecret = 23333
; Hash 加盐, 一般在首次启动时自动生成
HashIDSalt = something really hard to guess
; 呈递客户端 IP 时使用的 Header
ProxyHeader = X-Forwarded-For

; SSL 相关
[SSL]
; SSL 监听端口
Listen = :443
; 证书路径
CertPath = fullchain.pem
; 私钥路径
KeyPath = privkey.pem

; 启用 Unix Socket 监听
[UnixSocket]
Listen = /run/cloudreve/cloudreve.sock
; 设置产生的 socket 文件的权限
Perm = 0666

; 数据库相关,如果你只想使用内置的 SQLite 数据库,这一部分直接删去即可
[Database]
; 数据库类型,目前支持 sqlite/mysql/mssql/postgres
Type = mysql
; MySQL 端口
Port = 3306
; 用户名
User = root
; 密码
Password = root
; 数据库地址
Host = 127.0.0.1
; 数据库名称
Name = v3
; 数据表前缀
TablePrefix = cd_
; 字符集
Charset = utf8mb4
; SQLite 数据库文件路径
DBFile = cloudreve.db
; 进程退出前安全关闭数据库连接的缓冲时间
GracePeriod = 30
; 使用 Unix Socket 连接到数据库
UnixSocket = false

; 从机模式下的配置
[Slave]
; 通信密钥
Secret = 1234567891234567123456789123456712345678912345671234567891234567
; 回调请求超时时间 (s)
CallbackTimeout = 20
; 签名有效期
SignatureTTL = 60

; 跨域配置
[CORS]
AllowOrigins = *
AllowMethods = OPTIONS,GET,POST
AllowHeaders = *
AllowCredentials = false
SameSite = Default
Secure = lse

; Redis 相关
[Redis]
Server = 127.0.0.1:6379
Password =
DB = 0

; 从机配置覆盖
[OptionOverwrite]
; 可直接使用 `设置名称 = 值` 的格式覆盖
max_worker_num = 50

系统全局安装标准方法

方法一

添加cloudreve用户
useradd -M -s /sbin/nologin cloudreve

在标准目录下创建cloudreve共享目录,并修改所有权
mkdir /var/lib/cloudreve
mkdir /srv/cloudreve
mkdir /usr/local/etc/cloudreve
chown -R cloudreve:cloudreve /var/lib/cloudreve
chown -R cloudreve:cloudreve /usr/local/etc/cloudreve
chown -R cloudreve:cloudreve /srv/cloudreve

创建/usr/local/etc/cloudreve/cloudreve.conf文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[System]
Mode = master
Listen = :5212
Debug = false
SessionSecret =
ProxyHeader = X-Forwarded-For

[SSL]
Listen = :443
CertPath = fullchain.pem
KeyPath = privkey.pem

[Database]
DBFile = /var/lib/cloudreve/cloudreve.db

创建systemd服务cloudreve.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target

[Service]
User=cloudreve
Group=cloudreve
WorkingDirectory=/var/lib/cloudreve
ProtectSystem=yes
ExecStart=/usr/local/bin/cloudreve -c /usr/local/etc/cloudreve/conf.ini
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
StandardOutput=null

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now cloudreve

方法二(无配置文件)

添加cloudreve用户
useradd -M -s /sbin/nologin cloudreve

创建alist服务目录并修改所有权
chown -R cloudreve:cloudreve /srv/cloudreve

创建systemd服务alist.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target

[Service]
User=cloudreve
Group=cloudreve
WorkingDirectory=/srv/cloudreve
ProtectSystem=yes
ExecStart=/usr/local/bin/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
StandardOutput=null

[Install]
WantedBy=multi-user.target

执行systemctl enable --now cloudreve启动服务

Docker搭建

创建上传目录和头像目录:
mkdir -p /srv/cloudreve/uploads
mkdir -p /srv/cloudreve/avatar

创建配置文件和数据库文件
touch /srv/cloudreve/conf.ini
touch /srv/cloudreve/cloudreve.db

执行以下命令:

1
2
3
4
5
6
7
docker run -d \
-p 5212:5212 \
-v /srv/cloudreve/conf.ini:/cloudreve/conf.ini \
-v /srv/cloudreve/cloudreve.db/cloudreve/cloudreve.db \
-v /srv/cloudreve/uploads:/cloudreve/uploads \
-v /srv/cloudreve/avatar:/cloudreve/avatar \
cloudreve/cloudreve

webd

小型文件服务器。

下载

https://gwgw.ga/fidx.html#/webd/ 下载二进制包即可。

安装

下载二进制文件,将文件所有者修改为root,权限设为755,然后移动到/usr/local/bin即可。

使用

命令选项如下:

1
2
3
4
5
6
7
8
-c  指定配置文件,不再使用默认路径的
-h Webd.Hide
-B Webd.Browser
-l Webd.Listen 可指定多个
-w Webd.Root
-g Webd.Guest
-u 类似 Webd.User,需把空格用冒号替代,例如-u rlum:user1:pass1
配置文件和命令行参数一共能设置三个用户

配置文件格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Webd.Root
指定网盘文件的路径,更改后需移动原 web 目录下的 .Trash 文件夹到新路径下,否则无法删除文件

Webd.Listen
监听端口或特定的地址,支持多个,可配置成[::]:9212来同时监听IPv6和IPv4

Webd.Hide
隐藏托盘图标,无参数,该项仅支持 Windows

Webd.User
设置用户的权限、用户名和密码,支持两个用户,但使用同一目录
比如Webd.User rlumS user1 pass1表示设置user1的密码为pass1,具有r、l、u、m、S、T五种权限。
其中 r 表示访问文件,l 表示获取文件列表,u 表示上传文件,m 表示删除移动重命名文件,S 表示显示隐藏文件,T 表示使用网页播放媒体文件(可保存播放进度)。
注意需将安装包 web 目录下的 .player.htm 文件放到 Webd.Root 目录下才可使用 T 权限。

Webd.Guest
设置无需登录的访客权限,参考上面的权限组合;设置成0表示禁用访客。

Webd.Browser
用于指定自定义的浏览器路径;该项还能解决双击托盘图标无法弹出界面的问题。

系统全局安装标准方法

添加webd用户
useradd -M -s /sbin/nologin webd

在标准目录下创建webd共享目录,并修改所有权
mkdir /srv/webd
mkdir /usr/local/etc/webd
chown -R chfs:chfs /srv/webd
chown -R chfs:chfs /etc/webd

创建/usr/local/etc/webd/webd.conf文件,内容如下:

1
2
3
4
5
6
7
# 监听端口
Webd.Listen :9212
# 共享根目录,通过'|'进行分割
Webd.Root /srv/webd
# 账户控制规则
Webd.User rlumST admin admin
Webd.Guest 0

创建systemd服务webd.serivce,放在/etc/systemd/system目录下

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=webd Server
After=network.target

[Service]
User=webd
Group=webd
ProtectSystem=yes
ExecStart=/usr/local/bin/webd --file=/usr/local/etc/webd/webd.conf

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now webd

aliyundrive-webdav

将阿里云盘转换为WebDAV的程序。

下载

messense/aliyundrive-webdav 下载二进制包即可。

安装

下载二进制文件,将文件所有者修改为root,权限设为755,然后移动到/usr/local/bin即可。

使用

命令选项如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
qr    显示二维码

--host IP 监听IP,默认0.0.0.0
-p, --port 端口号 监听端口,默认8080
--client-id 客户端ID 阿里云盘客户端ID
--client-secret 客户端密钥 阿里云盘客户端密钥
-r, --refresh-token Token 阿里云盘Token
-U, --auth-user 用户名 WebDAV用户名
-W, --auth-password 密码 WebDAV密码
-I, --auto-index 自动生成index
--root 目录 根URL目录
-w, --workdir 目录 工作目录
--no-trash 禁用回收站
--read-only 只读模式
--tls-cert 证书路径 指定SSL证书
--tls-key 密钥路径 指定SSL密钥
--no-self-upgrade 并不进行自动升级
--prefer-http-download 倾向于使用HTTP下载

登录方法

  1. https://messense-aliyundrive-webdav-backendrefresh-token-ucs0wn.streamlit.app/ 获取Token。
  2. 执行aliyundrive-webdav qr login扫码获取Token。

系统全局安装标准方法

添加webdav用户
useradd -M -s /sbin/nologin webdav

在标准目录下创建aliyundrive-webdav共享目录,并修改所有权
mkdir /usr/local/etc/aliyundrive-webdav
chown -R webdav:webdav /usr/local/etc/aliyundrive-webdav

创建systemd服务aliyundrive-webdav.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=AliyunDrive WebDAV
After=network.target

[Service]
Type=simple
Environment="REFRESH_TOKEN=" "WEBDAV_AUTH_USER=" "WEBDAV_AUTH_PASSWORD="
ProtectSystem=yes
ExecStart=/usr/local/bin/aliyundrive-webdav --auto-index -w /usr/local/etc/aliyundrive-webdav --no-self-upgrade --host 0.0.0.0 -p 8080
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now aliyundrive-webdav

Docker搭建

创建目录
mkdir -p /srv/aliyundrive-webdav

拉取镜像
docker pull messense/aliyundrive-webdav

运行

1
2
3
4
5
6
docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \
-v /srv/aliyundrive-webdav:/etc/aliyundrive-webdav \
-e REFRESH_TOKEN='' \
-e WEBDAV_AUTH_USER=admin \
-e WEBDAV_AUTH_PASSWORD=admin \
messense/aliyundrive-webdav

aliyunpan

阿里云盘的CLI客户端,也可以用于WebDAV。

下载

tickstep/aliyunpan 下载二进制包即可。

安装

下载二进制文件,将文件权限设为755,然后移动到~/.local目录,然后创建软链接ln -s ~/.local/aliyunpan/aliyunpan ~/.local/bin/即可。

使用

登录方法
https://messense-aliyundrive-webdav-backendrefresh-token-ucs0wn.streamlit.app/ 获取Token。

子命令如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
login -RefreshToken=    登录阿里云盘账号
loglist 列出帐号列表
logout 退出阿里帐号
quota 获取当前帐号空间配额
su 切换阿里账号
token Token相关操作
who 获取当前帐号
clear, cls 清空控制台
history 显示命令历史
update 检测程序更新
config 显示和修改程序配置项
cd 切换工作目录
download, d 下载文件/目录
locate 获取文件下载链接
ls, l, ll 列出目录
mkdir 创建目录
mv 移动文件/目录
pwd 输出工作目录
recycle 回收站
rename 重命名文件
rm 删除文件/目录
share 分享文件/目录
tree 列出目录的树形图
upload, u 上传文件/目录

Docker部署

文件同步

拉取镜像
docker pull tickstep/aliyunpan-sync

运行

1
2
3
4
5
6
7
8
9
docker run -d --name=aliyunpan-sync \
--restart=always \
-v 备份路径:/home/app/data \
-e TZ="Asia/Shanghai" \
-e ALIYUNPAN_REFRESH_TOKEN="" \
-e ALIYUNPAN_PAN_DIR="云盘目录" \
-e ALIYUNPAN_SYNC_MODE="upload" \ # 可选upload仅上传,download仅下载,sync双向同步
-e ALIYUNPAN_TASK_STEP="sync" \ # 可选scan仅扫描,sync进行同步
tickstep/aliyunpan-sync

WebDAV

拉取镜像
docker pull tickstep/aliyunpan-webdav

运行

1
2
3
4
5
6
7
8
9
10
11
docker run -d --name=aliyunpan-webdav \
--restart=always \
-p 23077:23077 \
-e TZ="Asia/Shanghai" \
-e ALIYUNPAN_REFRESH_TOKEN="" \
-e ALIYUNPAN_AUTH_USER="admin" \
-e ALIYUNPAN_AUTH_PASSWORD="admin" \
-e ALIYUNPAN_WEBDAV_MODE="rw" \ # 可选rw读写,ro只读
-e ALIYUNPAN_PAN_DRIVE="File" \ # 可选File文件,Album相册
-e ALIYUNPAN_PAN_DIR="云盘目录" \
tickstep/aliyunpan-webdav

访问IP:23077进行使用。

go-file

基于go的文件共享服务,特点是自带图床和视频播放功能。

下载

songquanpeng/go-file 下载二进制包即可。

安装

下载二进制文件,将文件所有者修改为root,权限设为755,然后移动到/usr/local/bin即可。

使用

命令选项如下:

1
2
3
4
5
6
7
8
--host  监听的IP
--port 监听的端口
--enable-p2p 启用P2P
--p2p-port P2P端口
--no-browser 并不自动打开浏览器
--path 共享的文件目录
--video 共享的视频目录
--log-dir 日志目录

还有一些环境变量会影响功能:

1
2
3
REDIS_CONN_STRING  Redis数据库地址,格式为redis://user:redispw@IP:Port
SQL_DSN MySQL数据库地址,格式为user:password@tcp(IP:Port)/库名
SQLITE_PATH SQLite文件路径,默认为./.go-file.db

系统全局安装标准方法

添加go-file用户
useradd -M -s /sbin/nologin go-file

在标准目录下创建go-file共享目录,并修改所有权
mkdir /srv/go-file
mkdir /var/lib/go-file
chown -R go-file:go-file /srv/go-file
chown -R go-file:go-file /var/lib/go-file

创建systemd服务go-file.serivce,放在/etc/systemd/system目录下:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Go file
After=network.target

[Service]
Type=simple
Environment="SQLITE_PATH=/var/lib/go-file/go-file.db"
ProtectSystem=yes
ExecStart=/usr/local/bin/go-file --no-browser --path /srv/go-file

[Install]
WantedBy=multi-user.target

启动服务
systemctl enable --now go-file

Docker部署

拉取镜像
docker pull justsong/go-file

运行

1
2
3
4
5
docker run -d \
-p 3000:3000 \
-e TZ=Asia/Shanghai \
-v /srv/go-file:/data \
justsong/go-file

访问IP:3000进行使用。