01.05.2025
Официальный сайт проекта https://www.seafile.com
Cтатью писал Игольников Игорь.
Seafile — это открытая система облачного хранения и синхронизации файлов, предназначенная для частных облаков и командной работы. Она позволяет организациям и частным пользователям создавать собственные серверы для хранения, синхронизации и обмена файлами, обеспечивая контроль над данными и конфиденциальность.
🔹Основные характеристики Seafile
- Саморазмещение (self-hosted):
Seafile устанавливается на собственный сервер, что отличает его от публичных облачных сервисов, таких как Dropbox или Google Drive. Это даёт полный контроль над данными и исключает зависимость от сторонних провайдеров.
Пользователь сам определяет объём хранилища и лимиты подключений, зависящие только от его инфраструктуры. - Кроссплатформенность:
Сервер поддерживает установку на Linux (Debian, Ubuntu, CentOS, RHEL) и Docker. Поддержка Windows была прекращена с версии 6.0.7, но возможна работа через Docker.
Клиенты доступны для Windows, macOS, Linux, iOS, Android и Windows Phone 8.
Веб-интерфейс позволяет работать с файлами без установки клиента. - Библиотеки и синхронизация:
Файлы организованы в библиотеки — наборы файлов, которые можно синхронизировать отдельно.
Поддерживается выборочная синхронизация (только нужные папки) и синхронизация с несколькими серверами.
Конфликты файлов обрабатываются на основе истории изменений, а не временных меток. - Шифрование:
Библиотеки можно шифровать с помощью пароля, заданного пользователем. Пароль не хранится на сервере, обеспечивая сквозное шифрование (end-to-end). Даже администратор сервера не может получить доступ к содержимому зашифрованных библиотек.
Шифрование на стороне клиента доступно при использовании десктопного клиента. - Совместная работа:
Поддержка групп для удобного обмена файлами внутри команды.
Возможность делиться файлами и папками с тонкой настройкой прав доступа (чтение/запись).
Ссылки для внешнего доступа с паролем и сроком действия.
Интеграция с Wiki (на основе Markdown), поддержка редактирования документов в браузере с WYSIWYG-редактором, полнотекстовый поиск и управление версиями. - Виртуальный диск (Seafile Drive):
Позволяет подключать хранилище как виртуальный диск, где файлы загружаются по запросу, экономя место на устройстве.
Поддерживает работу в оффлайн-режиме. - Интеграция и дополнительные функции:
Поддержка редактирования офисных файлов (docx, pptx, xlsx) через интеграцию с Microsoft Office Online Server, OnlyOffice или Collabora Online.
Встроенный просмотр файлов (видео, аудио, PDF, изображения, текст).
Интерфейс WebDAV для интеграции с мобильными приложениями (например, Documents, GoodReader).
Резервное копирование: периодическое через mysqldump и rsync или в реальном времени с помощью выделенного сервера. - Версионирование и восстановление:
Сохранение версий файлов и снимков папок для восстановления удалённых или изменённых данных.
Инструмент 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
- Community Edition (CE):
Бесплатная, с открытым исходным кодом (лицензия AGPLv3 для серверного ядра).
Подходит для личного использования или небольших команд.
Поддерживает большинство функций, но без некоторых продвинутых возможностей профессиональной версии. - 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
В официальной инструкции производитель рекомендует создать три бакета.
[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