Часто ли вам приходится пользоваться сайтами-файлообменниками? А хотите иметь свой собственный файлообменник? В этом руководстве мы изучим, как производится установка и настройка сервера Seafile для синхронизации и общего доступа к файлам на Ubuntu 20.04.
Seafile – это платформа с открытым исходным кодом, которая предназначена для предоставления доступа к файлам, хранящимся на вашем сервере. Данный сервис применяется для загрузки файлов на ваш общедоступный ресурс, синхронизации содержимого этого ресурса с библиотеками на локальных устройствах, а также, для предоставления доступа к выложенным файлам для всех или определённых вами пользователям в рамках предоставленных им полномочий.
В качестве основы для установки Seafile мы будем использовать виртуальный сервер с установленной операционной системой Ubuntu 20.04. Сервер должен иметь как минимум 2GB оперативной памяти. Все подключения к серверу мы будем осуществлять под учётной записью, которая не является root
-ом, но имеет полномочия sudo
. В нашем руководстве это будет пользователь your-user
. Также, на сервере должен быть установлен и настроен брандмауэр UFW.
Поскольку, ваш файловый сервер будет работать на сайте, вы должны иметь своё зарегистрированное доменное имя. При этом, А-запись вашего домена должна будет указывать на IP-адрес вашего виртуального сервера. В нашем руководстве мы будем использовать my-domain.host
в качестве имени домена.
В качестве СУБД на нашем сервере мы будем использовать MariaDB, а в качестве веб-сервера – Apache. Также, мы настроим доступ к нашему сайту по защищённому протоколу HTTPS.
Установка MariaDB
На нашем сервере в качестве системы управления базами данных мы будем использовать MariaDB. Поэтому сначала необходимо установить на сервер данную СУБД.
Для чего обновите индексы пакетов на сервере:
$ sudo apt update
После этого запустите установку пакета MariaDB:
$ sudo apt install mariadb-server
По окончании установки нужно будет запустить скрипт безопасности:
$ sudo mysql_secure_installation
Скрипт должен попросить вас ввести пароль пользователя root для установленной СУБД. Так как мы пока ещё не настраивали этого пользователя, укажите, что этот пароль отсутствует, нажав Enter
. Далее скрипт запросит сменить пароль пользователя root, на что следует ответить “Нет”, нажав n
. На остальные вопросы скрипта можно отвечать утвердительно.

Установка веб-сервера Apache
В качестве веб-сервера в данном руководстве мы будем использовать Apache. Поскольку Apache доступен для установки из официального репозитория Ubuntu, инсталляцию пакета нужно будет произвести при помощи apt
:
$ sudo apt install apache2
Когда установка завершится, произведите настройку брандмауэра UFW. Запустите команду для просмотра списка приложений, включённых в брандмауэр в качестве разрешённых:
$ sudo ufw app list

Позже мы настроим доступ к нашему ресурсу по протоколу HTTPS. А пока разрешите трафик исключительно по порту 80:
$ sudo ufw allow 'Apache'
Чтобы проверить изменения наберите:
$ sudo ufw status

Теперь следует запустить проверку статуса службы Apache:
$ sudo systemctl status apache2
Вывод команды должен выглядеть примерно так:

И остаётся лишь удостовериться в том, что наш веб-сервер доступен по сети. Для чего в браузере наберите IP-адрес вашего VPS. Вы должны увидеть стартовую страницу Apache:

Настройка виртуального хоста
Теперь привяжем имя нашего домена к установленному на наш VPS веб-серверу. Для этого необходимо на Apache произвести настройку виртуального хоста. В нашем руководстве мы будем использовать доменное имя my-domain.host
. Настройку виртуального хоста нужно будет выполнить по пунктам:
- Создайте директорию для настраиваемого домена:
$ sudo mkdir /var/www/my-domain.host
- Далее, измените владельца директории и права на неё:
$ sudo chown -R $USER:$USER /var/www/my-domain.host
$ sudo chmod -R 755 /var/www/my-domain.host
- В данной директории создайте файл вашего сайта
index.html
:
$ cd /var/www/my-domain.host
$ sudo nano index.html
- В создаваемый файл скопируйте следующие строки:
<html>
<head>
<title>My domain on Apache!</title>
</head>
<body>
<h1>MY-DOMAIN.HOST</h1>
<p>It is my domain.</p>
</body>
</html>
- Закройте файл с сохранением внесённых изменений.
- Создайте конфигурационный файл для виртуального хоста:
$ sudo nano /etc/apache2/sites-available/my-domain.host.conf
- В него вставьте следующий текст. Не забывайте заменять
my-domain.host
на имя вашего домена, а в строкуServerAdmin
впишите доступный адрес электронной почты:
<VirtualHost *:80>
ServerAdmin admin@my-domain.host
ServerName my-domain.host
ServerAlias www.my-domain.host
DocumentRoot /var/www/my-domain.host
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- Активируйте созданный хост:
$ sudo a2ensite my-domain.host.conf
- Отключите дефолтный домен:
$ sudo a2dissite 000-default.conf
- Проверьте синтаксис конфигурации созданного хоста:
$ sudo apache2ctl configtest
- Проверка должна выдать результат –
Syntax Ok
.
- Перезагрузите службу Apache:
$ sudo systemctl restart apache2
Теперь проверьте доступность домена набрав в браузере его адрес http://my-domain.host
:

Обеспечение безопасности Apache с помощью Let’s Encrypt
В этом разделе нам будет необходимо обеспечить возможность шифрования трафика на нашем веб-сервере. Мы настроим Apache таким образом, чтобы наш домен был доступен по протоколу HTTPS.
Для начала установите на свой сервер программное обеспечение Certbot. Для чего в командной строке следует набрать:
$ sudo apt install certbot python3-certbot-apache
Теперь перейдём к настройке брандмауэра UFW. Ранее мы разрешили в нашем брандмауэре трафик только по порту 80. Сейчас мы настроим доступ к нашему ресурсу по протоколу HTTPS, а доступ через HTTP, наоборот, закроем. Для этого используйте следующие две команды:
$ sudo ufw allow 'Apache Full'
$ sudo ufw delete allow 'Apache'
Далее, запустите проверку статуса брандмауэра:
$ sudo ufw status

Далее, запустите получение SSL-сертификата при помощи Certbot через плагин Apache:
$ sudo certbot --apache
Данный скрипт попросит вас ответить на несколько вопросов, ответы на которые позволят вам сконфигурировать полученный SSL-сертификат на вашем сервере. Во-первых, введите доступный вам адрес электронной почты. Этот E-mail будет использоваться для уведомлений о продлении сертификата, а также, об изменениях настроек системы безопасности. Во-вторых, подтвердите своё согласие с условиями предоставления услуг Let’s Encrypt нажав A
. Далее, вас спросят, хотите ли вы, получать на вашу почту информацию от Electronic Frontier Foundation. Нажмите N
, чтобы отказаться от рассылки, либо Y
, чтобы согласиться на неё. И, наконец, вы должны будете проинформировать Certbot о том, в отношении какого из доменных имён вы хотели бы активировать доступ по протоколу HTTPS. Если вы хотите сделать это в отношении всех представленных в списке сайтов, оставьте поле пустым и нажмите Enter
. Либо, перечислите соответствующие номера строк, разделяя их при помощи запятых или пробелов, и нажмите Enter
.

После этого шага Certbot активирует SSL-сертификат для вашего домена, о чём проинформирует вас при помощи своих сообщений.

Проверить доступность вашего сайта через защищённое соединение вы можете набрав в браузере ваше доменное имя с префиксом https://
, например, https://my-domain.host
.

Создание баз данных для компонентов Seafile
Три компоненты Seafile должны быть установлены в вашей системе для того, чтобы настраиваемый файловый сервер функционировал корректно:
- Seahub – фронтендовый веб-интерфейс Seafile. Он написан на Python с использованием фреймворка Django. С помощью Seahub вы сможете получать доступ к своим файлам, управлять ими и организовывать общий доступ к ним через браузер.
- Сервер Seafile – служба для работы с данными, которая управляет выгрузкой файлов, их загрузкой и синхронизацией. Вам не нужно будет взаимодействовать с сервером напрямую, достаточно использовать какое-либо клиентское приложение, либо веб-интерфейс сервера.
- Сервер Ccnet – RPC-служба, предназначенная для обеспечения внутренних связей между различными сегментами Seafile. При помощи этого сервиса Seahub сможет получать доступ к данным на сервере Seafile.
Все эти сегменты будут хранить свои данные отдельно, каждый в своей базе данных. Именно поэтому, теперь мы должны создать три разных базы данных. Их мы создадим при помощи MariaDB. Также, нужно будет создать для них пользователя.
Итак, подключитесь к MariaDB:
$ sudo mariadb
В командной строке MariaDB введите команду для создания пользователя ваших баз данных:
> CREATE USER 'mdb-user'@'localhost' IDENTIFIED BY 'p@$$word';
Здесь, mdb-user
– имя создаваемого пользователя, а p@$$word
– пароль для него.
Далее, необходимо создать базы данных для всех трёх компонентов Seafile:
seahubdb
– для фронтендового веб-интерфейса Seafile;seafiledb
– для сервера Seafile;ccnetdb
– для сервера Ccnet.
Для создания баз данных наберите в командной строке MariaDB:
> CREATE DATABASE `seahubdb` CHARACTER SET = 'utf8';
> CREATE DATABASE `seafiledb` CHARACTER SET = 'utf8';
> CREATE DATABASE `ccnetdb` CHARACTER SET = 'utf8';
Теперь, нужно дать все полномочия созданному пользователю для работы с новыми базами:
> GRANT ALL PRIVILEGES ON `seahubdb`.* to `mdb-user`@localhost;
> GRANT ALL PRIVILEGES ON `seafiledb`.* to `mdb-user`@localhost;
> GRANT ALL PRIVILEGES ON `ccnetdb`.* to `mdb-user`@localhost;
После этого можно выйти из MariaDB. Для этого используйте команду:
> exit
Установка зависимостей и загрузка Seafile
Определённые элементы Seafile написаны на Python и, следовательно, для работы Seafile необходимо наличие программ и дополнительных модулей Python. На этом шаге мы установим требуемые зависимости прежде, чем скачать и распаковать пакет сервера Seafile.
Итак, во-первых, установите pip
– менеджер пакетов Python. Соответствующий пакет для Debian называется python3-pip
. Для установки пакета запустите:
$ sudo apt install -y python3-pip
По окончании установки пакета pip
запустите инсталляцию дополнительных зависимостей при помощи команды pip3
:
$ pip3 install Pillow captcha django-simple-captcha
Для команды pip3 install
необязательно использование sudo
. Эти пакеты устанавливаются в домашний каталог вашего пользователя, и поэтому их инсталляция не требует привилегий root
. Сервер Seafile требует установки пакета Pillow
, библиотеки для обработки образов. Также, для работы Seafile требуется установка пакетов captcha
и django-simple-captcha
, чтобы обеспечить поддержку каптча для аутентификации.
Теперь, когда необходимые зависимости установлены, вы можете загрузить установочный пакет Seafile. Для его инсталляции нам потребуются дополнительные каталоги. Их нужно будет создать в домашнем каталоге вашего пользователя:
$ cd ~
$ mkdir seafile
$ cd seafile
Далее, загрузите последнюю версию Seafile. В нашем руководстве мы будем устанавливать версию 7.1.5:
$ wget https://download.seadrive.org/seafile-server_7.1.5_x86-64.tar.gz
Загруженный дистрибутив Seafile представляет из себя tar-архив, который вам нужно будет распаковать, прежде чем продолжить:
$ tar -zxvf seafile-server_7.1.5_x86-64.tar.gz
После чего перейдите в разархивированную директорию:
$ cd seafile-server-7.1.5
Настройка сервера Seafile
Для своей работы сервер Seafile потребует от вас некоторой информации. Её необходимо предоставить сервису перед первым его запуском. Эта информация включает в себя такие данные как имя домена и настройки базы данных. Чтобы начать наполнение Seafile ответами на требуемые вопросы, вам нужно запустить на исполнение скрипт setup_seafile_mysql.sh
, который входит в состав архива, распакованного на предыдущем шаге:
$ bash setup-seafile-mysql.sh

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

Далее, введите ваше имя домена:

Введите номер порта, который вы хотите использовать на своём файловом сервере. Для принятия значения по умолчанию нажмите Enter
:

Далее, следует выбрать создание новых баз данных для Seafile или использование уже существующих. В нашем примере, выбор – пункт 2:

Оставшиеся вопросы относятся к СУБД MariaDB. Здесь вам нужно будет ввести имя и пароль пользователя MariaDB, который вы создали ранее. А также, примите значения по умолчанию в назначении хоста и порта для сервера mysql:

Если пароль вашего пользователя принят, скрипт попросит вас набрать имена баз данных Seafile. В нашем руководстве эти базы мы назвали seahubdb
, seafiledb
и ccnetdb
. Скрипт проверит корректность подключения к базам данных и отобразит на экране сводную информацию о начальной конфигурации:

Для подтверждения нажмите Enter
:

Поскольку вы будете запускать сервер Seafile, который по факту находится за Apache, то в брандмауэре нет необходимости открывать порты 8000 и 8082. Следовательно, вы можете игнорировать заключительную часть вывода.
Настройка веб-сервера Apache
В этом разделе мы произведём настройку веб-сервера Apache. Эта настройка нужна для того, чтобы Apache умел пересылать все получаемые запросы в Seafile. Применение такой настройки Apache позволит ему использовать только URL-адрес, без номера порта. А также, это поможет включать HTTPS-соединения при обмене данными с Seafile и использовать кэширование в Apache для повышения производительности.
Чтобы начать пересылать запросы нужно в конфигурации Apache включить модуль proxy_http
. Этот модуль делает возможным использование проксирования HTTP и HTTPS запросов. Включите модуль следующей командой:
$ sudo a2enmod proxy_http
Для этой настройки также требуется наличие модулей ssl
и rewrite
. Их мы уже включили, когда настраивали шифрование трафика Apache при помощи Let’s Encrypt.
Далее, нужно будет настроить виртуальный хост my-domain.host
. Это необходимо для того, чтобы обеспечить перенаправление запросов на Seafile и Seahub. Чтобы сделать это, откройте для редактирования файл конфигурации. Он располагается в каталоге /etc/apache2/sites-enabled/
:
$ cd /etc/apache2/sites-enabled
$ sudo nano my-domain.host-le-ssl.conf
В этом файле строки от ServerAdmin
до SSLCertificateKeyFile
относятся к настройке шифрования при помощи Let’s Encrypt, которую мы сделали ранее. Добавьте выделенные строки в файл, используя имя вашего пользователя вместо your-user
:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin mail@my-domain.host
ServerName my-domain.host
ServerAlias www.my-domain.host
DocumentRoot /var/www/my-domain.host
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/my-domain.host/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my-domain.host/privkey.pem
Alias /media /home/your-user/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
– сопоставляет путьmy-domain.host/media
с каталогом в системе, на которой установлен Seafile.Location
– в ней указано, что доступ к содержимому этого каталога открыт.ProxyPass
иProxyPassReverse
– принуждают Apache работать как обратный прокси-сервер для хоста. То есть, все запросы, попадающие на порты 8000 и 8082, перенаправляются в каталоги файлового сервера и веб-интерфейса Seafile/
и/seafhttp
соответственно.RewriteRule
– передаёт запросы в директорию/seafhttp
не изменяя их, а также, прекращает обработку дальнейших правил ([QSA,L]
).
По окончании редактирования закройте файл, сохранив внесённые изменения. После чего проверьте корректность синтаксиса Apache:
$ sudo apache2ctl configtest
Если проверка выдала Syntax OK
, перезапустите Apache для применения изменений:
$ sudo systemctl restart apache2
Изменение конфигурации Seafile и запуск сервисов
Так как вы используете Apache, чтобы проксировать все запросы к Seafile, вам нужно будет изменить URL-адреса в конфигурационных файлах Seafile. Для этого перейдите в каталог conf
и откройте для редактирования файл ccnet.conf
:
$ cd ~/seafile/conf
$ sudo nano ccnet.conf
В этом файле отредактируйте значение переменной SERVICE_URL
, указав в качестве значения новый URL-адрес без указания номера порта, но с префиксом https
:
SERVICE_URL = https://my-domain.host

Сохраните изменения и закройте файл. После чего откройте файл seahub_settings.py
:
$ sudo nano seahub_settings.py
Здесь вам необходимо добавить переменную FILE_SERVER_ROOT
, определяющую путь, который Seafile будет прослушивать для загрузки и выгрузки файлов:
FILE_SERVER_ROOT = 'https://my_domain.host/seafhttp'

Сохраните изменения, закройте файл. Затем запустите службу Seafile и интерфейс Seahub:
$ cd ~/seafile/seafile-server-7.1.5
$ ./seafile.sh start
$ ./seahub.sh start
Так как вы впервые запускаете сервис Seahub, вам нужно будет создать учетную запись администратора. Здесь введите доступный вам адрес электронной почты и пароль для создаваемого пользователя:

В случае, если при запуске seahub.sh
, у вас появится сообщение:
LC_ALL is not set in ENV, set to en_US.UTF-8
то, вам необходимо будет в файл /etc/default/locale
добавить строку:
LC_ALL="en_US.UTF-8"
Теперь откройте в браузере адрес вашего сайта и авторизуйтесь на нём с помощью адреса электронной почты и пароля:

После успешного подключения к системе вы попадёте в веб-интерфейс администратора.

Активизация старта сервера Seafile при загрузке системы
Чтобы ваш файловый сервер и веб-интерфейс запускался автоматически при загрузке системы, нужно будет создать файлы сервиса и активировать их.
Сначала создайте файл службы для файлового сервера Seafile:
$ cd /etc/systemd/system
$ sudo nano seafile.service
Добавьте в этот файл следующие строки:
[Unit]
Description=Seafile
After=network.target mariadb.service
[Service]
Type=forking
ExecStart=/home/your-user/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/your-user/seafile/seafile-server-latest/seafile.sh stop
User=your-user
Group=your-user
[Install]
WantedBy=multi-user.target
В строках ExectStart
и ExecStop
указаны команды запуска и остановки сервиса Seafile. Сервис будет запускаться от имени пользователя и группы your-user
. Строка After
определяет запуск службы Seafile только после старта сетевого окружения и сервиса MySQL.
Далее, создайте файл сервиса для веб-интерфейса Seahub:
$ cd /etc/systemd/system
$ sudo nano seahub.service
Здесь всё так же, как и в предыдущем файле. Единственное отличие заключается в том, что веб-интерфейс будет стартовать после службы Seafile:
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
Type=forking
ExecStart=/home/your-user/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/your-user/seafile/seafile-server-latest/seahub.sh stop
User=sammy
Group=sammy
[Install]
WantedBy=multi-user.target
Закройте созданный файл с сохраненим изменений.
И наконец, активируйте автоматический старт обоих сервисов при запуске системы:
$ sudo systemctl enable seafile.service
$ sudo systemctl enable seahub.service
Теперь, если вы перезагрузите свой сервер, Seafile запустится автоматически.
Тестирование функциональности синхронизации файлов и их совместного использования
В этом разделе мы протестируем функционал нашего настроенного сервера, касающийся синхронизации и совместного использования файлов. Чтобы это осуществить, нужно будет установить клиентское приложение Seafile на отдельную рабочую станцию или мобильное устройство.
Перейдите на страницу загрузки Seafile и следуя инструкциям установите последнюю версию клиентской программы. Клиентское программное обеспечение Seafile доступно для различных дистрибутивов Linux, а также, MacOS, и Windows. При этом мобильный клиент также доступен для устройств, работающих на Android и IOS, и его можно загрузить из соответствующих магазинов приложений.
Установив клиента, откройте его и примите дефолтное расположение каталога Seafile, нажмите Next.
В следующем окне нужно будет ввести адрес вашего сервера, имя пользователя и пароль, после чего нажать Login.
Далее, на стартовой странице правой кнопкой мыши нажмите на My Library и затем кликните Sync this library, либо Синхронизировать эту библиотеку. Примите дефолтное расположение библиотеки на вашем компьютере или устройстве.

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

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

Заключение
В данном руководстве мы создали и настроили приватный файловый сервер Seafile. Теперь, вы можете загружать на него свои файлы, добавлять на нём пользователей и группы пользователей и предоставлять им доступ на файлы не используя при этом никаких сторонних файлообменных сервисов.
Пипец проделано работы. Спасибо
2021-12-22 at 12:34Огромное Вам спасибо за подробное руководство.
2022-05-08 at 19:13Но у меня есть вопрос: Как добавить диски к дисковому пространству Seafile?
Я устанавливал систему на ssd диск и теперь, при подключении HDD к настроенной системе не вижу его.
Зависит от того, что именно вы хотите сделать.
– Если Вы хотите использовать HDD вместо SSD, то нужно будет перенести seafile директорию с данными и изменить настройки в файле seafile.ini
– Если вы хотите расширить объем текущего хранилища, то, скорее всего, Вам потребуется LVM для создания логического раздела.
2022-05-11 at 12:44У кого на команду “sudo ufw status” пишет “Status: inactive” используйте команду
2022-08-09 at 08:31sudo ufw enable
У кого не запускается seahub.sh (версия 9.0.6), запускаем с параметром start-fastcg и смотрим на чем останавливается.
2022-08-17 at 21:38Если ошибка “Do you install mysqlclient?”
Используйте команды:
$ sudo apt install default-libmysqlclient-dev
$ pip3 install mysqlclient