Перейти к основному содержанию

Seafile 11 — переход на Seafile 12

Seafile

Пришла пора обновить своё домашнее облако Seafile с 11 версии на 12. 

Seafile — это личное хранилище для хранения данных в стиле Dropbox. Seafile — замечательный инструмент для создания личного, семейного или корпоративного файлового хранилища. Не очень сложен в установке и настройке.

Исходный стенд:

  • Ubuntu 22.04.4 LTS
  • Seafile 11.0.12

https://manual.seafile.com/latest/upgrade/upgrade_notes_for_12.0.x/

Делаем резервную копию баз данных и самих данных. Ещё снапшот виртуальной машины не помешает.

Работаем под рутом.

Важные изменения в выпуске

Версия Seafile 12.0 содержит следующие основные изменения:

  • Переработанный веб-интерфейс.
  • SeaDoc теперь стабилен и предоставляет функции онлайн-заметок и документов.
  • Новый модуль вики.
  • Новый механизм корзины: удаленные файлы теперь записываются в базу данных для быстрого отображения. В старой версии удаленные файлы сканировались из истории библиотеки, что было медленно.
  • Community edition теперь также поддерживает онлайн сборку мусора (поскольку поддержка SQLite прекращена).

Изменения в конфигурации

  • Сервер уведомлений теперь упакован в свой собственный образ Docker.
  • Для установки на основе бинарных пакетов требуется новый файл .env для хранения некоторых элементов конфигурации. Эти элементы конфигурации должны быть общими для разных компонентов Seafile. Мы назвали его .env для единообразия с установкой на основе Docker.
  • Уровень сложности пароля теперь рассчитывается по алгоритму. Старые параметры USER_PASSWORD_MIN_LENGTH, USER_PASSWORD_STRENGTH_LEVEL удалены. Используется только USER_STRONG_PASSWORD_REQUIRED.
  • ADDITIONAL_APP_BOTTOM_LINKS удален, так как в боковой панели навигации больше нет нижней панели.
  • SERVICE_URL и FILE_SERVER_ROOT удалены. SERVICE_URL будет рассчитываться из SEAFILE_SERVER_PROTOCOL и SEAFILE_SERVER_HOSTNAME в файле .env.
  • ccnet.conf удален. Некоторые его параметры конфигурации перемещены в файл .env, другие считываются из параметров с тем же именем в seafile.conf.
  • Добавлены два разрешения для ролей: can_create_wiki и can_publish_wiki используются для контроля того, может ли роль создавать вики и публиковать вики. Старое разрешение роли can_publish_repo удалено.
  • Заголовок REMOTE_USER по умолчанию не передается в Seafile; если вам нужен заголовок REMOTE_USER для единого входа (SSO), необходимо изменить gunicorn.conf.py.

Другие изменения

  • Новый легкий и быстрый поисковый движок SeaSearch. SeaSearch опционален, вы по-прежнему можете использовать ElasticSearch.

Критические изменения

  • В целях безопасности WebDAV больше не поддерживает вход с учетной записью LDAP; пользователь с учетной записью LDAP должен сгенерировать токен WebDAV на странице профиля.
  • [Метки файлов] Текущая функция меток файлов устарела. Мы реализуем ее заново в версии 13.0 с новым модулем управления метаданными общего назначения.
  • Для поиска на основе ElasticSearch полнотекстовый поиск по типам файлов doc/xls/ppt больше не поддерживается. Это позволяет нам удалить зависимость от Java в стороне Seafile.
  • В диалоговом окне поиска теперь поддерживается загрузка дополнительных элементов при прокрутке вниз, а исходная отдельная страница детального поиска файлов больше не используется.
  • Боковая панель справа переработана, и редко используемая функция комментариев к файлам на этой панели удалена.
  • Развертывание Seafile с помощью бинарного пакета теперь считается устаревшим и, вероятно, не будет поддерживаться в версии 13.0. Мы рекомендуем перенести ваше текущее развертывание Seafile на основу Docker.

Изменения в ElasticSearch (только для Pro edition)

Версия Elasticsearch не изменена в Seafile версии 12.0.

Подготовка к обновлению

Начинаем как обычно с операционной системы. Seafile 12 поддерживает нашу ОС Ubuntu 22.04.4 LTS. Поэтому просто обновляем саму операционную систему.

apt update
apt upgrade

Перезагружаем сервер, убеждаемся что всё работает.

Обновление Seafile 11 до последней версии

Если минорная версия у вас не самая последняя, обновитесь.

Seafile сервер для Linux — 11.0.12

Обновление до Seafile 12

Очистка базы данных

Если у вас большое количество записей в таблице Activity в MySQL, сначала очистите эту таблицу. В противном случае обновление базы данных займет много времени.

Seafile — очистка базы данных

Я скриптом почищу:

cd /opt/seafile-server-latest
./seahub.sh python-env python3 seahub/manage.py clean_db_records
seafile

Библиотеки

Установите новые системные библиотеки и библиотеки Python для вашей операционной системы.

Ubuntu 24.04/22.04:

apt-get install -y default-libmysqlclient-dev build-essential pkg-config libmemcached-dev

Debian 11:

apt-get install -y libsasl2-dev
seafile

Ubuntu 24.04 / Debian 12:

