Установка и настройка Seafile с Nginx и MariaDB на Ubuntu 20.04

Seafile — это серверная система хранения файлов с открытым кодом, поддерживающая синхронизацию на разных платформах, встроённое шифрование, двухфакторную аутентификацию, версионность, блокировку файлов и онлайн‑редактирование. В этом руководстве вы поэтапно настроите Seafile 7 на Ubuntu 20.04 с MariaDB и Nginx (HTTPS через Let’s Encrypt). Примеры команд выполняются под root или через sudo, где это указано.
Важно: команды и пути в примерах соответствуют конфигурации из исходного руководства; при необходимости замените имя пользователя, домен и пароли на ваши значения.
Что будет в этом руководстве
- Быстрая проверка системных требований.
- Установка зависимостей Python и дополнительных пакетов.
- Установка и безопасная настройка MariaDB.
- Загрузка и установка Seafile (скрипт для MariaDB).
- Настройка доменного имени и файлового сервера.
- Настройка systemd‑сервисов для seafile и seahub.
- Получение SSL с помощью Let’s Encrypt и генерация dhparam.
- Настройка Nginx как обратного прокси под HTTPS.
- Настройка UFW, тестирование и отладка.
- Чек‑листы, процедуры резервного копирования, рекомендации по безопасности, сценарии тестирования и общие советы по миграции.
Основные термины (в одну строку)
- Seafile: серверное приложение для синхронизации и общего доступа к файлам; Seahub — веб‑интерфейс Seafile; ccnet — компонент синхронизации; fileserver — файловый сервер Seafile.
Пререквизиты
- Ubuntu 20.04 LTS (64‑бит)
- root или пользователь с sudo
- Доменное имя, указывающее на IP сервера (например, seafile.example.com)
- Публичный IP и открытые порты 80/443 (для выдачи сертификата)
Быстрый план действий
- Установить зависимости Python и утилиты.
- Установить и зафиксировать MariaDB, создать базы и пользователя.
- Скачать и распаковать Seafile, запустить установщик для MariaDB.
- Настроить Seafile для работы с доменом.
- Сделать seafile/seahub systemd‑сервисами.
- Получить SSL от Let’s Encrypt и dhparam.
- Настроить Nginx как обратный прокси.
- Настроить UFW.
- Протестировать и выполнить набор проверок.
Шаг 0 — Рекомендации по безопасности перед началом
- Всегда используйте сильные пароли и уникальные имена пользователей базы данных.
- Не запускайте сервисы от root;
- Делайте резервные копии конфигураций и баз данных перед изменением.
- Планируйте обновления: Ubuntu 20.04 поддерживает обновления безопасности — применяйте обновления после тестирования.
Шаг 1 — Установка зависимостей Python для Seafile
Обновим индексы пакетов и установим необходимые системные и Python‑зависимости.
sudo apt updateУстановите пакеты (включая ffmpeg для обработки предварительных просмотров и libmemcached-dev для кеширования):
sudo apt install python3 libpython3.8 python3-setuptools python3-pil python3-ldap python3-urllib3 ffmpeg python3-pip python3-mysqldb python3-memcache python3-requests libmemcached-dev -yУстановите пакеты из PyPI, используемые Seafile для некоторых функций:
pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy psd-tools django-pylibmc django-simple-captcha python3-ldapПояснения и советы
- pip3 install может скачивать большие пакеты; укажите –timeout, если соединение нестабильно.
- На серверах с ограниченным доступом к интернету подготовьте локальный PyPI‑кеш или используйте внутренний прокси.
Шаг 2 — Установка и базовая настройка MariaDB
Seafile поддерживает SQLite и MariaDB/MySQL. Для производственных установок рекомендуется MariaDB.
Установка MariaDB:
sudo apt install mariadb-server -yЗапустите и включите сервис:
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
Настройка безопасности MariaDB — выполните встроенный помощник:
mysql_secure_installationСледуйте подсказкам: задайте сильный root‑пароль, удалите анонимных пользователей, запретите удалённый логин root и удалите тестовую базу.
Создание баз данных и пользователя для Seafile
Подключитесь к MariaDB от root:
mysql -u root -pВыполните запросы (замените пароль и имена баз по необходимости):
create database `ccnet-db` character set = 'utf8';
create database `seafile-db` character set = 'utf8';
create database `seahub-db` character set = 'utf8';
create user 'seafile'@'localhost' identified by 'Hakase-Seafile01@';
GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafile`@localhost;
flush privileges;
Советы
- Для производственной нагрузки рассмотрите параметризацию MariaDB (innodb_buffer_pool_size и другие). Настройку производительности делайте с учётом объёма ОЗУ и рабочих нагрузок.
- По умолчанию mysql.sock и конфигурация могут быть в /etc/mysql. Если Seafile не видит базу, проверьте bind‑address и права пользователя.
Шаг 3 — Загрузка Seafile Server и подготовка пользователя
Создайте не‑привилегированного системного пользователя (в примере — ryujin):
useradd -m -s /bin/bash ryujinВойдите под ним и скачайте архив Seafile (пример для версии 7.1.3):
su - ryujin
wget -q https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_7.1.3_x86-64.tar.gzРаспакуйте и переименуйте директорию:
tar -xf seafile-server_7.1.3_x86-64.tar.gz
mv seafile-server-*/ seafile-server/Директория установки: /home/ryujin/seafile-server

Замечание
- Убедитесь, что на диске достаточно места для хранения файлов и репозиториев Seafile (папка data). Для больших инсталляций вынесите storage на отдельный диск с правильными права доступа.
Шаг 4 — Установка Seafile с использованием MariaDB
Перейдите в каталог seafile-server и запустите интерактивный скрипт установки для MySQL/MariaDB:
su - ryujin
cd seafile-server/
./setup-seafile-mysql.shВо время установки будет проверка Python‑модулей. Следуйте интерактивным подсказкам:
- Укажите имя сервера (например, hakase-cloud).
- Укажите доменное имя (например, cloud.hakase-labs.io).
- Директорию данных оставьте по умолчанию или укажите свой путь.
- Порт fileserver оставьте 8082 (по умолчанию).

При выборе базы укажите, что будет использоваться существующая база (опция 2), и заполните параметры:
- Host: localhost
- Port: 3306
- User: seafile
- Password: Hakase-Seafile01@
- ccnet_db: ccnet-db
- seafile_db: seafile-db
- seahub_db: seahub-db

После завершения установки вы увидите сводку и сообщение об успехе.

Запуск Seafile и Seahub вручную (проверка работоспособности):
su - ryujin
cd ~/seafile-server-latest/
./seafile.sh start
./seahub.sh startПри первом запуске seahub вас попросят создать администратора — укажите email и пароль.

Проверка слушающих портов:
ss -plnt4Остановка тестовых сервисов:
./seafile.sh stop
./seahub.sh stop
Советы
- Если seahub не запускается, проверьте логи в папке seafile‑server‑latest/logs и права доступа на директории.
- Убедитесь, что версия Python совместима с пакетами, которые установились.
Шаг 5 — Настройка Seafile для доменного имени
Измените конфигурационные файлы, чтобы Seafile использовал HTTPS и ваше доменное имя.
Перейдите в конфигурацию:
su - ryujin
cd ~/seafile-server-latest/conf/Измените SERVICE_URL в ccnet.conf на ваш домен с https:
vim ccnet.conf
# SERVICE_URL = https://seafile.hakase-labs.ioВ seafile.conf в секции [fileserver] укажите локальный хост и порт:
vim seafile.conf
# [fileserver]
# host = 127.0.0.1
# port = 8082В seahub_settings.py добавьте путь к файловому серверу через /seafhttp:
vim seahub_settings.py
# FILE_SERVER_ROOT = 'https://seafile.hakase-labs.io/seafhttp'
Советы
- Если Seafile располагается за балансировщиком, возможно потребуется настроить дополнительные заголовки (X-Forwarded-Proto и т.д.) в Nginx.
- После изменения конфигураций перезапустите сервисы.
Шаг 6 — Seafile и Seahub как systemd‑сервисы
Создайте unit‑файлы в /etc/systemd/system/ для автоматического управления сервисами.
Создайте seafile.service:
cd /etc/systemd/system/
vim seafile.serviceВставьте:
[Unit]
Description=Seafile
After=network.target mysql.service nginx.service
[Service]
Type=forking
ExecStart=/home/ryujin/seafile-server-latest/seafile.sh start
ExecStop=/home/ryujin/seafile-server-latest/seafile.sh stop
User=ryujin
Group=ryujin
[Install]
WantedBy=multi-user.targetСоздайте seahub.service:
vim seahub.serviceВставьте:
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
Type=forking
ExecStart=/home/ryujin/seafile-server-latest/seahub.sh start
ExecStop=/home/ryujin/seafile-server-latest/seahub.sh stop
User=ryujin
Group=ryujin
[Install]
WantedBy=multi-user.targetПерезагрузите менеджер systemd и включите сервисы:
systemctl daemon-reload
systemctl start seafile
systemctl enable seafile
systemctl start seahub
systemctl enable seahub
systemctl status seafile seahub

Советы
- Если systemd пишет о неверных правах — проверьте, что скрипты seafile.sh и seahub.sh исполняемы и имеют владельца ryujin.
- Для логирования можно настроить лог‑ротацию и хранение логов в /var/log/seafile.
Шаг 7 — Получение SSL‑сертификата Let’s Encrypt и генерация dhparam
Установите certbot и создайте сертификат для вашего домена:
sudo apt install certbot -y
certbot certonly --agree-tos --no-eff-email --email admin@example.com -d seafile.hakase-labs.ioСертификаты будут расположены в /etc/letsencrypt/live/seafile.hakase-labs.io/
Создайте dhparam для повышения безопасности TLS:
openssl dhparam -out /etc/nginx/dhparam.pem 2048Советы
- Регулярно проверяйте работу certbot renew; создайте cron или systemd таймер для автоматического обновления.
- Для крупных установок рассмотрите использование 4096‑битного dhparam, но генерация займёт больше времени.
Шаг 8 — Установка и настройка Nginx как обратного прокси HTTPS
Установите nginx и включите сервис:
sudo apt install nginx -y
systemctl start nginx
systemctl enable nginxСоздайте файл виртуального хоста /etc/nginx/sites-available/seafile и вставьте конфигурацию (замените домен и пути сертификатов):
server {
listen 80;
server_name seafile.hakase-labs.io;
rewrite ^ https://$http_host$request_uri? permanent;
server_tokens off;
}
server {
listen 443 ssl http2;
server_name seafile.hakase-labs.io;
ssl_certificate /etc/letsencrypt/live/seafile.hakase-labs.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seafile.hakase-labs.io/privkey.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
ssl_dhparam /etc/nginx/dhparam.pem;
#SSL Security
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
server_tokens off;
ssl_session_tickets off;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_read_timeout 1200s;
# used for view/edit office file via Office Online Server
client_max_body_size 0;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
}
location /seafdav {
proxy_pass http://127.0.0.1:8080/seafdav;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1200s;
client_max_body_size 0;
access_log /var/log/nginx/seafdav.access.log;
error_log /var/log/nginx/seafdav.error.log;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
}
location /media {
root /home/ryujin/seafile-server-latest/seahub;
}
}Активируйте конфигурацию и проверьте nginx:
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
Замечания по безопасности SSL
- Конфигурация ssl_protocols и ssl_ciphers в примере включает старые версии TLS для совместимости; в продуктивной среде рекомендуется отключить TLSv1/TLSv1.1 и оставить TLSv1.2+.
- Проверьте конфигурацию через SSL Labs или аналогичный сервис.
Шаг 9 — Настройка UFW
Добавим правила для SSH, HTTP и HTTPS и активируем UFW:
for svc in ssh http https
do
ufw allow $svc
done
ufw enable
ufw status numbered
Советы
- Если у вас есть дополнительные сервисы (например, SFTP, SMB, бекенд базы данных на отдельном хосте), откройте только требуемые порты.
- Для облачного сервера можно ограничить SSH по IP или вынести SSH на нестандартный порт.
Шаг 10 — Тестирование
Откройте браузер и перейдите по адресу:
https://seafile.hakase-labs.io/
Если всё настроено верно, вы должны увидеть страницу входа по HTTPS. Войдите под учётной записью администратора.

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


Отладка — распространённые проблемы и решения
- Seahub не поднимается: проверьте логи в ~/seafile-server-latest/logs и seafile.log. Проверьте, установлены ли все Python‑библиотеки.
- Ошибки подключения к базе: проверьте user/host/пароль и права в MariaDB. Убедитесь, что bind_address не мешает локальным подключениям.
- Файловый сервер не отвечает: проверьте конфигурацию seafile.conf и соответствие портов (8082).
- Nginx возвращает 502/504: проверьте, запущены ли seafile и seahub, и что proxy_pass указывает на правильные порты.
- Проблемы с SSL: проверьте пути к сертификатам и права доступа; выполните nginx -t и изучите журналы ошибок nginx.
Рекомендации по безопасности
- Отключите старые версии TLS (оставьте TLSv1.2+).
- Используйте fail2ban для защиты SSH и, при необходимости, защиты веб‑интерфейса.
- Шифрование данных: Seafile поддерживает шифрование библиотек на уровне сервера/клиента — используйте при необходимости.
- Резервные копии баз данных и каталога seafile‑data должны выполняться регулярно и тестироваться при восстановлении.
Резервное копирование и восстановление — минимальный SOP
- Остановите сервисы: systemctl stop seahub seafile
- Сделайте дамп баз данных:
mysqldump -u root -p ccnet-db > ccnet-db.sql
mysqldump -u root -p seafile-db > seafile-db.sql
mysqldump -u root -p seahub-db > seahub-db.sql- Скопируйте каталоги данных Seafile (seafile‑data, seahub/media и т.д.) в безопасное место.
rsync -aH /home/ryujin/seafile-data /backup/seafile-data-YYYYMMDD- Проверьте целостность бэкапа.
- Запустите сервисы: systemctl start seafile seahub
Критерии приёмки резервного копирования
- Полные дампы баз данных без ошибок.
- Архивы/копии файлов доступны и своевременно восстанавливаются на тестовом окружении.
Обновление Seafile — короткий метод
- Перед обновлением сделайте полный бэкап (см. выше).
- Скачайте новую версию, распакуйте в отдельную папку и выполните миграционный скрипт, если он есть.
- Тестируйте обновление в стейджинге.
Советы по производительности
- Для больших объёмов данных используйте отдельный диск/том для storage (например, mount /data/seafile).
- Настройте memcached/pylibmc для ускорения сеансов и кеширования.
- Настройка MariaDB: увеличьте innodb_buffer_pool_size до ~70–80% от ОЗУ, если сервер предназначен только для БД.
Роль‑ориентированные чек‑листы
Администратор сервера:
- Проверить, что seafile и seahub запущены и включены в автозагрузку.
- Убедиться в наличии актуальных бэкапов БД и данных.
- Наблюдать за логами и свободным местом на диске.
DevOps / Системный инженер:
- Настроить мониторинг (CPU, RAM, диски, доступность портов).
- Настроить автоматическое обновление сертификатов и проверку nginx.
- Настроить систему оповещений на отказ сервисов.
Пользователь / Менеджер контента:
- Проверить доступ к веб‑интерфейсу и синхронизации клиента.
- Проверить права доступа к библиотекам и группы.
Тестовые сценарии и критерии приёмки
- Тест входа в веб‑интерфейс по HTTPS — успешно.
- Создание библиотеки и загрузка файла — файл появляется в файловой системе и в веб‑интерфейсе.
- Синхронизация с десктоп‑клиентом — файлы синхронизируются корректно.
- Восстановление из бэкапа — восстановление на тестовом хосте проходит без ошибок.
Если все тесты проходят — инсталляция готова к эксплуатации.
Альтернативные подходы и когда они подходят
- SQLite: подходит для небольших, тестовых установок, не для продакшена с множеством пользователей.
- Использование внешней службы хранения (S3) для файлов: полезно при сильных масштабах и распределённом хранении.
- Контейнеризация (Docker): упрощает деплой в микросервисной инфраструктуре и CI/CD, но требует навыков оркестрации.
Совместимость и миграция
- При миграции с других серверов: экспортируйте базы данных и каталоги seafile‑data.
- При переходе с Ubuntu 20.04 на 22.04 проверьте версии Python и зависимости; протестируйте в изолированной среде.
Конфиденциальность и соответствие (GDPR)
- Seafile хранит пользовательские файлы — администрация должна обеспечить контроль доступа и регулярные чистки.
- Логи аутентификации и действий могут содержать персональные данные — регламентируйте их хранение и доступ.
- При работе с гражданами ЕС обеспечьте возможность удаления и выгрузки пользовательских данных по запросу.
Краткая галерея особых случаев
- Использование Office Online Server: настройка client_max_body_size 0 и дополнительные пути в Nginx.
- Балансировка нагрузки: seafile поддерживает настройку нескольких файловых серверов, но это требует тонкой настройки и общего хранилища.
Таблица соответствия версий (советы)
- Ubuntu 20.04: совместима с Seafile 7 при корректной установке зависимостей.
- MariaDB: используйте поддерживаемую LTS‑версию из официальных репозиториев.
Факты (ключевые номера)
- Порты, используемые по умолчанию: seahub 8000 (внутр.), fileserver 8082, seafdav 8080.
- Каталог установки в примере: /home/ryujin/seafile-server-latest
- Пути сертификатов Let’s Encrypt: /etc/letsencrypt/live/seafile.hakase-labs.io/
1‑строчный глоссарий
Seahub — веб‑интерфейс Seafile; fileserver — служба отдачи файлов; ccnet — компонент синхронизации; seafile‑data — репозитории файлов.
Резюме
- Seafile можно успешно развернуть на Ubuntu 20.04 с MariaDB и Nginx в качестве обратного прокси.
- Важны шаги: установка зависимостей, безопасность MariaDB, настройка systemd, получение SSL и тестирование.
- Для продакшена настройте резервное копирование, мониторинг и дополнительные меры безопасности (TLS, fail2ban, права доступа).
Важно: перед переходом в продуктив протестируйте обновления и процедуру восстановления на тестовой среде.
Источники и документация
- Официальная документация Seafile: https://docs.seafile.com/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента