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

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

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

Требования

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

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==4.3.0 moviepy

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

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

mkdir seafile
cd seafile

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

wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz

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

tar -zxvf seafile-server_6.3.4_x86-64.tar.gz

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

cd seafile-server-6.3.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 ] example.com

Отвечая на вопрос 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 "8host" access to database seahub-db ...  done
---------------------------------
This is your configuration
---------------------------------
server name:            Seafile
server ip/domain:       example.com
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
Successly 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 в мануале, указанном в требованиях.

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

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

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

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

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/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 example.com/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, он должен указывать на новый URL-адрес HTTPS без порта, например:

SERVICE_URL = https://example.com

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

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

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

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

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

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

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

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

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

What is the email for the admin account?
[ admin email ] admin@example.com
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://example.com в браузере и введите адрес и пароль администратора 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://example.com и убедитесь, что добавленный вами файл присутствует на сервере.

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

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

Заключение

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

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

Tags: , , , ,