sudo pip3 install future==1.0.* mysqlclient==2.2.* pillow==10.4.* sqlalchemy==2.0.* pillow_heif==0.18.0 gevent==24.2.* captcha==0.6.* django_simple_captcha==0.6.* djangosaml2==1.9.* pysaml2==7.3.* pycryptodome==3.20.* cffi==1.17.0 python-ldap==3.4.*

Ubuntu 22.04 / Debian 11:

sudo pip3 install future==1.0.* mysqlclient==2.1.* pillow==10.4.* sqlalchemy==2.0.* pillow_heif==0.18.0 gevent==24.2.* captcha==0.6.* django_simple_captcha==0.6.* djangosaml2==1.9.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.15.1 python-ldap==3.2.0
seafile

Останавливаем сервисы

systemctl stop nginx.service
systemctl stop seafile.service
systemctl stop seahub.service

Дистрибутив

Работаем под пользователем сервиса.

sudo -u sf -i
cd /opt

Скачиваем и распаковываем новый релиз.

wget https://download.seadrive.org/seafile-server_12.0.14_x86-64.tar.gz
tar -xf seafile-server_12.0.14_x86-64.tar.gz

Обновление

Переходим в папку релиза, смотрим скрипты обновления:

cd seafile-server-12.0.14/
ls upgrade/
seafile

Запускаем обновление с версии 11.0.12 на 12.0.14:

cd ./upgrade/
./upgrade_11.0_12.0.sh

Лог скрипта обновления:

-------------------------------------------------------------
This script would upgrade your seafile server from 11.0 to 12.0
Press [ENTER] to contiune
-------------------------------------------------------------
Updating seafile/seahub database ...
[INFO] You are using MySQL
[INFO] updating seafile database...
[INFO] updating seahub database...
[INFO] updating seafevents database...
Done
migrating avatars ...
Done
updating /opt/seafile-server-latest symbolic link to /opt/seafile-server-12.0.14 ...
-----------------------------------------------------------------
Upgraded your seafile server successfully.
-----------------------------------------------------------------
seafile

Настройка конфигурации

Создаём файл .env в каталоге conf.

seafile

conf/.env:

TIME_ZONE=UTC
JWT_PRIVATE_KEY=xxx
SEAFILE_SERVER_PROTOCOL=https
SEAFILE_SERVER_HOSTNAME=seafile.example.com
SEAFILE_MYSQL_DB_HOST=db # your MySQL host
SEAFILE_MYSQL_DB_PORT=3306
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=<your MySQL password>
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db

Указываем собственные настройки согласно описанию изменений конфигурации выше.

JWT_PRIVATE_KEY — случайная строка длиной не менее 32 символов, может быть сгенерирована с помощью:

pwgen -s 40 1

Начиная с версии 12.0, компоненту seaf-server необходимо отправлять внутренние запросы к компоненту seahub для проверки разрешений, что приводит к ошибке 400 при загрузке файлов, если ALLOWED_HOSTS установлен неправильно. В этом случае вы можете либо удалить ALLOWED_HOSTS в seahub_settings.py, либо добавить 127.0.0.1 в список ALLOWED_HOSTS.

Перезагружаем сервер.

sudo reboot

Исправление ошибок

После перезагрузки служба seahub отказалась запускаться.

Пришлось переделать unit-файл:

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Environment="LC_ALL=ru_RU.UTF-8"
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=${seafile_dir}/seafile-server-latest/seahub.sh start
ExecStop=${seafile_dir}/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
[Install]
WantedBy=multi-user.target

Seafile — автозапуск

Проверка

Сервис работает.

seafile

Продолжение работы над ошибками

Загрузка через web не работает.

seafile

Ошибка:

Failed to prepare sql SELECT gc_id FROM GCID WHERE repo_id = ? FOR UPDATE: Table 'seafile-db.gcid' doesn't exist

Ещё такое можно накопать, но это я уже с форума взял:

Failed to save gc id: Error 1146: Table 'seafile_db.GCID' doesn't exist
Failed to save gc id: Error 1146: Table 'seafile_db.LastGCID' doesn't exist

seafile

Похожую проблему нашел на форуме:

https://forum.seafile.com/t/upgraded-from-seafile-10-bare-metal-to-seafile-12-docker-cant-upload-via-web-interface-or-ios-native-seafile-client-still-works/23289

https://forum.seafile.com/t/after-upgrade-to-seafile-12-06-cant-upload-files-because-database-table-missing/22954

Вероятно, скрипт обновления содержит ошибки. Создадим таблички вручную:

CREATE TABLE IF NOT EXISTS GCID (
 id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
 repo_id CHAR(36),
 gc_id CHAR(36),
 UNIQUE INDEX(repo_id)
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS LastGCID (
 id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
 repo_id CHAR(36),
 client_id VARCHAR(128),
 gc_id CHAR(36),
 UNIQUE INDEX(repo_id, client_id)
) ENGINE=INNODB;
seafile

Загрузка через web заработала.

seafile

Обращаем также внимание на имя БД. У меня seafile-db, а по умолчанию seafile_db. Базы по умолчанию теперь называются:

  • ccnet_db
  • seafile_db
  • seahub_db

Это не критично, просто нужно быть аккуратным в конфигах, указывать имя своих БД. Или привести их название к каноническому виду (когда-нибудь потом).

 

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