Как синхронизировать и делиться своими файлами с Seafile на Ubuntu 18.04

Автор выбралWikimedia Foundation Inc. для получения пожертвования в рамках программыWrite for DOnations.

Вступление

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

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

Предпосылки

Прежде чем начать это руководство, вам потребуется следующее:

  • Один сервер Ubuntu 18.04 с минимум 2 ГБ ОЗУ, настроенный по этому руководствуInitial Server Setup for Ubuntu 18.04, включая пользователя sudo без полномочий root и брандмауэр.

  • Веб-сервер Apache с виртуальным хостом, настроенным для зарегистрированного домена с помощьюHow To Install the Apache Web Server on Ubuntu 18.04.

  • Сертификат SSL, установленный на вашем сервере, следуя этому руководствуHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04.

  • Полностью зарегистрированное доменное имя. В этом руководстве будет использоватьсяexample.com.

  • Обе следующие записи DNS настроены для вашего сервера. Вы можете следить за этимintroduction to DigitalOcean DNS, чтобы узнать, как их добавить.

    • Запись A сexample.com, указывающая на общедоступный IP-адрес вашего сервера.

    • Запись A сwww.example.com, указывающая на общедоступный IP-адрес вашего сервера.

  • Сервер базы данных MySQL установлен и настроен. Следуйте инструкциям в руководствеHow To Install MySQL on Ubuntu 18.04. Пропустите шаг 3 этого руководства - «Настройка аутентификации и привилегий пользователя». Вы будете только устанавливать локальные соединения с сервером базы данных, поэтому изменение метода аутентификации для пользователя root не требуется.

[[step-1 -—- create-databases-for-the-seafile-components]] == Шаг 1 - Создание баз данных для компонентов Seafile

Seafile требует трех компонентов для правильной работы. Эти три компонента:

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

  • Seafile server: демон службы данных, который управляет загрузкой, загрузкой и синхронизацией необработанных файлов. Вы не взаимодействуете с сервером напрямую, а используете одну из клиентских программ или веб-интерфейс Seahub.

  • Ccnet server: демон службы RPC, обеспечивающий внутреннюю связь между различными компонентами Seafile. Например, когда вы используете Seahub, он может получить доступ к данным с сервера Seafile с помощью службы Ccnet RPC.

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

Сначала войдите на сервер, используя SSH, указав свое имя пользователя и IP-адрес:

ssh sammy@your_server_ip

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

sudo mysql

В командной строке MySQL используйте следующую команду SQL для создания пользователя базы данных:

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Далее вы создадите следующие базы данных для хранения данных трех компонентов Seafile:

  • ccnet-db для сервера Ccnet.

  • seahub-db для веб-интерфейса Seahub.

  • seafile-db для файлового сервера Seafile.

В командной строке MySQL создайте базы данных:

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 `sammy`@localhost;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `sammy`@localhost;
GRANT ALL PRIVILEGES ON `seahub-db`.* to `sammy`@localhost;

Выйдите из командной строки MySQL, набравexit:

exit

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

[[step-2 -—- install-dependencies-and-download-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 - это библиотека для использования MySQL из Python, аffmpeg обрабатывает мультимедийные файлы.

Модули Pythonpillow иmoviepy, необходимые для Seafile, недоступны в репозитории пакетов Ubuntu. Вы установите их вручную, используяpip:

sudo pip install pillow moviepy

Seafile требуетсяpillow, библиотека Python для обработки изображений, иmoviepy для обработки эскизов файлов фильмов.

[.Примечание]##

NOTE: Вам также потребуется обновить эти пакеты вручную при выпуске новых версий. Команда для обновления:

sudo pip install --upgrade pillow moviepy

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

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

mkdir seafile
cd seafile

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

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.

[[step-3 -—- configuring-the-seafile-server]] == Шаг 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

Введите имя домена для этого экземпляра 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

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

**Question 3**

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

ДляQuestion 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 ] sammy

    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 "sammy" access to database ccnet-db ...  done

Enter the existing database name for seafile:
[ seafile database ] seafile-db

verifying user "sammy" access to database seafile-db ...  done

Enter the existing database name for seahub:
[ seahub database ] seahub-db

verifying user "sammy" access to database seahub-db ...  done

---------------------------------
This is your configuration
---------------------------------

    server name:            Seafile
    server ip/domain:       example.com

    seafile data dir:       /home/sammy/seafile/seafile-data
    fileserver port:        8082

    database:               use existing
    ccnet database:         ccnet-db
    seafile database:       seafile-db
    seahub database:        seahub-db
    database user:          sammy

--------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------

НажмитеENTER для подтверждения.

OutputGenerating ccnet configuration ...
done
Successly create configuration dir /home/sammy/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  | stop | restart  }
-----------------------------------------------------------------
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.

[[step-4 -—- configuring-the-apache-web-server]] == Шаг 4 - Настройка веб-сервера Apache

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

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

sudo a2enmod proxy_http

[.note] #Note: Для этой настройки также требуются модули Apacherewrite и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, которую вы установили как часть предварительного требования. Добавьте выделенный контент, начиная сAlias и заканчивая директивойProxyPassReverse:

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



    ServerAdmin [email protected]
    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/sammy/seafile/seafile-server-latest/seahub/media
    
        Require all granted
    

    # 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/

Директива 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 перед запуском сервисов.

[[step-5 -—- update-seafile-39-s-configuration-and-start-services]] == Шаг 5. Обновление конфигурации Seafile и запуск служб

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

Откройтеccnet.conf в текстовом редакторе:

nano /home/sammy/seafile/conf/ccnet.conf

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

/home/sammy/seafile/conf/ccnet.conf

SERVICE_URL = https://example.com

Сохраните и выйдите из файла после добавления содержимого.

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

nano /home/sammy/seafile/conf/seahub_settings.py

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

/home/sammy/seafile/conf/seahub_settings.py

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

Сохраните и выйдите изseahub_settings.py.

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

cd /home/sammy/seafile/seafile-server-6.3.4
./seafile.sh start
./seahub.sh start

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

OutputWhat is the email for the admin account?
[ admin email ] [email protected]

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.

Login screen of the Seafile web interface

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

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

[[step-6 -—- enable-the-seafile-server-to-start-at-system-boot]] == Шаг 6 - Включение сервера Seafile для запуска при загрузке системы

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

Создайте служебный файлsystemd для файлового сервера Seafile:

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

Добавьте следующее содержимое в файл:

/etc/systemd/system/seafile.service

[Unit]
Description=Seafile
After=network.target mysql.service

[Service]
Type=forking
ExecStart=/home/sammy/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stop
User=sammy
Group=sammy

[Install]
WantedBy=multi-user.target

Здесь строкиExectStart иExecStop указывают команды, запускаемые для запуска и остановки службы Seafile. Служба будет работать сsammy в качествеUser иGroup. СтрокаAfter указывает, что служба Seafile запустится после запуска сети и службы MySQL.

Сохранитеseafile.service и выйдите.

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

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

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

/etc/systemd/system/seahub.service

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
ExecStart=/home/sammy/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stop
User=sammy
Group=sammy

[Install]
WantedBy=multi-user.target

Сохранитеseahub.service и выйдите.

Вы можете узнать больше о файлах модулей systemd в руководствеUnderstanding Systemd Units and Unit Files.

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

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

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

На этом этапе вы завершили настройку сервера и теперь можете протестировать каждую из служб.

[[step-7 -—- testing-file-syncing-and-sharing-functions]] == Шаг 7. Тестирование функций синхронизации и совместного использования файлов

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

Посетите страницуdownload на сайте 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. Примите значение по умолчанию для местоположения на вашем компьютере или устройстве.

Seafile client — Sync the default library

Добавьте файл, например документ или фотографию, в папкуMy Library. Через некоторое время файл будет загружен на сервер. На следующем снимке экрана показан файл photo.jpg, скопированный в папку «Моя библиотека».

Add a file to the default library from the computer

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

My Library page to verify file sync

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

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

Заключение

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

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

Related