Синхронизация и совместное использование файлов с помощью Seafile в Debian 10

Seafile – это открытая платформа, хранилище для синхронизации и обмена файлами. Пользователи могут хранить и при желании шифровать данные на своих собственных серверах, единственное ограничение – пространство для хранения. Seafile позволяет обмениваться файлами и папками, используя межплатформенную синхронизацию и защищенные паролем ссылки на файлы (с датами истечения срока действия). Функция контроля версий файлов дает пользователям возможность восстанавливать удаленные и измененные файлы или папки.

В этом мануале вы узнаете, как установить и настроить Seafile на сервере Debian 10. Для хранения данных различных компонентов Seafile используется MySQL, а в качестве прокси-сервера для обработки веб-трафика – Apache. В результате вы сможете использовать веб-интерфейс для доступа к Seafile с локальной машины или мобильных клиентов, что позволит вам синхронизировать и обмениваться файлами с другими пользователями или группами.

Требования

  • Сервер Debian 10, настроенный по этому мануалу (2 Гб RAM минимум).
  • Веб-сервер Apache с виртуальным хостом для вашего зарегистрированного домена (читайте мануал Установка веб-сервера Apache в Debian 10).
  • Установленный и настроенный сервер баз данных MariaDB. Инструкции вы найдете в мануале Установка MariaDB в Debian 10 (пропустите раздел 3: здесь мы будем подключаться только локально, а потому менять метод аутентификации для root не обязательно).
  • Сертификат SSL, который можно получить с помощью мануала Создание сертификата Let’s Encrypt для Apache в Debian 10.
  • Зарегистрированное доменное имя (здесь мы будем использовать условный домен your_domain ).
  • Две DNS-записи А для your_domain и www.your_domain, указывающие на внешний IP-адрес вашего сервера.

1: Создание баз данных для компонентов Seafile

Для правильной работы Seafile нужны три компонента:

  • Seahub: веб-интерфейс Seafile, написанный на Python и фреймворке Django. Seahub позволяет получать доступ к файлам, управлять и делиться ими с помощью веб-браузера.
  • Сервер Seafile: демон сервиса данных, который управляет загрузкой и синхронизацией файлов. Пользователи не взаимодействуют с сервером напрямую, а используют одну из клиентских программ или веб-интерфейс Seahub.
  • Сервер Ccnet: демон сервиса RPC для обеспечения внутренней связи между различными компонентами Seafile. Например, если вы используете Seahub, он может получить доступ к данным с сервера Seafile с помощью RPC сервиса Ccnet.

Каждый из этих компонентов хранит свои данные отдельно, в своей собственной базе данных. На этом этапе нужно создать три базы данных MariaDB и пользователя для них.

Сначала войдите на сервер, используя SSH.

ssh 8host@your_server_ip

Подключитесь к серверу базы данных MariaDB как администратор (root):

sudo mysql

Следующая команда SQL создаст пользователя для БД.

CREATE USER '8host'@'localhost' IDENTIFIED BY 'password';

Затем нужно создать 3 базы данных:

  • ccnet-db – для сервера Ccnet.
  • seahub-db – для интерфейса Seahub.
  • seafile-db – для сервера файлов Seafile.

Для этого в строку введите такие команды:

CREATE DATABASE 'ccnet-db' CHARACTER SET = 'utf8';
CREATE DATABASE 'seafile-db' CHARACTER SET = 'utf8';
CREATE DATABASE 'seahub-db' CHARACTER SET = 'utf8';

Затем передайте привилегии на БД пользователю Seafile, чтобы он имел доступ и мог вносить в них изменения.

GRANT ALL PRIVILEGES ON 'ccnet-db'.* to '8host'@localhost;
GRANT ALL PRIVILEGES ON 'seafile-db'.* to '8host'@localhost;
GRANT ALL PRIVILEGES ON 'seahub-db'.* to '8host'@localhost;

Закройте командную строку MariaDB:

exit

Теперь, когда вы создали пользователя и три базы для хранения данных каждого из компонентов Seafile, можно установить зависимости и загрузить пакет сервера Seafile.

2: Установка зависимостей и загрузка Seafile

Некоторые части Seafile написаны на Python, и поэтому для их работы нужны дополнительные модули и программы Python. На этом этапе нужно установить эти зависимости, а потом загрузить пакет сервера Seafile.

Чтобы установить зависимости с помощью apt, выполните следующую команду:

sudo apt install python-setuptools python-pip python-urllib3 python-requests python-mysqldb ffmpeg

