Синхронизация и совместное использование файлов с помощью Seafile в Debian 9
Debian | Комментировать запись
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: Apache, Debian, Debian 9, Seafile, Seahub