Новые релизы
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Seafile синхронизирует файлы блоками с дедупликацией, а не зеркалированием каталога, — за счёт этого большие коллекции и прерванные передачи идут быстро. Каждая библиотека синхронизируется отдельно с настольным клиентом, телефоном и браузером, открывается по ссылке или по учётной записи и может шифроваться на стороне клиента, чтобы сервер не видел содержимого.
Seafile — это синхронизация и общий доступ к файлам, построенные вокруг библиотек: каждая библиотека — отдельный репозиторий с версиями, который синхронизируется с настольным клиентом, телефоном или браузером и открывается по ссылке либо по учётной записи. Файлы хранятся дедуплицированными блоками, а не зеркальным деревом каталогов, — именно поэтому большие коллекции синхронизируются быстро, а прерванная передача продолжается с места обрыва. Библиотеку можно зашифровать на стороне клиента, и тогда сервер не видит её содержимого.
Рецепт поднимает зафиксированный Seafile Community Edition 13.0.25 с MariaDB 10.11 и кешем Valkey. Сервер держит конфигурацию, журналы и всё хранилище объектов в одном volume; три базы хранят учётные записи, библиотеки и метаданные. Web-порт привязан к localhost, а редактор SeaDoc, сервер уведомлений и AI-модуль выключены: это отдельные контейнеры, которых в рецепте нет.
Полный прикладной smoke-тест и практическая проверка backup и restore прошли на
amd64. Публикуемый образ существует только
для amd64 — сборки под ARM upstream помечает как testing, — поэтому в манифесте
одна архитектура, а не обещание Raspberry Pi. Учётная запись администратора,
пароль root MariaDB, пароль роли базы, пароль кеша и ключ JWT берутся из .env:
поставьте файлу режим 600, держите его вне Git и шифруйте каждый архив.
SEAFILE_SERVER_HOSTNAME и SEAFILE_SERVER_PROTOCOL попадают в ссылки,
приглашения по почте и настройки клиентов при первом старте; смена домена позже
означает правку сгенерированной конфигурации внутри volume. SAML и расширенные
функции администрирования относятся к Professional Edition и в этот рецепт не
входят.
Это сохранённые результаты отдельных проверок, а не данные в реальном времени. Неизвестный статус означает, что проверка ещё не выполнялась.
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Результат отдельного сканирования Docker-образов, а не проверки Compose.
Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.
Изменения upstream Compose относительно проверенного рецепта.
Проверка закреплённых тегов образов на наличие новых версий.
От наблюдения к действию
Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.
13.0.2513.0.25Для источника с ручным отслеживанием нет точной ссылки на release notes. Начните с источников проекта ниже.
Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.
Смена тегов образов сейчас не планируется.
Миграция, мажоры нельзя пропускать. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.
Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.
Точная проверка уровня «Проверен полностью» для этой версии записана 2026-09-03.
Статус показывает, насколько опубликованный рецепт покрывает требования каждого уровня.
Минимальная конфигурация для локальной сети или доступа через VPN.
Нужно добавить вручную: один сервер, локальный доступ, минимум компонентов.
Публичная установка с защищённым доступом и резервными копиями.
Нужно добавить вручную: домен, https через reverse proxy, backup вне сервера.
Конфигурация для предсказуемой эксплуатации и наблюдаемости.
Нужно добавить вручную: внешний мониторинг, лимиты cpu и памяти.
Собрать под свой сервер
Ответьте на пять вопросов и скачайте готовый комплект Seafile.
Скриншоты ещё не добавлены.
Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.
cp .env.example .envdocker compose up -ddocker compose psПодойдёт Ubuntu 22.04+ или Debian 12+ с Docker Engine и Compose v2.24+. Upstream просит минимум 2 ядра и 2 ГБ RAM; закладывайте 4 ГБ и диск под все библиотеки плюс историю версий, которую каждая библиотека хранит. Публикуемый образ есть только для amd64, поэтому ARM-плата для этого рецепта не поддерживается.
docker --version
docker compose version
mkdir -p ~/services/seafile
cd ~/services/seafile
cp .env.example .env
chmod 600 .env
admin_password="$(openssl rand -hex 24)"
db_root_password="$(openssl rand -hex 32)"
db_password="$(openssl rand -hex 32)"
jwt_key="$(openssl rand -hex 32)"
cache_password="$(openssl rand -hex 32)"
sed -i "s|^SEAFILE_ADMIN_PASSWORD=.*|SEAFILE_ADMIN_PASSWORD=$admin_password|" .env
sed -i "s|^SEAFILE_DB_ROOT_PASSWORD=.*|SEAFILE_DB_ROOT_PASSWORD=$db_root_password|" .env
sed -i "s|^SEAFILE_DB_PASSWORD=.*|SEAFILE_DB_PASSWORD=$db_password|" .env
sed -i "s|^SEAFILE_JWT_PRIVATE_KEY=.*|SEAFILE_JWT_PRIVATE_KEY=$jwt_key|" .env
sed -i "s|^SEAFILE_CACHE_PASSWORD=.*|SEAFILE_CACHE_PASSWORD=$cache_password|" .env
echo "пароль администратора: $admin_password"
unset admin_password db_root_password db_password jwt_key cache_password
Ключ JWT должен быть не короче 32 символов. Все пять значений должны различаться и оставаться неизменными: сервер сохраняет сгенерированную конфигурацию внутри volume и ждёт тех же учётных данных базы и кеша при каждом старте.
Публичное имя задайте до первого запуска:
sed -i "s|^SEAFILE_SERVER_HOSTNAME=.*|SEAFILE_SERVER_HOSTNAME=files.example.com|" .env
sed -i "s|^SEAFILE_ADMIN_EMAIL=.*|SEAFILE_ADMIN_EMAIL=you@example.com|" .env
Все переменные .env:
SEAFILE_PORT — локальный web-порт, по умолчанию 8000;SEAFILE_SERVER_HOSTNAME — внешнее имя хоста без схемы и слеша; скрипт установки не принимает localhost;SEAFILE_SERVER_PROTOCOL — схема, по которой сервис доступен снаружи; за примерами прокси это https;SEAFILE_ADMIN_EMAIL и SEAFILE_ADMIN_PASSWORD создают первую учётную запись только при первом старте;SEAFILE_DB_ROOT_PASSWORD — пароль root в MariaDB, нужен для установки и дампов;SEAFILE_DB_PASSWORD — пароль роли seafile;SEAFILE_JWT_PRIVATE_KEY подписывает внутренние служебные токены, не короче 32 символов;SEAFILE_CACHE_PASSWORD защищает кеш Valkey, который наружу не публикуется;SEAFILE_DB_USER — имя роли базы, меняется только до первого запуска;SEAFILE_TIME_ZONE — часовой пояс IANA;SEAFILE_DATA_VOLUME и SEAFILE_DB_VOLUME — имена volume с хранилищем объектов и базой;SEAFILE_BACKUP_DIR — каталог резервных копий на хосте.docker compose config
docker compose pull
docker compose up -d --wait --wait-timeout 900
docker compose ps
curl --fail --silent --output /dev/null http://127.0.0.1:8000/accounts/login/
Первый запуск долгий: контейнер создаёт ccnet_db, seafile_db и seahub_db,
генерирует конфигурацию в volume и только потом поднимает Seahub за собственным
nginx. Войдите по внешнему адресу под SEAFILE_ADMIN_EMAIL, затем поставьте
настольный или мобильный клиент и подключите его к тому же адресу.
Оставьте 127.0.0.1:${SEAFILE_PORT}:80: до сервера доберётся только
HTTPS-прокси на этом же хосте. У MariaDB и кеша опубликованных портов нет. В
файрволе откройте SSH, HTTP и HTTPS. Задайте SEAFILE_SERVER_PROTOCOL=https и
создайте DNS-запись до первого старта: значение попадает в сгенерированную
конфигурацию, а клиенты, настроенные с неверной схемой, продолжат её
использовать.
Лучше ssh -L 8000:127.0.0.1:8000 user@server. Постоянной установке в локальной
сети нужно разрешимое имя хоста — localhost скрипт установки не принимает,
поэтому возьмите имя, которое отдаёт ваш локальный DNS, задайте
SEAFILE_SERVER_PROTOCOL=http, замените привязку к localhost одним конкретным
приватным IP и ограничьте порт файрволом. Зашифрованные на клиенте библиотеки
останутся защищёнными, но всё остальное, включая сессионные cookie, пойдёт по
такому маршруту открытым текстом.
Задайте SEAFILE_SERVER_HOSTNAME=files.example.com и
SEAFILE_SERVER_PROTOCOL=https, затем замените хост в примере для Caddy, Nginx
или Traefik. Прокси не должен ограничивать тело запроса — блоки файлов идут
через тот же origin, поэтому в примере для Nginx стоят client_max_body_size 0
и отключённая буферизация запроса — и должен допускать долгие передачи, так что
таймауты чтения и отправки держите большими. Смена имени хоста после первого
старта требует правки conf/ccnet.conf, conf/seahub_settings.py и
conf/seafile.conf внутри volume.
chmod +x backup.sh restore.sh
./backup.sh
Скрипт останавливает Seafile, снимает дамп всех трёх баз через mariadb-dump,
архивирует весь volume /shared с хранилищем объектов и складывает рядом .env
и compose.yaml. Нужны обе половины: дамп базы без блоков восстановит индекс,
который ссылается на несуществующие файлы. В архиве все файлы и все секреты —
шифруйте его и увозите за пределы сервера.
Восстановление необратимо заменяет хранилище объектов и все три базы.
Используйте те же версии Seafile и MariaDB и текущий .env:
./restore.sh ./backups/seafile-YYYYMMDDTHHMMSSZ.tar
curl --fail --silent --output /dev/null http://127.0.0.1:8000/accounts/login/
Скрипт сначала делает резервную копию заменяемого состояния, пересоздаёт оба volume, распаковывает хранилище, импортирует дамп и поднимает сервер. Настольные клиенты, синхронизировавшиеся после резервной копии, зальют свои локальные изменения заново: проверьте один клиент, прежде чем подключать остальные. Практическую проверку восстановления процедура не проходила — отрепетируйте её на отдельном сервере.
Сначала резервная копия и upstream-заметки к конкретной паре версий. Обновление внутри одной мажорной серии — это смена тега:
./backup.sh
docker compose pull
docker compose up -d --wait --wait-timeout 900
docker compose logs --tail=200 seafile
Мажорное обновление устроено иначе: Seafile выполняет версионные скрипты
обновления и требует переходить по одной мажорной версии за раз, начиная с
последней минорной текущей серии. Не прыгайте с 12.x на 14.x и не меняйте
MariaDB тем же шагом. Точный тег seafileltd/seafile-mc:13.0.25 заменяйте на
проверенную версию, никогда на -latest или -testing.
Никогда не запускайте старый Seafile поверх баз, которые уже обновила новая версия. Верните предыдущий точный тег вместе с архивом, сделанным до обновления:
docker compose down --timeout 120
./restore.sh ./backups/seafile-BEFORE-UPDATE.tar
После неудачной смены MariaDB подключайте старый образ только к сохранённому старому volume либо импортируйте совместимый дамп в пустой volume.
docker compose down сохраняет оба volume. После проверки резервной копии за
пределами сервера удалите всё безвозвратно:
docker compose down
docker volume rm seafile-data seafile-database
rm -rf ~/services/seafile
Если имена volume изменены, подставьте фактические. Настольные клиенты держат свои локальные копии всех синхронизированных библиотек — если данные должны исчезнуть везде, удалите их отдельно.
Источники: Seafile CE в Docker, compose-файл upstream, резервное копирование и восстановление и аутентификация через OAuth.
Скрипт установки проверяет SEAFILE_SERVER_HOSTNAME и не принимает localhost
и любое имя без точки. Задайте настоящее имя хоста — публичный домен или имя,
которое отдаёт локальный DNS, — затем удалите наполовину инициализированный
volume и запустите заново:
docker compose down --timeout 120
docker volume rm seafile-data seafile-database
docker compose up -d --wait --wait-timeout 900
Делайте это только на пустой установке: на рабочей те же команды уничтожат все библиотеки.
Первый запуск создаёт три базы, генерирует конфигурацию в volume и только потом поднимает Seahub — поэтому у проверки здоровья пятиминутный start period. Не перезапускайте, а следите за прогрессом:
docker compose logs --follow seafile
docker compose ps
docker inspect --format '{{json .State.Health}}' "$(docker compose ps -q seafile)"
502 с опубликованного порта в это время нормален: nginx поднимается раньше
Seahub.
docker compose logs --tail=200 db cache
docker compose exec db mariadb --user=root --password="$SEAFILE_DB_ROOT_PASSWORD" -e "SHOW DATABASES;"
Учётные данные записываются в conf/seafile.conf и conf/seahub_settings.py
внутри volume во время установки. Смена SEAFILE_DB_PASSWORD или
SEAFILE_CACHE_PASSWORD в .env эти файлы не переписывает: либо верните старое
значение, либо отредактируйте сгенерированную конфигурацию.
SEAFILE_SERVER_HOSTNAME и SEAFILE_SERVER_PROTOCOL попадают в сгенерированную
конфигурацию при первом старте. Для переезда на другой домен отредактируйте
conf/ccnet.conf (SERVICE_URL), conf/seahub_settings.py (FILE_SERVER_ROOT,
SERVICE_URL) и conf/seafile.conf внутри volume, затем перезапустите:
docker compose exec seafile grep -R "example.com" /shared/seafile/conf
docker compose restart seafile
Обычно виноват прокси: в примерах стоят client_max_body_size 0, отключённая
буферизация запроса и увеличенные таймауты, потому что блоки файлов идут через
тот же origin. 413 приходит от прокси, а 500 через несколько минут обычно
означает, что сработал таймаут во время передачи.
Это Go-файлсервер за тем же nginx, и он отвечает только по валидному токену,
поэтому голый запрос с 400 — ожидаемое поведение. Настоящие ошибки видны в
журналах:
docker compose exec seafile tail -n 100 /shared/logs/seafile/seafile.log
docker compose exec seafile tail -n 100 /shared/logs/seahub/seahub.log
Библиотеки с клиентским шифрованием расшифровываются паролем, который сервер не хранит. Административного восстановления нет: потерянный пароль библиотеки означает, что данные останутся зашифрованными, даже если блоки есть в резервной копии.
На хосте выполните curl -I http://127.0.0.1:8000/accounts/login/. Если ответ
есть, прокси смотрит не туда: внутри контейнера прокси 127.0.0.1 — это он сам,
поэтому используйте адрес host gateway или общую сеть Docker. Если ответа нет,
начните с раздела про проверку здоровья.
Fossary — независимый информационный каталог, не связанный с разработчиками представленных приложений. Мы собираем сведения из открытых источников и проверяем опубликованные рецепты, но не разрабатываем, не распространяем и не контролируем эти приложения.
Публикация карточки или статус проверки не являются требованием, навязыванием либо персональной рекомендацией использовать приложение. Вы самостоятельно решаете, подходит ли оно вам, и используете его на свой риск. Мы не гарантируем безопасность, доступность или пригодность приложения и, в пределах, допускаемых законом, не отвечаем за вызванные им потери или ущерб. До установки проверьте лицензию, настройки безопасности, обработку данных и резервное копирование.