Зависимости python-setuptools и python-pip контролируют установку и управление пакетами Python. Пакеты python-urllib3 и python-requests отвечают за запросы к веб-сайтам. Пакет python-mysqldb – это библиотека для работы с MariaDB из Python, а ffmpeg обрабатывает мультимедийные файлы.

Seafile требуется Pillow (библиотека Python для обработки изображений) и moviepy для обработки миниатюр файлов фильмов. Модули Python pillow и moviepy, необходимые Seafile, недоступны в стандартном репозитории Debian. Их нужно установить вручную, используя pip:

sudo pip install Pillow moviepy

Теперь, когда вы установили необходимые зависимости, вы можете скачать пакет сервера Seafile.

Во время установки Seafile создает дополнительные каталоги. Чтобы они все хранились организованно, создайте новый каталог и перейдите в него:

mkdir seafile
cd seafile

Теперь вы можете загрузить последнюю версию Seafile (на момент написания статьи это 6.3.4) с сайта проекта.

wget https://download.seadrive.org/seafile-server_7.0.4_x86-64.tar.gz

Seafile загружается в виде сжатого tar-архива, а это означает, что вам нужно будет распаковать его. Распакуйте архив с помощью команды tar:

tar -zxvf seafile-server_7.0.4_x86-64.tar.gz

Перейдите в полученный каталог:

cd seafile-server-7.0.4

Итак, вы скачали и распаковали пакет Seafile, а также установили необходимые зависимости. Теперь все готово к настройке сервера Seafile.

3: Настройка сервера Seafile

Серверу Seafile требуется некоторая информация о вашей настройке, прежде чем вы сможете запустить сервисы в первый раз. Сюда входят такие сведения, как имя домена, конфигурация базы данных и путь, по которому будут храниться данные. Чтобы инициировать настройку этой информации, вы можете запустить скрипт setup_seafile_mysql.sh, который включен в извлеченный ранее архив.

Запустите скрипт, используя bash:

bash setup-seafile-mysql.sh

Нажмите Enter, чтобы продолжить.

Сценарий задаст вам ряд вопросов. Чтобы оставить опции по умолчанию, просто нажмите Enter.

В данном мануале сервер называется Seafile, но вы можете указать другое имя.

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

Затем введите домен сервера:

Question 2
What is the ip or domain of the server?.
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] your_domain

Отвечая на вопрос 3, нажмите Enter, чтобы принять значение по умолчанию. Если вы настроили внешнее хранилище, например, NFS или блочное хранилище, здесь вам нужно будет указать путь к нему.

Question 3
Where do you want to put your seafile data?
Please use a volume with enough free space
[ default "/home/8host/seafile/seafile-data" ]

В вопросе 4 можно оставить вариант по умолчанию, нажав Enter:

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

Следующий вопрос позволяет подтвердить конфигурацию базы данных. Вы можете создать новые БД или использовать существующие БД для настройки. В этом мануале мы уже создали необходимые базы данных в разделе 1, поэтому выберите опцию 2.

-------------------------------------------------------
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 ] 2

Вопросы 6–9 относятся к серверу базы данных MySQL. Вам нужно указать имя и пароль пользователя mysql, созданного в разделе 1. Нажмите Enter, чтобы принять значения по умолчанию для параметров host и port.

What is the host of mysql server?
[ default "localhost" ]
What is the port of mysql server?
[ default "3306" ]
Which mysql user to use for seafile?
[ mysql user for seafile ] 8host
What is the password for mysql user "seafile"?
[ password for seafile ] password

Получив пароль, сценарий запросит имена баз данных Seafile. Укажите базы ccnet-db, seafile-db и seahub-db. Сценарий проверит, успешно ли установлено соединение с базами данных, прежде чем отобразить общую начальную конфигурацию.

Enter the existing database name for ccnet:
[ ccnet database ] ccnet-db
verifying user "8host" access to database ccnet-db ...  done
Enter the existing database name for seafile:
[ seafile database ] seafile-db
verifying user "8host" access to database seafile-db ...  done
Enter the existing database name for seahub:
[ seahub database ] seahub-db
verifying user "8hostFor this tutorial you have" access to database seahub-db ...  done
---------------------------------
This is your configuration
---------------------------------
server name:            Seafile
server ip/domain:       your_domain
seafile data dir:       /home/8host/seafile/seafile-data
fileserver port:        8082
database:               use existing
ccnet database:         ccnet-db
seafile database:       seafile-db
seahub database:        seahub-db
database user:          8host
--------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------

Чтобы принять ее, нажмите Enter.

Generating ccnet configuration ...
done
Successfully create configuration dir /home/8host/seafile/ccnet.
Generating seafile configuration ...
done
Generating seahub configuration ...
----------------------------------------
Now creating seahub database tables ...
----------------------------------------
creating seafile-server-latest symbolic link ...  done
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
run seafile server:     ./seafile.sh { start | stop | restart }
run seahub  server:     ./seahub.sh  { start <port> | stop | restart <port> }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------
port of seafile fileserver:   8082
port of seahub:               8000
When problems occur, Refer to
https://github.com/haiwen/seafile/wiki
for information.

Поскольку Seafile будет работать за прокси-сервером Apache, открывать порты 8082 и 8000 в брандмауэре не нужно, эту часть вывода можно проигнорировать.

Начальная настройка сервера завершена. На следующем этапе мы настроим Apache как прокси-сервер для Seafile.

4: Настройка прокси-сервера Apache

Apache позволяет использовать URL-адрес без номера порта, разрешать HTTPS-соединения с Seafile и поддерживать функции кэширования для повышения производительности.

Чтобы начать переадресацию запросов, нужно включить модуль proxy_http в конфигурации Apache. Этот модуль предоставляет функции для проксирования HTTP и HTTPS-запросов. Следующая команда включит модуль:

sudo a2enmod proxy_http

Примечание: Для этой настройки также требуются модули Apache rewrite и ssl. Вы должны были включить их как часть настройки Let’s Encrypt для Apache в мануале, указанном в требованиях.

Затем обновите конфигурацию виртуального хоста your_domain , чтобы перенаправить запросы на файловый сервер Seafile и в веб-интерфейс Seahub.

Откройте файл в текстовом редакторе:

sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

Строки с ServerAdmin по SSLCertificateKeyFile – это часть начальной конфигурации Apache и Let’s Encrypt, которая была создана согласно разделу «Требования». Добавьте выделенные красным строки.

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@your_email_domain
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain/html
ErrorLog ${APACHE_LOG_DIR}/your_domain-error.log
CustomLog ${APACHE_LOG_DIR}/your_domain-access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
Alias /media  /home/8host/seafile/seafile-server-latest/seahub/media

<Location /media>


Require all granted


</Location>


# seafile fileserver


ProxyPass /seafhttp http://127.0.0.1:8082


ProxyPassReverse /seafhttp http://127.0.0.1:8082


RewriteEngine On


RewriteRule ^/seafhttp - [QSA,L]


# seahub web interface


SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1


ProxyPass / http://127.0.0.1:8000/


ProxyPassReverse / http://127.0.0.1:8000/

</VirtualHost>
</IfModule>

Директива Alias преобразовывает URL your_domain/media в локальный путь в файловой системе, которую использует Seafile. Директива Location разрешает доступ к содержимому в этом каталоге. Директивы ProxyPass и ProxyPassReverse позволяют Apache работать в качестве обратного прокси-сервера для этого хоста, перенаправляя запросы в каталоги / и /seafhttp на веб-интерфейс Seafile и файловый сервер, работающие на локальных портах хоста 8000 и 8082 соответственно. Директива RewriteRule передает все запросы в каталог /seafhttp без изменений и прекращает обработку дальнейших правил ([QSA, L]).

Сохраните и закройте файл.

Проверьте файл на наличие ошибок:

sudo apache2ctl configtest

Если команда вернула Syntax OK, значит, ошибок в конфигурации нет, и вы можете продолжать работу. Перезапустите Apache:

sudo systemctl restart apache2

Теперь Apache работает как обратный прокси-сервер для файлового сервера Seafile и Seahub. Но прежде чем запустить сервисы, нужно обновить URL-ы в конфигурации Seafile.

5: Отладка конфигурации Seafile и запуск сервисов

Поскольку теперь все запросы к Seafile проксируются сервером Apache, вам нужно обновить URL-ы в конфигурации сервиса в каталоге conf.

Откройте файл:

nano /home/8host/seafile/conf/ccnet.conf

Измените параметр SERVICE_URL в блоке [General], он выглядит так:

. . .
SERVICE_URL=http://www.example.com:8000
. . .

Измените его, чтобы он указывал на новый URL-адрес HTTPS без порта, например

SERVICE_URL = https://your_domain

Сохраните и закройте файл.

Теперь откройте файл seahub_settings.py в текстовом редакторе:

nano /home/8host/seafile/conf/seahub_settings.py

Вы можете добавить в файл параметр FILE_SERVER_ROOT, чтобы указать путь, по которому файловый сервер прослушивает загрузки файлов:

# -*- coding: utf-8 -*-
SECRET_KEY = "..."
FILE_SERVER_ROOT = 'https://your_domain/seafhttp'
# ...

Сохраните и закройте файл seahub_settings.py.

Теперь вы можете запустить сервис Seafile и интерфейс Seahub:

cd /home/8host/seafile/seafile-server-7.0.4
./seafile.sh start
./seahub.sh start

Поскольку вы запускаете сервис Seahub впервые, вам будет предложено создать учетную запись администратора. Введите действующий адрес электронной почты и пароль для администратора:

What is the email for the admin account?
[ admin email ] admin@your_email_domain
What is the password for the admin account?
[ admin password ] password-here
Enter the password again:
[ admin password again ] password-here
----------------------------------------
Successfully created seafile admin
----------------------------------------
Seahub is started
Done.

Откройте адрес https://your_domain  в браузере и введите адрес и пароль администратора Seafile.

После успешного входа в систему вы можете получить доступ к интерфейсу администратора или создать новых пользователей.

Теперь, когда вы убедились, что веб-интерфейс работает правильно, вы можете включить автозагрузку этих сервисов.

6: Автозагрузка Seafile

Чтобы разрешить автоматический запуск файлового сервера и веб-интерфейса при загрузке системы, вы можете создать соответствующие сервис-файлы systemd и активировать их.

Создайте файл systemd для Seafile:

sudo nano /etc/systemd/system/seafile.service

В файл вставьте такие строки:

[Unit]
Description=Seafile
After=network.target mysql.service
[Service]
Type=forking
ExecStart=/home/8host/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/8host/seafile/seafile-server-latest/seafile.sh stop
User=8host
Group=8host
[Install]
WantedBy=multi-user.target

Строки ExectStart и ExecStop указывают команды, которые запускают и останавливают сервис Seafile. Пользователь и группа сервиса — 8host. Строка After указывает, что сервис Seafile запустится после запуска сети и сервиса MySQL.

Сохраните seafile.service и закройте его.

Создайте файл systemd для веб-интерфейса Seahub:

sudo nano /etc/systemd/system/seahub.service

Этот файл будет похож на предыдущий. Единственное отличие – в том, что веб-интерфейс должен запускаться после сервиса Seafile. Добавьте в файл:

[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
Type=forking
ExecStart=/home/8host/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/8host/seafile/seafile-server-latest/seahub.sh stop
User=8host
Group=8host
[Install]
WantedBy=multi-user.target

Сохраните seahub.service и закройте файл.

Читайте также: Управление сервисами и юнитами Systemd с помощью Systemctl

Наконец, чтобы включить автоматический запуск сервисов Seafile и Seahub, введите следующие команды:

sudo systemctl enable seafile.service
sudo systemctl enable seahub.service

Когда сервер будет перезагружен, Seafile запустится автоматически.

Теперь пора протестировать сервисы.

7: Тестирование синхронизации и обмена файлами

На этом этапе вы можете протестировать функции синхронизации и обмена файлами на сервере, который вы настроили. Для этого необходимо установить клиентскую программу Seafile на отдельном компьютере или мобильном устройстве.

Посетите страницу загрузки на веб-сайте Seafile и следуйте инструкциям, чтобы установить последнюю версию программы на свой компьютер. Клиенты Seafile доступны для различных дистрибутивов Linux (Ubuntu, Debian, Fedora, Centos/RHEL, Arch Linux), MacOS и Windows. Мобильные клиенты доступны для устройств Android и iPhone/iPad в соответствующих магазинах приложений.

После установки клиента Seafile вы можете протестировать функции синхронизации файлов и обмена ими.

Откройте клиентскую программу Seafile на вашем компьютере или мобильном устройстве. Примите расположение по умолчанию для папки Seafile и нажмите Next.

В следующем окне введите адрес сервера, имя пользователя и пароль, затем нажмите Login.

На домашней странице щелкните правой кнопкой мыши на My Library и выберите Sync this library. Примите значение по умолчанию для расположения на вашем компьютере или устройстве.

Добавьте файл, например документ или фотографию, в папку My Library. Через некоторое время файл будет загружен на сервер.

Теперь откройте веб-интерфейс по адресу https://your_domain.com и убедитесь, что добавленный вами файл присутствует на сервере.

Нажмите Share рядом с файлом, чтобы создать ссылку для загрузки этого файла, которой вы сможете поделиться.

Теперь вы знаете, что файлы синхронизируются правильно. Вы можете использовать Seafile для синхронизации и обмена файлами и папками с нескольких устройств.

Заключение

В этом мануале вы настроили экземпляр сервера Seafile. Теперь вы можете использовать сервер для синхронизации файлов, создания пользователей и групп, а также для обмена файлами между ними или с внешними пользователями.

Когда появится новый релиз сервера, пожалуйста, обратитесь к мануалу Seafile, чтобы узнать, как обновить свой экземпляр.

Tags: , , ,

Comments are closed here.