Добавить в корзинуПозвонить
Найти в Дзене

Настройка Seafile server pro и интеграциия с S3 minio

01.05.2025
Официальный сайт проекта https://www.seafile.com
Cтатью писал Игольников Игорь. Seafile — это открытая система облачного хранения и синхронизации файлов, предназначенная для частных облаков и командной работы. Она позволяет организациям и частным пользователям создавать собственные серверы для хранения, синхронизации и обмена файлами, обеспечивая контроль над данными и конфиденциальность. Seafile состоит из нескольких компонентов:
Seafile Server: ядро, отвечающее за загрузку, скачивание и синхронизацию файлов.
Seahub: веб-интерфейс, написанный на Python с использованием Django, для управления файлами и администрирования.
Ccnet Server: служба RPC для внутренней коммуникации между компонентами.
Sdoc Server: сервер SeaDoc для редактирования документов.
База данных: используется MySQL или MariaDB (поддержка SQLite была прекращена с версии 11).
Memcached: кэш-сервер для ускорения работы.
Caddy/Nginx/Apache: веб-серверы для внешнего доступа и обработки SSL. Поскольку мы будем наст
Оглавление
https://www.seafile.com/en/home/
https://www.seafile.com/en/home/

01.05.2025
Официальный сайт проекта
https://www.seafile.com
Cтатью писал Игольников Игорь.

Seafile — это открытая система облачного хранения и синхронизации файлов, предназначенная для частных облаков и командной работы. Она позволяет организациям и частным пользователям создавать собственные серверы для хранения, синхронизации и обмена файлами, обеспечивая контроль над данными и конфиденциальность.

🔹Основные характеристики Seafile

  1. Саморазмещение (self-hosted):
    Seafile устанавливается на собственный сервер, что отличает его от публичных облачных сервисов, таких как Dropbox или Google Drive. Это даёт полный контроль над данными и исключает зависимость от сторонних провайдеров.
    Пользователь сам определяет объём хранилища и лимиты подключений, зависящие только от его инфраструктуры.
  2. Кроссплатформенность:
    Сервер поддерживает установку на
    Linux (Debian, Ubuntu, CentOS, RHEL) и Docker. Поддержка Windows была прекращена с версии 6.0.7, но возможна работа через Docker.
    Клиенты доступны для
    Windows, macOS, Linux, iOS, Android и Windows Phone 8.
    Веб-интерфейс позволяет работать с файлами без установки клиента.
  3. Библиотеки и синхронизация:
    Файлы организованы в библиотеки — наборы файлов, которые можно синхронизировать отдельно.
    Поддерживается выборочная синхронизация (только нужные папки) и синхронизация с несколькими серверами.
    Конфликты файлов обрабатываются на основе истории изменений, а не временных меток.
  4. Шифрование:
    Библиотеки можно шифровать с помощью пароля, заданного пользователем. Пароль не хранится на сервере, обеспечивая сквозное шифрование (end-to-end). Даже администратор сервера не может получить доступ к содержимому зашифрованных библиотек.
    Шифрование на стороне клиента доступно при использовании десктопного клиента.
  5. Совместная работа:
    Поддержка групп для удобного обмена файлами внутри команды.
    Возможность делиться файлами и папками с тонкой настройкой прав доступа (чтение/запись).
    Ссылки для внешнего доступа с паролем и сроком действия.
    Интеграция с Wiki (на основе Markdown), поддержка редактирования документов в браузере с WYSIWYG-редактором, полнотекстовый поиск и управление версиями.
  6. Виртуальный диск (Seafile Drive):
    Позволяет подключать хранилище как виртуальный диск, где файлы загружаются по запросу, экономя место на устройстве.
    Поддерживает работу в оффлайн-режиме.
  7. Интеграция и дополнительные функции:
    Поддержка редактирования офисных файлов (docx, pptx, xlsx) через интеграцию с Microsoft Office Online Server, OnlyOffice или Collabora Online.
    Встроенный просмотр файлов (видео, аудио, PDF, изображения, текст).
    Интерфейс WebDAV для интеграции с мобильными приложениями (например, Documents, GoodReader).
    Резервное копирование: периодическое через mysqldump и rsync или в реальном времени с помощью выделенного сервера.
  8. Версионирование и восстановление:
    Сохранение версий файлов и снимков папок для восстановления удалённых или изменённых данных.
    Инструмент seaf-fsck для проверки и восстановления повреждённых библиотек.

🔹Архитектура Seafile

Seafile состоит из нескольких компонентов:
Seafile Server: ядро, отвечающее за загрузку, скачивание и синхронизацию файлов.
Seahub: веб-интерфейс, написанный на Python с использованием Django, для управления файлами и администрирования.
Ccnet Server: служба RPC для внутренней коммуникации между компонентами.
Sdoc Server: сервер SeaDoc для редактирования документов.
База данных: используется MySQL или MariaDB (поддержка SQLite была прекращена с версии 11).
Memcached: кэш-сервер для ускорения работы.
Caddy/Nginx/Apache: веб-серверы для внешнего доступа и обработки SSL.

🔹Версии Seafile

  1. Community Edition (CE):
    Бесплатная, с открытым исходным кодом (лицензия AGPLv3 для серверного ядра).
    Подходит для личного использования или небольших команд.
    Поддерживает большинство функций, но без некоторых продвинутых возможностей профессиональной версии.
  2. Professional Edition:
    Платная, с проприетарными компонентами.
    Дополнительные функции: расширенная поддержка, интеграция с Active Directory/LDAP, более детализированные права доступа, приоритетная техническая поддержка.
    Бесплатна для 3 пользователей без необходимости лицензии. Для большего числа пользователей требуется покупка лицензии.

🔹Установка и настройка

Поскольку мы будем настраивать наш сервер Seafile для работы с облачным хранилищем S3, нам потребуется версия Professional Edition. К сожалению, версия Community Edition (CE) не будет работать напрямую с Minio.

sudo apt install -y pkg-config libmariadb-dev-compat build-essential
sudo apt install -y libmemcached-dev
sudo apt install -y python3 python3-pip python3-setuptools python3-venv mariadb-server nginx libmariadb-dev
sudo pip3 install --break-system-packages pillow pylibmc captcha jinja2 sqlalchemy psd-tools django-pylibmc django-simple-captcha python3-ldap mysqlclient
sudo systemctl start mariadb
sudo systemctl enable mariadb

🔹Создадим пользователя в mysql

sudo mysql -u root -p
CREATE DATABASE seafile_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'seafile'@'localhost' IDENTIFIED BY 'ваш_пароль';
GRANT ALL PRIVILEGES ON seafile_db.* TO 'seafile'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Чтобы скачать профессиональную версию программы, необходимо зарегистрироваться на сайте производителя https://www.seafile.com. Я, например, скачал файл seafile-pro-server_11.0.6_x86-64_Ubuntu.tar.gz.

mkdir /opt/seafile/
tar zxf seafile-pro-server_11.0.6_x86-64_Ubuntu.tar.gz -C /opt/seafile/
/bin/bash /opt/seafile/seafile-pro-server-11.0.6/setup-seafile-mysql.sh

-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have read seafile server manual at

        https://download.seafile.com/published/seafile-manual/home.md

Press ENTER to continue
-----------------------------------------------------------------

What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] dmosk_seafile

What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] seafile.local.ru

Which port do you want to use for the seafile fileserver?
[ default "8082" ]

Please choose a way to initialize seafile databases:
-------------------------------------------------------
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
[ 1 or 2 ] 1

What is the host of mysql server?
[ default "localhost" ]

What is the port of mysql server?
[ default "3306" ]

What is the password of the mysql root user?
[ root password ]

Enter the name for mysql user of seafile. It would be created if not exists.
[ default "seafile" ]
Enter the password for mysql user "seafile":
[ password for seafile ]
Enter the database name for ccnet-server:
[ default "ccnet-db" ]
Enter the database name for seafile-server:
[ default "seafile-db" ]
Enter the database name for seahub:
[ default "seahub-db" ]

---------------------------------
This is your configuration
---------------------------------
    server name:            dmosk_seafile
    server ip/domain:       seafile.dmosk.ru

    seafile data dir:       /opt/seafile/seafile-data
    fileserver port:        8082

    database:               create new
    ccnet database:         ccnet-db
    seafile database:       seafile-db
    seahub database:        seahub-db
    database user:          seafile
---------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------

🔹Небольшие настройки для первого запуска


В файле /opt/seafile/conf/gunicorn.conf.py меняем localhost на 0.0.0.0
bind = "0.0.0.0:8000"

В файле /opt/seafile/conf/seahub_settings.py
SERVICE_URL = "http://192.168.1.1"
FILE_SERVER_ROOT = "http://192.168.1.1:8082"

Подключаем
memcached /opt/seafile/conf/seahub_settings.py
CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
}


🔹Создадим службу и автозапуск

✅Если вы не создавали пользователя в Linux для запуска seafile, вы можете воспользоваться этим конфигурационным файлом. В противном случае вам потребуется изменить пользователя и предоставить необходимые права на директорию.

vi /etc/systemd/system/seafile.service
[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target
[Service]
Type=forking
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
LimitNOFILE=infinity
User=root
Group=root
[Install]
WantedBy=multi-user.target

vi /etc/systemd/system/seahub.service
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
Environment="LC_ALL=ru_RU.UTF-8"
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
User=root
Group=root
[Install]
WantedBy=multi-user.target

Хочу предупредить, что для версии 12 данная конфигурация работать не будет. Я подготовлю отдельную статью для этой версии.

🔹Настройка конфигурации для записи в S3

В официальной инструкции производитель рекомендует создать три бакета.

sf-block-objects, sf-commit-objects, sf-fs-objects
sf-block-objects, sf-commit-objects, sf-fs-objects

[commit_object_backend]
name = s3
host = 192.168.1.1:9000
endpoint = http://192.168.1.1:9000
bucket = sf-commit-objects
key_id = admin #логин от minio s3
key = secret-password #пароль от minio s3
path_style_request = true
aws_region = eu-central-1
path_style = true

[fs_object_backend]
name = s3
host = 192.168.1.1:9000
endpoint = http://192.168.1.1:9000
bucket = sf-fs-objects
key_id = admin #логин от minio s3
key = secret-password #пароль от minio s3
path_style_request = true
aws_region = eu-central-1
path_style = true

[block_backend]
name = s3
host = 192.168.1.1:9000
endpoint = http://192.168.1.1:9000
bucket = sf-block-objects
key_id = admin #логин от minio s3
key = secret-password #пароль от minio s3
path_style_request = true
aws_region = eu-central-1
path_style = true

🔹 Можно настроить NGINX для работы в реверсивном режиме.


apt install nginx
vi /etc/nginx/sites-enabled/default

server {
    listen            80 default_server;
    server_name       _;

    location / {
        proxy_pass          http://127.0.0.1:8000;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Host $server_name;
        proxy_set_header    X-Forwarded-Proto http;
        proxy_read_timeout  1200s;

        client_max_body_size    0;
    }

    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        client_max_body_size 0;
        proxy_connect_timeout  36000s;
        proxy_read_timeout  36000s;
    }
}

nginx -t
nginx -s reload