Гид по технологиям

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

• 10 min read • Инфраструктура • Обновлено 26 Nov 2025
Seafile на Ubuntu 20.04 с Nginx и MariaDB
Seafile на Ubuntu 20.04 с Nginx и MariaDB

Заставка: логотип Seafile и облачное хранилище

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 (для выдачи сертификата)

Быстрый план действий

  1. Установить зависимости Python и утилиты.
  2. Установить и зафиксировать MariaDB, создать базы и пользователя.
  3. Скачать и распаковать Seafile, запустить установщик для MariaDB.
  4. Настроить Seafile для работы с доменом.
  5. Сделать seafile/seahub systemd‑сервисами.
  6. Получить SSL от Let’s Encrypt и dhparam.
  7. Настроить Nginx как обратный прокси.
  8. Настроить UFW.
  9. Протестировать и выполнить набор проверок.

Шаг 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

/files/58941c2a-c526-49e2-8025-f7ac4dd57221.png

Настройка безопасности 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;

/files/d5bb9cfe-f4e7-4cba-a2ae-8909669db811.png

Советы

  • Для производственной нагрузки рассмотрите параметризацию 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

/files/b1f96bf1-81d8-495a-8455-78094225dbcc.png

Замечание

  • Убедитесь, что на диске достаточно места для хранения файлов и репозиториев 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 (по умолчанию).

/files/39e76607-6a95-49ec-9ddb-8bcfd2aa4aa7.png

При выборе базы укажите, что будет использоваться существующая база (опция 2), и заполните параметры:

  • Host: localhost
  • Port: 3306
  • User: seafile
  • Password: Hakase-Seafile01@
  • ccnet_db: ccnet-db
  • seafile_db: seafile-db
  • seahub_db: seahub-db

/files/91747d6e-e499-4041-a97d-0c502787dfda.png

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

/files/2381e734-3a3f-4219-a343-1cefd6c001ff.png

Запуск Seafile и Seahub вручную (проверка работоспособности):

su - ryujin
cd ~/seafile-server-latest/
./seafile.sh start
./seahub.sh start

При первом запуске seahub вас попросят создать администратора — укажите email и пароль.

/files/7c32769e-d4fe-4bc6-8158-d93643ff803c.png

Проверка слушающих портов:

ss -plnt4

Остановка тестовых сервисов:

./seafile.sh stop
./seahub.sh stop

/files/f8ee8e41-d40d-43ea-ac37-786046debd34.png

Советы

  • Если 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'

/files/285e9f6c-4429-4c17-b7a9-70bf70ad2b92.png

Советы

  • Если 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

/files/28b0a9f9-4e21-4852-9ee2-ac5551ad4e11.png

/files/af40dbdc-833e-4b67-82c8-01f7f152d9da.png

Советы

  • Если 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

/files/ed9eed67-87d4-4fb7-b3c9-752077890120.png

Замечания по безопасности 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

/files/e99d241d-5234-4cf7-9395-96e72c8f9e05.png

Советы

  • Если у вас есть дополнительные сервисы (например, SFTP, SMB, бекенд базы данных на отдельном хосте), откройте только требуемые порты.
  • Для облачного сервера можно ограничить SSH по IP или вынести SSH на нестандартный порт.

Шаг 10 — Тестирование

Откройте браузер и перейдите по адресу:

https://seafile.hakase-labs.io/

Если всё настроено верно, вы должны увидеть страницу входа по HTTPS. Войдите под учётной записью администратора.

/files/b1931fa5-8e40-4be0-ab88-af5a2c889c22.png

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

/files/b7543736-147b-420b-841c-6a1ac5ae18e6.png

/files/4614831a-866b-4d42-9ac1-ab1eff04428f.png


Отладка — распространённые проблемы и решения

  • 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

  1. Остановите сервисы: systemctl stop seahub seafile
  2. Сделайте дамп баз данных:
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
  1. Скопируйте каталоги данных Seafile (seafile‑data, seahub/media и т.д.) в безопасное место.
rsync -aH /home/ryujin/seafile-data /backup/seafile-data-YYYYMMDD
  1. Проверьте целостность бэкапа.
  2. Запустите сервисы: systemctl start seafile seahub

Критерии приёмки резервного копирования

  • Полные дампы баз данных без ошибок.
  • Архивы/копии файлов доступны и своевременно восстанавливаются на тестовом окружении.

Обновление Seafile — короткий метод

  • Перед обновлением сделайте полный бэкап (см. выше).
  • Скачайте новую версию, распакуйте в отдельную папку и выполните миграционный скрипт, если он есть.
  • Тестируйте обновление в стейджинге.

Советы по производительности

  • Для больших объёмов данных используйте отдельный диск/том для storage (например, mount /data/seafile).
  • Настройте memcached/pylibmc для ускорения сеансов и кеширования.
  • Настройка MariaDB: увеличьте innodb_buffer_pool_size до ~70–80% от ОЗУ, если сервер предназначен только для БД.

Роль‑ориентированные чек‑листы

Администратор сервера:

  • Проверить, что seafile и seahub запущены и включены в автозагрузку.
  • Убедиться в наличии актуальных бэкапов БД и данных.
  • Наблюдать за логами и свободным местом на диске.

DevOps / Системный инженер:

  • Настроить мониторинг (CPU, RAM, диски, доступность портов).
  • Настроить автоматическое обновление сертификатов и проверку nginx.
  • Настроить систему оповещений на отказ сервисов.

Пользователь / Менеджер контента:

  • Проверить доступ к веб‑интерфейсу и синхронизации клиента.
  • Проверить права доступа к библиотекам и группы.

Тестовые сценарии и критерии приёмки

  1. Тест входа в веб‑интерфейс по HTTPS — успешно.
  2. Создание библиотеки и загрузка файла — файл появляется в файловой системе и в веб‑интерфейсе.
  3. Синхронизация с десктоп‑клиентом — файлы синхронизируются корректно.
  4. Восстановление из бэкапа — восстановление на тестовом хосте проходит без ошибок.

Если все тесты проходят — инсталляция готова к эксплуатации.

Альтернативные подходы и когда они подходят

  • 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, права доступа).

Важно: перед переходом в продуктив протестируйте обновления и процедуру восстановления на тестовой среде.

Источники и документация

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро