Skip to main content

JuiceFS 云服务部署指南

版本提示

这是一篇介绍 JuiceFS 云服务部署的文档,如果你想了解社区版客户端的部署方法,请参考 这篇文档

JuiceFS 云服务的部署方式遵循以下三个步骤:

  1. 创建文件系统
  2. 安装客户端
  3. 挂载使用

但请注意,JuiceFS 云服务需要在 Web 控制台创建文件系统,并且需要安装专用的「云服务客户端」。

接下来的内容假设你已经在官网控制台创建了文件系统,如果还没有,请参考 JuiceFS 云服务快速上手指南

环境要求

Python

JuiceFS 云服务客户端依赖 Python,建议使用 Python 3.5+ 以上版本 ,最低支持 Python 2.6+。

FUSE

JuiceFS 依赖 FUSE 实现对 POSIX 接口的支持,请检查系统的支持情况:

检查 Linux 的 FUSE 支持

从 Kernel 2.6.14+ 开始 FUSE 被集成到 Linux 内核,可以使用 uname -r 检查内核版本,使用 fusermount -V 检查 FUSE 版本。

注意

有些 Linux 发行版的内核可能没有预编译或没有加载 FUSE 模块,请查阅发行版手册了解如何编译和加载内核模块。

检查 macOS 的 FUSE 支持

macOS 默认不支持 FUSE 接口,需要先安装 macFUSE 实现对 FUSE 的支持。

注意

由于 macFUSE 需要安装内核扩展,如果你在 Apple M1 芯片的计算机上安装时发生错误,请参考《在搭载 Apple 芯片的 Mac 上更改启动磁盘安全性设置》将系统设置调整为「降低安全性」模式。

WSL(可选)

对于 Windows 10 版本 2004 以上或 Windows 11 的系统,可以通过 Windows Subsystem for Linux (WSL) 在 Linux 子系统中使用 JuiceFS 云服务客户端。

WSL 可以让你在 Windows 系统中运行原生的 GNU/Linux 的大多数命令行工具、实用工具和应用程序且不会产生传统虚拟机或双启动设置开销。

Windows 用户请参考文档《安装 WSL》。

手动部署

Linux

第一步 创建文件系统

如果你还没有创建文件系统,请先参照《JuiceFS 云服务快速上手指南》在 Web 控制台创建文件系统。

第二步 下载客户端

提示

「云服务客户端」不同于「社区版客户端」,如果需要同时使用二者,为了避免名称冲突,请修改程序名称进行区分。例如,可以将云服务客户端改名为 juicefs-cloud

使用 curlwget 下载并将云服务客户端安装到系统的可执行路径:

首先查看系统已设置的可执行路径:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

选择一个合适的路径安装客户端,比如安装到 /usr/local/bin/

sudo curl -L juicefs.com/static/juicefs -o /usr/local/bin/juicefs && sudo chmod +x /usr/local/bin/juicefs

第三步 挂载文件系统

挂载文件系统使用 mount 命令,格式如下:

sudo juicefs mount <JFS_NAME> <JFS_MOUNTPONT>

请将 <JFS_NAME> 替换为文件系统名,将 <JFS_MOUNTPONT> 替换为挂载点路径。

提示

初次挂载文件系统,命令行会询问 Token、对象存储 API 秘钥等信息。验证成功会在 $HOME/.juicefs 目录生成文件系统配置文件,再次挂载时会从配置文件自动读取秘钥信息,无需重复输入。

例如,将名为 jfs8 的文件系统挂载到 /mnt/jfs 目录:

mount-fs

sudo juicefs mount jfs8 /mnt/jfs

其中:

  • Token:对应的是文件系统 Token,可以在 Web 控制台文件系统设置中找到。
  • Access Key ID 和 Access Key Secret:是访问该文件系统绑定的对象存储 API 的密钥,可以参考采用的对象存储文档了解如何创建。需要至少为密钥配置这些对象存储访问权限:GetObjectPutObjectDeleteObject,在首次挂载文件系统时 JuiceFS 也会尝试写入、读取一些测试数据(并最终删除),如果密钥权限不足或密钥有误会导致挂载失败。

Linux 开机自动挂载

如果不想每次重启都手动挂载,可以将挂载信息写入 /etc/fstab 让它开机自动挂载。

将 JuiceFS 客户端拷贝到 /sbin 目录并重命名为 mount.juicefs,假设客户端在 /usr/local/bin:

$ sudo cp /usr/local/bin/juicefs /sbin/mount.juicefs

编辑 /etc/fstab 配置文件,另起新行添加以下记录:

<NAME-OF-JUICEFS>   <JFS_MOUNTPONT>     juicefs    _netdev   0 0

请将 <NAME-OF-JUICEFS> 替换为文件系统名称,将 <JFS_MOUNTPONT> 替换为挂载点路径。

例如,需要让名为 jfs8 的文件系统开机自动挂载到 /mnt/jfs

fstab

注意

CentOS 6 默认不会在启动时自动挂载网络文件系统,需要运行下面的命令启用自动挂载:

$ sudo chkconfig --add netfs

macOS

macOS 上的安装部署方法与 Linux 系统基本一致,请参考前文 Linux 部分下载安装客户端使用即可。但开机自动挂载的配置方式有所不同。

macOS 开机自动挂载

在本节内容中,请注意替换如下信息:

  • NAME:文件系统名
  • PATH_TO_JUICEFS:客户端的路径(如:/usr/local/bin/juicefs
  • MOUNTPOINT:挂载路径(如:/mnt/jfs

设置共涉及以下 4 个步骤:

  1. 在设置开机自动挂载之前,请先通过手动挂载的方式,确保文件系统可以正常挂载;

  2. ~/Library/LaunchAgents 下创建文件 com.juicefs.NAME.plist

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
    <string>com.juicefs.NAME</string>
    <key>ProgramArguments</key>
    <array>
    <string>PATH_TO_JUICEFS</string>
    <string>mount</string>
    <string>NAME</string>
    <string>MOUNTPOINT</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    </dict>
    </plist>
  3. 加载上一步创建的文件, 测试加载是否成功:

    launchctl load ~/Library/LaunchAgents/com.juicefs.NAME.plist
    launchctl start ~/Library/LaunchAgents/com.juicefs.NAME
    ls MOUNTPOINT
  4. 如果没有挂载成功,可以在上述 plist 文件中添加以下配置:

    <key>StandardErrorPath</key>
    <string>/tmp/mycommand.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/mycommand.out</string>

    通过以下命令就可以重新加载更新后的配置,查看输出:

    launchctl unload ~/Library/LaunchAgents/com.juicefs.NAME.plist
    launchctl load ~/Library/LaunchAgents/com.juicefs.NAME.plist
    cat /tmp/mycommand.out
    cat /tmp/mycommand.err

Windows

注意

JuiceFS 云服务 Windows 客户端暂未公开提供,如有需要请与我们联系

WSL 提供了功能完整的 Linux 子系统,你可以参照 Linux 部分在 WSL 中安装和部署 JuiceFS。

Docker

请参考《在 Docker 中使用 JuiceFS

自动化部署

获取文件系统信息

如前所述,手动部署方式在初次挂载文件系统时需要根据客户端的提示手动输入 Token、Access Key 等信息。而自动化部署方式通常不具备人机交互的条件,从客户端安装到部署挂载文件系统的整个过程都要自动完成,因此需要提前准备好文件系统的相关信息,以便于执行自动化任务的工具能够读取。

常用的预先提供信息的方式有以下 2 种:

通过「环境变量」提供信息

Linux 和 macOS 系统使用 export 命令创建临时的环境变量,例如,创建一个名为 JFS_TOKEN 的环境变量:

$ export JFS_TOKEN=bbab8801xxxxxxxx90ee3435f3095ffbd5

对于在终端或 Shell 脚本中访问,只需在变量名前添加 $ 符号:

$ echo $JFS_TOKEN
bbab8801xxxxxxxx90ee3435f3095ffbd5

有关于如何在你使用的其他自动化部署工具中读取系统的环境变量,请查阅相关文档了解详情。

通过「配置文件」提供信息

JuiceFS 云服务客户端内置的 auth 命令主要用作预先创建文件系统的配置文件,该配置文件记录了文件系统的名称、对象存储、Token 等关键信息。

在挂载文件系统时,客户端总是会先查找并从配置文件中读取密钥等信息,只有当配置文件不存在时才会要求用户手动输入。

例如,为名为 jfs8 的文件系统创建配置文件:

$ sudo juicefs auth jfs8 --token bbab8801xxxxxxxx90ee3435f3095ffbd5 --accesskey LTAI5txxxmxxxxgGDt --secretkey b8Szbxxxxxxxxxxxxxx0oHX1U9

其中,--token 用来指定文件系统的 Token,--accesskey--secretkey 是对象存储的 API 访问密钥。

创建好的配置文件位于 $HOME/.juicefs 目录中,但需要注意,因为这个命令中使用了 sudo 即以超级管理员身份执行的命令,因此配置文件会创建在 root 用户的家目录,即 /root/.juicefs/jfs8.conf

以下是一份配置文件示例:

{
"rootname": "jfs8",
"storage": "oss",
"region": "cn-shanghai",
"bucket": "jfs8.oss-cn-shanghai.aliyuncs.com",
"partitions": 0,
"replicated": false,
"compatible": false,
"public": false,
"blockSize": 4096,
"master": "aliyun-shanghai-1.meta.juicefs.com:9408",
"master_ip": [
"106.4.4.94",
"47.100.10.252",
"47.123.123.227"
],
"password": "216eea4xxxxxxxxxxx08e5e0cd2cab",
"compress": "lz4",
"accesskey": "LTAI5txxxmxxxxgGDt",
"secretkey": "b8Szbxxxxxxxxxxxxxx0oHX1U9",
"tested": 1,
"token": "bbab8801xxxxxxxx90ee3435f3095ffbd5"
}

Shell 脚本

#!/bin/sh
cd /tmp
curl -L juicefs.com/static/juicefs -o juicefs && chmod +x juicefs
sudo ./juicefs auth "$1" --token "$2" --accesskey "$3" --secretkey "$4"
sudo ./juicefs mount "$1" "$5"

将上述内容保存到 shell 脚本中,如 setup-juicefs.sh,然后使用下面的命令一次性完成挂载:

./setup-juicefs.sh $JFS_NAME $JFS_TOKEN $ACCESSKEY $SECRETKEY $JFS_MOUNTPONT
提示

--accesskey--secretkey 在某些环境中不是必需的,例如在 AWS 中可以采用 IAM Role 来完成认证。在这种情况下,需要给命令行提供占位符 '' 作为参数。

SaltStack

下面是使用 SaltStack 部署 JuiceFS 的代码样例:

/root/juicefs:
file.managed:
- source: https://juicefs.com/static/juicefs
- mode: 0755
- skip_verify: True

juicefs auth:
cmd.run:
- name: /root/juicefs auth {{jfs_name}} --token {{jfs_token}} --accesskey={{accesskey}} --secretkey={{secretkey}}
- creates: /root/.juicefs/{{jfs_name}}.conf
require:
- file: /root/juicefs

/jfs:
mount.mounted:
- device: {{jfs_name}}
- fstype: juicefs
- mkmnt: True
- opts: _netdev
- device_name_regex:
- JuiceFS:{{jfs_name}}
require:
- cmd: juicefs auth
提示

使用 JuiceFS 命令行工具挂载文件系统时,设备名称会自动添加 JuiceFS: 前缀。因此,需要使用正则表达式进行匹配。

Ansible

使用 Ansible 在本机挂载 JuiceFS 文件系统的 playbook 样例如下:

- hosts: localhost
tasks:
- set_fact:
jfs_bin: /usr/local/bin/juicefs

- get_url:
url: https://juicefs.com/static/juicefs
mode: 0755
dest: "{{jfs_bin}}"

- command: {{jfs_bin}} auth {{jfs_name}} --token {{jfs_token}} --accesskey={{accesskey}} --secretkey={{secretkey}}
args:
creates: /root/.juicefs/{{jfs_name}}.conf

- mount:
path: "{{jfs_path}}"
src: "{{jfs_name}}"
fstype: juicefs
opts: _netdev
state: mounted
提示

如果文件系统绑定的是腾讯云 COS 对象存储,--bucketjuicefs auth 的必要参数,请使用带有 APPID 的完整 endpoint。参见 如何获取对象存储的 API 密钥