FileBrowser Quantum 是极简经典文件管理器。它将所有功能都打包在了一个轻量高效的单文件二进制程序中。本篇介绍如何部署。

第一步:下载官方二进制文件

访问 FileBrowser Quantum GitHub Releases 页面,根据你的服务器架构(如 linux-amd64 或 linux-arm64)下载最新的稳定版二进制包。

以常用的 64 位 Linux 系统(AMD64)为例:

1
2
3
4
5
6
7
8
# 下载压缩包
wget https://github.com/gtsteffaniak/filebrowser/releases/download/v2.0.0-stable/linux-amd64-filebrowser

# 将主程序移动到系统可执行路径
sudo mv linux-amd64-filebrowser /usr/local/filebrowserquantum/filebrowser

# 赋予执行权限
sudo chmod +x /usr/local/filebrowserquantum/filebrowser

第二步:创建配置文件

在 /usr/local/filebrowserquantum 目录下创建网盘的全局配置文件 config.yaml:

1
2
3
4
5
6
7
8
9
10
cd /usr/local/filebrowserquantum/

sudo ./filebrowser setup
# 安装需求填写各参数,no 的提示填写 yes。我这里以 jinzhongxu 用户为例

# 设置登录密码
sudo ./filebrowser user set jinzhongxu --password

# 提升为管理员用户
sudo ./filebrowser user promote jinzhongxu

运行上面命令后,会生成 config.yaml 文件:

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
server:
logging:
- levels: "info|warning|error"
apiLevels: ""
output: "stdout"
noColors: false
json: false
utc: false
apiFilter: ""
sources:
- path: "/home/jinzhongxu"
config:
defaultPermissions:
view: true
download: true
modify: true
delete: true
create: true
database:
path: "./filebrowser.sqlite"
auth:
adminUsername: "**hidden**"
frontend:
name: "FileBrowser"
userDefaults:
account:
permissions:
share: true
http:
port: 8008
# 下面是手动增加
baseURL: "/icloud"
trustProxyHeaders: true

第三步:配置 Systemd 开机自启服务

为了让程序在后台稳定运行,并随系统开机自动启动,我们为其编写一个 Systemd 服务文件:

1
sudo vim /etc/systemd/system/filebrowserquantum.service

写入以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=filebrowser-quantum daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/filebrowserquantum/filebrowser -c config.yaml
User=root
Group=root
WorkingDirectory=/usr/local/filebrowserquantum/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

保存并退出,然后应用并启动服务:

1
2
3
4
5
6
7
8
# 重新加载 Systemd 配置
sudo systemctl daemon-reload

# 启动服务并设置开机自启
sudo systemctl enable --now filebrowserquantum

# 查看服务状态
sudo systemctl status filebrowserquantum

如果看到绿色的 active (running),说明程序已经成功在后台跑起来了!


第四步:登录与初始化

  1. 打开浏览器,输入 http://你的服务器IP:8008。
  2. 使用默认管理员账号 jinzhongxu 进行登录。

第五步:更新

撰写如下脚本:

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
cat > update-filebrowserquantum.sh <<-"EOF"
#!/bin/bash

# 配置变量
REPO="gtsteffaniak/filebrowser"
INSTALL_DIR="/usr/local/filebrowserquantum"
BINARY_PATH="${INSTALL_DIR}/filebrowser"
SERVICE_NAME="filebrowserquantum.service"
TMP_DIR="/tmp/filebrowser_update"

# 🧦 SOCKS5 代理配置
PROXY="socks5://127.0.0.1:80"

# 封装 curl 命令(确保包含 -L 自动跟随重定向)
function curl_cmd() {
if [ -n "$PROXY" ]; then
curl --socks5-hostname "$PROXY" -L "$@"
else
curl -L "$@"
fi
}

echo "🔍 正在检查本地版本..."
if [ -f "$BINARY_PATH" ]; then
LOCAL_VERSION=$($BINARY_PATH version 2>&1 | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+-stable' | head -n1)
if [ -z "$LOCAL_VERSION" ]; then
LOCAL_VERSION=$($BINARY_PATH version 2>&1 | tail -n1 | awk '{print $NF}')
fi
else
LOCAL_VERSION="none"
echo "⚠️ 未找到本地二进制文件,将直接安装最新稳定版。"
fi
echo "📦 本地当前版本: ${LOCAL_VERSION}"

echo "🌐 正在通过代理获取最新稳定版发布信息..."
API_URL_LATEST="https://api.github.com/repos/${REPO}/releases/latest"

API_RESPONSE=$(curl_cmd -sS "$API_URL_LATEST")
CURL_STATUS=$?

if [ $CURL_STATUS -ne 0 ]; then
echo "❌ 错误: 网络请求失败 (curl 退出码: $CURL_STATUS)。请检查代理服务是否开启。"
exit 1
fi

if [ -z "$API_RESPONSE" ]; then
echo "❌ 错误: GitHub 返回了空内容,请检查网络。"
exit 1
fi

# 精准解析最新版本号
#curl -fsSL https://api.github.com/repos/gtsteffaniak/filebrowser/releases/latest | grep tag_name | sed -E 's/.*"(.*)".*/\1/' | head -n1
LATEST_VERSION=$(echo "$API_RESPONSE" | grep tag_name | sed -E 's/.*"(.*)".*/\1/')

if [ -z "$LATEST_VERSION" ] || [ "$LATEST_VERSION" = "null" ]; then
echo "❌ 错误: 无法从 JSON 响应中解析出最新版本号。"
exit 1
fi
echo "🚀 线上最新稳定版本: ${LATEST_VERSION}"

# 比对版本
if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ]; then
echo "✅ 已经是最新版本,无需更新。"
exit 0
fi

echo "🔄 发现新版本!准备开始更新..."

# 确认系统架构
ARCH=$(uname -m)
case "$ARCH" in
x86_64) ARCH_SUFFIX="linux-amd64" ;;
aarch64) ARCH_SUFFIX="linux-arm64" ;;
armv7l) ARCH_SUFFIX="linux-armv7" ;;
*) echo "❌ 错误: 暂不支持的系统架构: $ARCH"; exit 1 ;;
esac

# 使用 jq 精准匹配对应架构的 Assets 下载链接
DOWNLOAD_URL=$(echo "$API_RESPONSE" | jq -r ".assets[] | select(.name | contains(\"${ARCH_SUFFIX}\")) | .browser_download_url" | head -n1)

if [ -z "$DOWNLOAD_URL" ] || [ "$DOWNLOAD_URL" = "null" ]; then
echo "❌ 错误: 无法在 Release Assets 中找到匹配架构 (${ARCH_SUFFIX}) 的下载链接。"
exit 1
fi

# 创建临时目录
mkdir -p "$TMP_DIR"
cd "$TMP_DIR" || exit

# 从 URL 中提取文件名 (例如:linux-amd64-filebrowser)
FILE_NAME=$(basename "$DOWNLOAD_URL")

echo "📥 正在下载新版本: ${FILE_NAME} ..."
if ! curl_cmd -o "$FILE_NAME" "$DOWNLOAD_URL"; then
echo "❌ 错误: 下载失败。"
rm -rf "$TMP_DIR"
exit 1
fi

# 核心适配:新版本的发布包直接就是二进制文件本身,不再套用 tar.gz 压缩
echo "📦 正在准备二进制文件..."
if [[ "$FILE_NAME" == *.tar.gz ]]; then
tar -xzf "$FILE_NAME"
elif [[ "$FILE_NAME" == *.zip ]]; then
unzip -q "$FILE_NAME"
else
# 针对 v2.0.1+ 直接重命名为标准执行文件名
mv "$FILE_NAME" filebrowser
fi

if [ ! -f "filebrowser" ]; then
echo "❌ 错误: 未能在下载产物中定位到 filebrowser 执行文件。"
rm -rf "$TMP_DIR"
exit 1
fi

# ------- 以下涉及系统操作,使用 sudo 提权 -------
echo "🛑 正在停止 ${SERVICE_NAME} 服务..."
sudo systemctl stop "$SERVICE_NAME"

echo "💾 正在备份旧版本至 ${BINARY_PATH}.bak ..."
if [ -f "$BINARY_PATH" ]; then
sudo cp "$BINARY_PATH" "${BINARY_PATH}.bak"
fi

echo "🚚 正在替换二进制文件并修正权限..."
sudo mv filebrowser "$BINARY_PATH"
sudo chmod +x "$BINARY_PATH"
sudo chown root:root "$BINARY_PATH"

echo "▶️ 正在重启 ${SERVICE_NAME} 服务..."
sudo systemctl start "$SERVICE_NAME"

# 检查服务状态
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
echo "✨ 更新成功!当前已成功运行最新稳定版 ${LATEST_VERSION}"
rm -rf "$TMP_DIR"
else
echo "❌ 警告: 服务未能成功启动!正在尝试还原备份..."
if [ -f "${BINARY_PATH}.bak" ]; then
sudo mv "${BINARY_PATH}.bak" "$BINARY_PATH"
sudo systemctl start "$SERVICE_NAME"
echo "⏪ 已还原至旧版本。请检查日志: journalctl -u ${SERVICE_NAME}"
fi
rm -rf "$TMP_DIR"
exit 1
fi

EOF

参考资料: