Docker и DevOps 13 мин чтения 2026-10-14

Быстрое приватное облако Seafile на VDS в Docker Compose: легкая замена Nextcloud с мгновенной синхронизацией файлов, дедупликацией и клиентами под все платформы

Практическое руководство по развертыванию Seafile Community Edition 12 в Docker Compose: архитектура ядра на C, блочная дедупликация, виртуальный диск SeaDrive и клиенты под все платформы.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

С каждым годом зависимость от коммерческих облачных хранилищ (Google Drive, Dropbox, OneDrive или Яндекс Диск) становится все более рискованной: растущие тарифы за подписку, непрозрачные блокировки аккаунтов, автоматическое сканирование личных документов алгоритмами и лимиты на скорость передачи данных. Логичным решением для сисадминов, вебмастеров и команд разработчиков становится развертывание собственного приватного облака на независимом VDS.

Первым кандидатом у большинства пользователей традиционно оказывается Nextcloud. Однако Nextcloud — это масштабная платформа для групповой работы (Groupware), включающая календарь, почту, контакты, видеозвонки Talk и офисные пакеты. Если ваша основная задача — надежная, быстрая синхронизация больших объемов файлов и резервное копирование без избыточной нагрузки на дисковый ввод-вывод (IOPS), специализированным решением выступает Seafile.

В этой практической инструкции мы разберем развертывание актуальной стабильной редакции Seafile Community Edition 12.0 в связке с MariaDB 11.4 LTS, Memcached и Nginx Reverse Proxy в Docker Compose, разберем механизмы дедупликации данных и подключим клиентские приложения для доступа к файлам с любых устройств.

1. Архитектура Seafile: почему он в разы легче и быстрее Nextcloud

Фундаментальное преимущество Seafile перед другими self-hosted хранилищами кроется в его архитектуре. Если классические облачные движки оперируют файлами на диске напрямую через протокол WebDAV или связку скриптов, архитектура Seafile во многом повторяет принципы распределенной системы контроля версий Git:

  • Высокопроизводительное ядро на языке C (seaf-server): Вся низкоуровневая логика синхронизации, передача сетевых пакетов и дисковый ввод-вывод написаны на чистом компилируемом Си. Ядро потребляет минимум системных ресурсов и не страдает от задержек сборщика мусора или интерпретатора.
  • Блочная модель хранения (Block-based Storage): При загрузке файл нарезается на независимые блоки данных фиксированного размера по 1 МБ (по умолчанию 1048576 байт, настраивается директивой block_size в seafile.conf). Для каждого блока вычисляется криптографический хэш SHA1.
  • Адресуемое по контенту хранилище (Content-Addressable Storage): Блоки сохраняются на файловой системе хоста в каталоге storage/blocks/ (структурированном по двум первым символам хэша, аналогично каталогу .git/objects/ в Git). Для стандартных библиотек блоки хранятся в открытом бинарном виде, а сквозное шифрование применяется на стороне клиента только при создании защищенных паролем библиотек (E2EE).
  • Мгновенная дедупликация (Deduplication): Если один и тот же файл (или его часть) загружается несколькими пользователями либо дублируется в разных папках, Seafile сохраняет физический блок данных ровно один раз. Это экономит десятки гигабайт дискового пространства на VDS.
  • Дельта-синхронизация (Delta Sync): При редактировании объемного документа или архива Seafile передает по сети только те блоки по 1 МБ, которые реально изменились, а не перезаливает весь файл заново.
  • Легковесный веб-интерфейс Seahub: Панель управления и веб-доступ построены на базе легковесного Python-фреймворка Django и задействуются только тогда, когда пользователь открывает браузер. Фоновый сервис notification-server обеспечивает мгновенную доставку WebSocket-уведомлений клиентам.

💡 Совет инженера

Перед началом настройки домена и выпуска SSL-сертификата убедитесь через наш онлайн-чекер Hosting Checker, что DNS-запись вашего поддомена (например, seafile.example.com) уже направлена на IP-адрес вашего VDS и отдает корректные сетевые ответы.

2. Сравнение Seafile и Nextcloud: архитектура стека, потребление RAM и дедупликация

Чтобы объективно оценить разницу между двумя ведущими решениями для самохостинга, сравним их ключевые инженерные метрики в условиях реальной эксплуатации на сервере:

Критерий Nextcloud (PHP-стек) Seafile (C / Django)
Назначение платформы Комплексный Groupware-комбайн (почта, календарь, контакты, чаты Talk, Deck, офис) Специализированное облако для скоростной синхронизации, дедупликации и хранения файлов
Язык ядра синхронизации PHP (интерпретируемый скриптовый язык) C (компилируемый нативный код seaf-server)
Базовое потребление RAM От 800–1500 МБ в рабочем режиме (воркеры PHP-FPM, Apache/Nginx, Redis, Cron) ~300–450 МБ (по замерам: Seafile CE 12, MariaDB 11.4, Memcached)
Протокол передачи данных WebDAV поверх HTTP (отдельный HTTP-запрос и запись метаданных на каждый файл) Нативный блочный протокол (пакетная потоковая передача 1 МБ блоков)
Синхронизация каталогов с мелкими файлами Медленнее из-за накладных расходов WebDAV и множества транзакций БД Высокая скорость благодаря пакетной обработке блоков в C-ядре
Встроенная дедупликация Отсутствует в ядре (требует ZFS/Btrfs на уровне хоста) Встроена в ядро (автоматически по хэшам 1 МБ блоков)
Виртуальный диск (on-demand) Виртуальные файлы Windows / WebDAV Полноценный SeaDrive (FUSE / Dokany) с настраиваемым локальным кэшем
Минимальный VDS 2 vCPU / 2–4 ГБ RAM 1 vCPU / 1–2 ГБ RAM

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

3. Подготовка VDS и безопасная структура директорий

Для развертывания Seafile рекомендуется чистый VDS под управлением Ubuntu 24.04 LTS или Debian 12. Стек полностью контейнеризирован, поэтому на самом хосте достаточно установить Docker Engine и официальный плагин Compose из репозитория Docker:

# Установка официального Docker Engine и плагина Compose
curl -fsSL https://get.docker.com | sudo sh

# Включение автозапуска службы Docker
sudo systemctl enable --now docker

# Создание изолированной директории для хранения данных облака
sudo mkdir -p /opt/seafile/{data,db}
cd /opt/seafile

Для соблюдения стандартов безопасности вынесем все пароли и настройки авторизации в отдельный защищенный файл .env. Сгенерируем криптостойкие случайные пароли с помощью утилиты openssl:

# Генерация надежных случайных паролей
DB_ROOT_PASS=$(openssl rand -hex 20)
SEAFILE_ADMIN_PASS=$(openssl rand -hex 16)

# Создание файла .env с правами доступа только для root
sudo bash -c "cat <<EOF > /opt/seafile/.env
MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
SEAFILE_ADMIN_EMAIL=admin@example.com
SEAFILE_ADMIN_PASSWORD=${SEAFILE_ADMIN_PASS}
SEAFILE_SERVER_HOSTNAME=seafile.example.com
EOF"

sudo chmod 600 /opt/seafile/.env

⚠️ Важное предупреждение

Обязательно сохраните сгенерированный пароль администратора (cat /opt/seafile/.env). Он потребуется для первого входа в веб-панель управления Seahub.

4. Развертывание стека в Docker Compose: Seafile 12, MariaDB 11.4 и Memcached

В официальный стек Seafile 12 входят три ключевых компонента: реляционная база данных MariaDB 11.4 LTS (хранит метаданные пользователей, права, токены и историю библиотек), сервис Memcached (кэширует сессии пользователей и частые SQL-запросы для разгрузки диска) и главный контейнер Seafile-MC 12.0 (содержит seaf-server, seahub и демон notification-server).

Создайте файл /opt/seafile/docker-compose.yml со следующим содержимым:

services:
  db:
    image: mariadb:11.4
    container_name: seafile-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - /opt/seafile/db:/var/lib/mysql
    networks:
      - seafile-net
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    mem_limit: 512m
    cpus: 1.0

  memcached:
    image: memcached:1.6-alpine
    container_name: seafile-memcached
    restart: unless-stopped
    entrypoint: memcached -m 128
    networks:
      - seafile-net
    mem_limit: 128m
    cpus: 0.5

  seafile:
    image: seafileltd/seafile-mc:12.0-latest
    container_name: seafile
    restart: unless-stopped
    ports:
      # Безопасная привязка веб-порта строго к локальному интерфейсу 127.0.0.1
      - "127.0.0.1:8080:80"
    volumes:
      - /opt/seafile/data:/shared
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=${MYSQL_ROOT_PASSWORD}
      - SEAFILE_MYSQL_DB_HOST=db
      - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - TIME_ZONE=Europe/Moscow
      - SEAFILE_ADMIN_EMAIL=${SEAFILE_ADMIN_EMAIL}
      - SEAFILE_ADMIN_PASSWORD=${SEAFILE_ADMIN_PASSWORD}
      - SEAFILE_SERVER_LETSENCRYPT=false
      - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME}
    depends_on:
      db:
        condition: service_healthy
      memcached:
        condition: service_started
    networks:
      - seafile-net
    mem_limit: 1024m
    cpus: 1.5

networks:
  seafile-net:
    driver: bridge

Обратите внимание на ключевые инженерные особенности манифеста:

  • Проверка готовности базы данных (Healthcheck): Контейнер seafile ожидает статус service_healthy от MariaDB перед началом собственной инициализации. Это полностью исключает сбои миграций при медленном старте СУБД.
  • Переменные окружения Seafile 12: В манифесте объявлены как классические переменные (DB_HOST, DB_ROOT_PASSWD), так и официальные параметры Seafile 12 (SEAFILE_MYSQL_DB_HOST, INIT_SEAFILE_MYSQL_ROOT_PASSWORD), гарантируя обратную и прямую совместимость.
  • Защита от обхода фаервола (UFW Bypass): Веб-порт Seafile проброшен на хост строго через 127.0.0.1:8080:80. Docker не откроет порт наружу в обход системного фаервола. База данных и Memcached вовсе не имеют директивы ports и изолированы внутри виртуальной сети seafile-net.
  • Безопасность автообновлений СУБД: Переменная MARIADB_AUTO_UPGRADE=1 автоматически запускает процедуру mariadb-upgrade для служебных таблиц при минорных обновлениях контейнера. Обратите внимание: перед переходом между мажорными ветками MariaDB (например, с 10.11 на 11.4) всегда выполняйте предварительный холодный бэкап баз данных.
  • Лимиты ресурсов (mem_limit и cpus): На верхнем уровне сервисов заданы лимиты cgroups для защиты сервера от OOM Killer при пиковых нагрузках.

Запустите контейнеры в фоновом режиме:

# Запуск стека контейнеров
sudo docker compose up -d

# Мониторинг процесса первой инициализации баз данных и таблиц
sudo docker compose logs -f seafile

Первый запуск занимает около 30–60 секунд: контейнер автоматически создаст три базы данных (ccnet_db, seafile_db, seahub_db), выполнит миграции и создаст учетную запись суперпользователя.

5. Настройка Nginx Reverse Proxy, автопродления SSL и отключения буферизации

Для безопасного доступа к файлам через защищенный протокол HTTPS и комфортной загрузки файлов любого объема (включая видеоархивы и ISO-образы на 10–50 ГБ) настроим внешний веб-сервер Nginx в качестве обратного прокси (Reverse Proxy).

Установите Nginx и клиент Certbot на хостовую систему:

sudo apt-get install -y nginx certbot python3-certbot-nginx

Создайте конфигурационный файл виртуального хоста /etc/nginx/sites-available/seafile.conf:

server {
    listen 80;
    server_name seafile.example.com;

    # Максимальный размер загружаемого файла (0 снимает любые ограничения)
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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-Proto $scheme;

        # Критически важная директива для потоковой загрузки тяжелых файлов
        proxy_request_buffering off;
        proxy_read_timeout 36000s;
        proxy_send_timeout 36000s;
    }

    # Поддержка WebSocket для мгновенных уведомлений в клиентах (notification-server)
    location /notification/ping/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 36000s;
    }
}

💡 Совет инженера: почему так важна директива proxy_request_buffering off

По умолчанию Nginx полностью вычитывает входящий файл с клиента и сохраняет его во временную директорию /var/lib/nginx/body/ на диске VDS, и только после 100% получения начинает передавать его бэкенду. При выгрузке файла размером 20 ГБ это приводит к двойной нагрузке на диск, риску переполнения раздела и неизбежным сетевым таймаутам. Директива proxy_request_buffering off; отключает промежуточную буферизацию и передает поток данных напрямую в ядро Seafile в режиме реального времени.

Активируйте конфигурацию и выпустите бесплатный SSL-сертификат Let's Encrypt с автоматическим перенаправлением с HTTP на HTTPS:

# Создание символической ссылки и проверка конфигурации
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Выпуск SSL-сертификата с автоматическим редиректом
sudo certbot --nginx -d seafile.example.com --non-interactive --agree-tos -m admin@example.com --redirect

После выпуска сертификата проверьте корректность TLS-цепочки и протоколов через наш инструмент SSL Checker. Если вам требуется готовый расширенный шаблон проксирования, воспользуйтесь генератором Nginx Reverse Proxy.

6. Требования к серверу и выбор VDS для приватного облака

В отличие от тяжелых многокомпонентных комбайнов, архитектура Seafile на C чрезвычайно бережлива к вычислительным ресурсам. Для комфортной работы персонального облака или команды из 5–10 человек достаточно компактного виртуального сервера со следующими характеристиками:

  • Оперативная память (RAM): От 1 до 2 ГБ. Базовый стек Docker (MariaDB 11.4 + Memcached + Seafile 12) потребляет около 300–450 МБ, оставляя свободную память для дискового кэша страниц Linux (Page Cache).
  • Дисковая подсистема: Быстрые NVMe-накопители гарантируют мгновенное чтение 1 МБ блоков и быстрый отклик базы данных метаданных при поиске и синхронизации.
  • Сетевой интерфейс от 1 Гбит/с: Высокая пропускная способность позволяет скачивать и загружать файлы на максимальной скорости вашего интернет-канала.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud — Быстрые NVMe VDS

Высокочастотные процессоры 3.3+ ГГц для мгновенной обработки блоков Seafile, скоростные NVMe-накопители и трафик без ограничений на скорости 1 Гбит/с.

Конфигурация
1 vCPU 3.3 ГГц • 1 ГБ RAM • 15 ГБ NVMe • Трафик без лимита
Премиум Tier III
🔷

Selectel — Надежные облачные серверы

Отказоустойчивая инфраструктура в сертифицированных дата-центрах Tier III, возможность горячего расширения дисков до терабайтов и гибкая локальная сеть.

Конфигурация
2 vCPU • 2 ГБ RAM • 30 ГБ NVMe • Дата-центры Tier III
Простота и стабильность
🟠

Beget — Простота для веб-разработчиков

Развертывание Docker Compose в 1 клик, интуитивная панель управления сервером, бесплатные автоматические бэкапы VDS и отзывчивая поддержка 24/7.

Конфигурация
1 vCPU • 1 ГБ RAM • 15 ГБ NVMe • Бесплатные бэкапы

7. Подключение клиентов: классическая синхронизация и виртуальный диск SeaDrive

Для взаимодействия с хранилищем Seafile предлагает два независимых типа десктопных приложений под Windows, macOS и Linux. Выбор зависит от ваших сценариев работы:

1. Классический клиент синхронизации (Seafile Sync Client)

Работает по проверенной схеме локального зеркалирования: вы выбираете нужные библиотеки (Libraries) в интерфейсе приложения, и они полностью скачиваются в локальную папку на вашем компьютере. Ключевые преимущества:

  • Полноценный оффлайн-доступ: Все файлы доступны без подключения к интернету (например, в поездках). Как только связь восстановится, клиент автоматически синхронизирует внесенные изменения.
  • Мгновенная дельта-синхронизация: При изменении одного листа в таблице или базы данных SQLite по сети отправятся только измененные блоки по 1 МБ, а не весь файл целиком.
  • Полная поддержка сквозного шифрования (E2EE): Классический Sync Client полностью поддерживает расшифровку зашифрованных библиотек на локальном компьютере.

2. Виртуальный диск SeaDrive (On-Demand доступ)

Если у вас ноутбук с небольшим SSD на 256–512 ГБ, а в облаке хранятся терабайты фотоархивов, бекапов и дистрибутивов, классическая синхронизация быстро забьет диск. Решением становится SeaDrive:

  • Клиент монтирует виртуальный диск (например, диск S: в Проводнике Windows или точку монтирования через FUSE в macOS/Linux).
  • Вы видите полную структуру всех ваших папок и файлов, но физически они не занимают места на локальном накопителе.
  • Файл скачивается по сети только в момент его открытия любой программой (видеоплеером, графическим редактором или офисным пакетом).
  • SeaDrive поддерживает интеллектуальное управление локальным кэшем: вы можете задать максимальный объем временного кэша (например, 15 ГБ), и старые файлы будут автоматически вытесняться из кэша, сохраняясь на сервере.

⚠️ Важное архитектурное ограничение SeaDrive: отсутствие поддержки E2EE

Обратите внимание: клиент виртуального диска SeaDrive принципиально не поддерживает зашифрованные библиотеки (E2EE) и даже не отображает их в проводнике операционной системы. Это архитектурное ограничение драйвера FUSE/Dokany: потоковый виртуальный диск не может выполнять на лету расшифровку блочных криптографических метаданных без сохранения локального состояния. Если вам нужны зашифрованные библиотеки — используйте классический Seafile Sync Client или мобильное приложение.

💡 Совет инженера

Мобильные приложения Seafile под Android и iOS поддерживают автоматическую фоновую выгрузку фотографий и видео с камеры смартфона на ваш VDS сразу при подключении к домашней Wi-Fi сети, выступая полноценной приватной заменой Google Photos и iCloud.

8. Клиентское шифрование библиотек (E2EE) и совместный доступ

Одной из ключевых возможностей Seafile является встроенная поддержка сквозного клиентского шифрования библиотек (End-to-End Encryption, E2EE):

  • При создании зашифрованной библиотеки пользователь задает отдельный криптографический пароль.
  • Этот пароль никогда не передается на сервер в открытом или хешированном виде.
  • Современный формат шифрования (версия библиотек v4): В современных версиях Seafile используется формат зашифрованных библиотек v4. Криптографический ключ формируется на стороне клиента с помощью алгоритма PBKDF2 (более 1000 итераций SHA256) с уникальной солью, а блоки данных шифруются по стандарту AES-256-CBC (с аутентификацией HMAC-SHA256 для проверки целостности) непосредственно на клиентском компьютере или телефоне до момента отправки в сеть.
  • Даже если злоумышленник получит физический доступ к вашему серверу, снимет снэпшот VDS или украдет базу данных, он увидит лишь набор зашифрованных бинарных блоков, прочитать которые без вашего пароля математически невозможно.

Для незашифрованных библиотек Seafile предоставляет гибкий функционал совместной работы: генерацию защищенных паролем публичных ссылок для клиентов со сроком действия, создание одноразовых ссылок для загрузки файлов вам на сервер (Upload Links), а также разграничение прав внутри команды (только чтение, чтение и запись, администрирование папки).

9. Резервное копирование и сборка мусора (Garbage Collection seaf-gc)

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

Очистка дискового пространства через seaf-gc: обязательное правило остановки в CE

Когда пользователи удаляют файлы из библиотеки или очищают сетевую корзину, соответствующие блоки данных не удаляются с диска мгновенно для сохранения истории снимков. Для физического освобождения места запускается утилита сборки мусора (Garbage Collector):

⚠️ Критическое правило Seafile Community Edition: обязательная остановка сервера перед GC

В отличие от коммерческой версии Seafile Professional (поддерживающей фоновый онлайн-GC), в бесплатной Community Edition категорически запрещено запускать seaf-gc на работающем сервере! Если во время работы сборщика мусора клиент загрузит новые блоки файлов, сборщик мусора, не обнаружив еще ссылок на них в несинхронизированных транзакциях БД, посчитает их мусором и безвозвратно удалит с диска. Для безопасного выполнения GC контейнер Seafile обязательно останавливается на время очистки.

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

# 1. Остановка контейнера Seafile для предотвращения повреждения данных
sudo docker compose -f /opt/seafile/docker-compose.yml stop seafile

# 2. Тестовый прогон (сухой запуск) для оценки освобождаемого объема
sudo docker compose -f /opt/seafile/docker-compose.yml run --rm --entrypoint /opt/seafile/seafile-server-latest/seaf-gc.sh seafile --dry-run

# 3. Реальный запуск сборки мусора с удалением неиспользуемых блоков
sudo docker compose -f /opt/seafile/docker-compose.yml run --rm --entrypoint /opt/seafile/seafile-server-latest/seaf-gc.sh seafile

# 4. Запуск контейнера Seafile обратно в штатный режим
sudo docker compose -f /opt/seafile/docker-compose.yml start seafile

Для автоматизации этой процедуры создайте скрипт /opt/seafile/run-gc.sh с правами chmod 700 и настройте его ночной запуск раз в неделю (например, в ночь на воскресенье в 03:00) через планировщик Cron с помощью нашего генератора Crontab Generator.

Резервное копирование: гарантия согласованности данных (Data Consistency)

В соответствии с официальной документацией Seafile, создание надежного бэкапа требует синхронного сохранения двух связанных сущностей: реляционной базы данных (метаданные пользователей, права, деревья каталогов и ссылки на блоки) и физических блоков в каталоге data/. Если выполнять дамп БД во время активной записи файлов пользователями, метаданные и дисковые блоки рассинхронизируются, что приведет к повреждению целостности библиотек при восстановлении.

Правильный производственный подход — кратковременная приостановка контейнера Seafile (команда docker compose pause) на время снятия снимка. Создадим готовый скрипт резервного копирования /opt/seafile/backup.sh:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/opt/backups/seafile"
DATE=$(date +%F_%H%M%S)
mkdir -p "$BACKUP_DIR"

# Экспорт переменных из защищенного файла .env
set -a
source /opt/seafile/.env
set +a

echo "⏸ Приостановка контейнера Seafile для фиксации состояния диска..."
docker compose -f /opt/seafile/docker-compose.yml pause seafile

echo "💾 Создание дампа рабочих баз Seafile (ccnet_db, seafile_db, seahub_db)..."
docker compose -f /opt/seafile/docker-compose.yml exec -T db \
    mariadb-dump -u root -p"${MYSQL_ROOT_PASSWORD}" \
    --databases ccnet_db seafile_db seahub_db --single-transaction | gzip > "${BACKUP_DIR}/seafile_db_${DATE}.sql.gz"

echo "📦 Создание архива блоков данных и конфигурационных файлов..."
tar -czf "${BACKUP_DIR}/seafile_data_${DATE}.tar.gz" -C /opt/seafile data .env

echo "▶️ Возобновление работы контейнера Seafile..."
docker compose -f /opt/seafile/docker-compose.yml unpause seafile

echo "✅ Бэкап успешно создан: ${BACKUP_DIR} (метка: ${DATE})"

Сделайте скрипт исполняемым с ограниченными правами доступа:

sudo chmod 700 /opt/seafile/backup.sh

Обратите внимание: в дамп включены строго рабочие базы данных Seafile (ccnet_db, seafile_db, seahub_db) с флагом --single-transaction, без захвата служебных системных таблиц MariaDB. Подробнее об организации автоматической выгрузки шифрованных снимков в объектное хранилище читайте в нашем руководстве по автоматическим бэкапам Restic в S3.

10. Чек-лист проверки и безопасности облачного хранилища

📋 Чек-лист администратора перед вводом в эксплуатацию

  • Проверьте привязку портов: порт веб-сервера привязан строго к 127.0.0.1:8080, порт MariaDB 3306 и Memcached 11211 закрыты от внешней сети.
  • Проверьте сетевой периметр VDS с помощью нашего сервиса сканера портов онлайн.
  • Убедитесь, что в конфигурации Nginx прописана директива proxy_request_buffering off; для предотвращения дисковой буферизации больших загрузок.
  • Проверьте работу автоматического перенаправления с HTTP на защищенный протокол HTTPS.
  • Создайте тестовую зашифрованную библиотеку E2EE и проверьте доступ к ней через классический клиент Seafile Sync Client или мобильное приложение (помните: клиент виртуального диска SeaDrive не поддерживает зашифрованные библиотеки).
  • Убедитесь, что регулярный запуск сборщика мусора seaf-gc.sh в Community Edition настроен строго с предварительной остановкой контейнера seafile.
  • Убедитесь, что файл /opt/seafile/.env имеет ограниченные права chmod 600, а скрипты backup.sh и run-gc.sh — chmod 700 и доступны только суперпользователю root.

Проверьте сетевую безопасность вашего VDS онлайн

Убедитесь, что после развертывания Docker Compose служебные порты баз данных и кэша надежно скрыты за фаерволом и не видны внешним сканерам уязвимостей.

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

В чем главное отличие клиента SeaDrive от обычного Seafile Sync Client?
Обычный клиент синхронизации полностью скачивает выбранные библиотеки на локальный накопитель компьютера, обеспечивая автономный доступ к файлам без интернета и полную поддержку зашифрованных библиотек (E2EE). Клиент SeaDrive монтирует облако как виртуальный диск в Проводнике Windows или Finder macOS: вы видите всю структуру папок, но файлы загружаются по сети по требованию (on-demand) только в момент открытия, не расходуя дисковое пространство вашего компьютера (обратите внимание: зашифрованные E2EE-библиотеки клиент SeaDrive не поддерживает).
Что произойдет, если я забуду пароль от зашифрованной библиотеки (E2EE)?
Если вы потеряете пароль от зашифрованной библиотеки, восстановить файлы будет невозможно ни вами, ни администратором сервера. При клиентском шифровании в Seafile (формат v4) пароль преобразуется в криптографический ключ AES-256 через PBKDF2 с солью непосредственно на вашем устройстве и никогда не отправляется на сервер. У сервера просто нет математической возможности расшифровать ваши данные без исходного пароля.
Почему после удаления файлов место на диске VDS сразу не освободилось?
Seafile сохраняет удаленные блоки данных для поддержки истории снимков и корзины. Чтобы окончательно очистить физическое дисковое пространство, необходимо запустить сборщик мусора seaf-gc. В Community Edition перед запуском seaf-gc контейнер seafile обязательно необходимо временно остановить, чтобы избежать случайного удаления новых блоков, загружаемых во время очистки.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи