Thank you for reading this post, don't forget to subscribe!
В Seafile данные не хранятся в виде файлов а разбиты на блоки. Это позволяет эффективно использовать механизм дедупликации данных. Но иногда администратору сервера необходимо получить доступ к данным Seafile как в обычной файловой системе, для этого используется расширение seaf-fuse.
Seaf-fuse является реализацией виртуальной файловой системы FUSE. Этот скрипт монтирует всё содержимое Seafile в папку (которая называется "mount point"), так что мы получаем доступ ко всем файлам Seafile так же, как к обычной папке на сервере.
Примечания:
- Доступ к зашифрованным папкам с помощью seaf-fuse не предоставляется.
- Данные доступны только для чтения.
- В debian/centos для монтирования папки FUSE пользователь должен быть в группе "fuse".
Что хочется получить:
- Seafile настроен на Ubuntu.
- Я хочу все данные Seafile смонтировать в директорию /opt/seafile-fuse.
- Все службы Seafile у меня работают под пользователем sf, поэтому seaf-fuse тоже будет запускаться под этим же пользователем.
- Монтирование директории должно происходить автоматически после перезагрузки сервера (systemd).
Ссылки
https://manual.seafile.com/extension/fuse/
Как использовать seaf-fuse
Создаём точку монтирования, назначаем владельцем пользователя, от имени которого работает seafile:
mkdir /opt/seafile-fuse
chown sf\: /opt/seafile-fuse
У меня Ubuntu, поэтому для монтирования директории пользователь должен быть участником группы fuse. Создадим группу и добавим в неё пользователя:
groupadd fuse
usermod -aG fuse sf
Для проверки можно запустить скрипт seaf-fuse от имени пользователя, под которым работает seafile:
/opt/seafile-server-latest/seaf-fuse.sh start /opt/seafile-fuse
Можно и под рутом запустить, но скрипт создаст лог файл, владельцем которого будет root. После этого не получится просто так запустить скрипт под другим пользователем, поймаем ошибку:
Starting seaf-fuse, please wait …
Failed to init log.
Failed to start seaf-fuse
Нужно сначала удалить лог файл. Или сменить владельца на пользователя, под которым работает seaf-fuse.
В папке /opt/seafile-fuse появится содержимое Seafile. Пример содержимого:
1 2 3 4 5 6 7 |
$ ls -lhp /opt/seafile-fuse drwxr-xr-x 2 root root 4.0K Jan 1 1970 abc@abc.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 foo@foo.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 plus@plus.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 sharp@sharp.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 test@test.com/ |
Верхний уровень библиотек — папка с именем пользователя Seafile. Внутри папки пользователя библиотеки:
1 2 3 4 |
$ ls -lhp /opt/seafile-fuse/abc@abc.com drwxr-xr-x 2 root root 924 Jan 1 1970 5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/ drwxr-xr-x 2 root root 1.6K Jan 1 1970 a09ab9fc-7bd0-49f1-929d-6abeb8491397_My Notes/ |
Внутри библиотек :
1 2 3 4 |
$ ls -lhp /opt/seafile-fuse/abc@abc.com/5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/ -rw-r--r-- 1 root root 501K Jan 1 2021 image.png -rw-r--r-- 1 root root 501K Feb 1 2021 sample.jpeg |
Для остановки монтирования:
/opt/seafile-server-latest/seaf-fuse.sh stop
По умолчанию доступ к содержимому имеет пользователь root, дадим доступ всем пользователям сервера. Редактируем файл /etc/fuse.conf.
Раскомментируем опцию:
user_allow_other
Для проверки можно запустить скрипт seaf-fuse от имени пользователя, под которым работает seafile, с параметрами:
/opt/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse
В папке /opt/seafile-fuse появится содержимое Seafile. Доступ к содержимому имеют все пользователи.
Для остановки монтирования:
/opt/seafile-server-latest/seaf-fuse.sh stop
Автоматизируем запуск seaf-fuse
Для systemd
Debian 8 и старше, Linux Ubuntu 15.04 и старше
${seafile_dir} — измените переменную на путь к вашей директории Seafile.
Работаем под рутом. Создаём сервис seafile:
sudo vim /etc/systemd/system/seafile.service
Содержимое:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Unit] Description=Seafile # add mysql.service or postgresql.service depending on your database to the line below After=network.target [Service] Type=forking ExecStart=${seafile_dir}/seafile-server-latest/seafile.sh start ExecStop=${seafile_dir}/seafile-server-latest/seafile.sh stop LimitNOFILE=infinity User=seafile Group=seafile [Install] WantedBy=multi-user.target |
Создаём сервис seahub:
sudo vim /etc/systemd/system/seahub.service
Содержимое:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=Seafile hub After=network.target seafile.service [Service] Type=simple # change start to start-fastcgi if you want to run fastcgi ExecStart=${seafile_dir}/seafile-server-latest/seahub.sh start ExecStop=${seafile_dir}/seafile-server-latest/seahub.sh stop User=seafile Group=seafile [Install] WantedBy=multi-user.target |
Если вы используете seafile console client, то понадобится ещё один сервис seafile-client.
vim /etc/systemd/system/seafile-client.service
Содержимое:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[Unit] Description=Seafile client # Uncomment the next line you are running seafile client on the same computer as server # After=seafile.service # Or the next one in other case # After=network.target [Service] Type=oneshot ExecStart=/usr/bin/seaf-cli start ExecStop=/usr/bin/seaf-cli stop RemainAfterExit=yes User=seafile Group=seafile [Install] WantedBy=multi-user.target |
Добавим автозапуск seaf-fuse в systemd.
${seafile_dir} — измените переменную на путь к вашей директории Seafile. У меня /opt.
User и Group — измените на своего пользователя и группу.
Работаем под рутом. Создаём сервис seafile-fuse:
sudo vim /etc/systemd/system/seafile-fuse.service
Сервис будет запускаться после seafile и seahub. Содержимое:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=Seafile fuse After=network.target seafile.service seahub.service [Service] Type=forking ExecStart=${seafile_dir}/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse ExecStop=${seafile_dir}/seafile-server-latest/seaf-fuse.sh stop LimitNOFILE=infinity User=sf Group=sf [Install] WantedBy=multi-user.target |
Настраиваем автозагрузку:
systemctl daemon-reload
systemctl enable seafile-fuse
Проверяем:
systemctl start seafile-fuse
systemctl status seafile-fuse
Теперь после загрузки сервера папка с содержимым Seafile будет монтироваться автоматически.