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 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 daemonAfter =network.target[Service] Type =simpleExecStart =/usr/local/filebrowserquantum/filebrowser -c config.yamlUser =rootGroup =rootWorkingDirectory =/usr/local/filebrowserquantum/Restart =alwaysRestartSec =10 [Install] WantedBy =multi-user.target
保存并退出,然后应用并启动服务:
1 2 3 4 5 6 7 8 sudo systemctl daemon-reload sudo systemctl enable --now filebrowserquantum sudo systemctl status filebrowserquantum
如果看到绿色的 active (running),说明程序已经成功在后台跑起来了!
第四步:登录与初始化
打开浏览器,输入 http://你的服务器IP:8008。
使用默认管理员账号 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" REPO="gtsteffaniak/filebrowser" INSTALL_DIR="/usr/local/filebrowserquantum" BINARY_PATH="${INSTALL_DIR} /filebrowser" SERVICE_NAME="filebrowserquantum.service" TMP_DIR="/tmp/filebrowser_update" PROXY="socks5://127.0.0.1:80" 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 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 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 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 echo "📦 正在准备二进制文件..." if [[ "$FILE_NAME " == *.tar.gz ]]; then tar -xzf "$FILE_NAME " elif [[ "$FILE_NAME " == *.zip ]]; then unzip -q "$FILE_NAME " else mv "$FILE_NAME " filebrowser fi if [ ! -f "filebrowser" ]; then echo "❌ 错误: 未能在下载产物中定位到 filebrowser 执行文件。" rm -rf "$TMP_DIR " exit 1 fi 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
参考资料: