Как стать автором
Обновить

История создания домашнего облака. Часть 5. Актуализация 2019 – PHP 7.2, MariaDB 10.4 и Nextcloud 17

Время на прочтение8 мин
Количество просмотров24K
Два года назад я опубликовал цикл статей на тему создания веб-сервера на базе Debian 8 и запуске на нём сервиса Nextcloud 11. Через несколько месяцев появилось дополнение, содержащее «диффиренциальную» информацию по установке Nextcloud 13 на Debian 9. В конце 2018 года я просто обновил Debian и Nextcloud и не столкнулся с какими-то необычными или интересными проблемами. Обновление в конце 2019 года было уже более интересным и про это стоило написать.



Данная статья в первую очередь будет полезна тем, кто по инструкциям прошлых четырёх статей «собрал» себе Nextcloud 13 на Debian 9 (передаю привет с десятку моих подписчиков по теме Nextcloud, в особенности тем, для кого это был первый опыт в мире Linux). Тем, кто соберётся делать сервис с нуля я советую взять за основу первые четыре статьи этого цикла с поправкой на актуальные версии Debian 10 и Nextcloud 17. Для опытных пользователей Linux статья может занять какое-то место между «тривиальна и бесполезна» и «неплохо, шпаргалка всё-в-одном-месте».



Оглавление


Часть 1. Настройка среды Debian для повседневного использования
Часть 2. Создание сервера — настройка LAMP в Debian
Часть 3. Создание персонального облака — установка и настройка Nextcloud
Часть 4. Актуализация 2018 – Debian 9 и Nextcloud 13
Часть 5. Актуализация 2019 – PHP 7.2, MariaDB 10.4 и Nextcloud 17



Быстрая навигация по главе


Предисловие
Обновление Debian
Обновление PHP до версии 7.2
Обновление MariaDB до версии 10.4
Обновление Nextcloud до версии 17
Послесловие



Предисловие


Изначально хотелось на Debian 10 установить и настроить Nginx, поверх чего без проблем бы установился актуальный Nextcloud 17. Но для всего этого у меня не получилось выбрать время, поэтому эта статья представляет из себя набор инструкций по обновлению Nextcloud с 13 до актуальной версии 17 с предварительной подготовкой веб-сервера.

Для начала нужно пояснить зачем потребовались радикальные изменения на стороне веб-сервера. Наш сервер основан на актуальном и поддерживаемом Debian 9. Можно просто обновить операционную систему и все компоненты веб-сервера получат как минимум обновления безопасности. Всё было бы замечательно если бы мы дальше использовали Nextcloud 13 или обновились только до версии 14. Но Nextcloud 13 уже не поддерживается, а поддержка 14-ой версии «на излёте». Начиная с 15-ой версии Nexctcloud будет предлагать преобразовать базу данных в big int для поддержки четырёхбайтовой кодировки и с MariaDB 10.1 сделать это будет весьма проблематично. Nexctcloud 17 требует PHP 7.1-7.3, в то время как Debian 9 в своих родных репозиториях содержит только версию 7.0. Правильнее, в плане надежности и предсказуемости, было бы обновиться до предпоследней версии Nextcloud, но за пару лет я настолько уверился в надёжности этого сервиса, что мне хотелось обновиться до последней версии и обновить веб-сервер с заделом на будущее. Поэтому, для обновления до Nexctcloud 17 оптимально обновить MariaDB до актуальной стабильной версии 10.4, а PHP — до 7.2. Именно 7.2, а не актуальной 7.4. Дело в том, что Nextcloud 13 требует PHP 5.6, 7.0 — 7.2, а для Nexctcloud 17 требуется PHP 7.1 — 7.3. Использовать PHP 7.2 удобно с целью минимизации действий по обновлению. Сервер Apache обновлять не потребуется — достаточно установить обновления безопасности, которые распространяет команда поддержки Debian. А вот для обновлений MariaDB и PHP придётся подключать внешние репозитории.

Когда я только знакомился с Nextcloud я обновлял его «руками»: из консоли специальной командой сайт переводился в режим обслуживания, вручную скачивался и распаковывался архив с новой версией сайта, обновлялись файлы и запускалась процедура обновления. Такое обновление обычно приводило к ожидаемым результатам, хотя я не ленился делать резервную копию сайта, базы и пользовательских данных. А вот автоматическое обновление порой приводило к всяким сюрпризам. Но это было давно, стабильность движка с тех пор сильно возросла и на этот раз я делал обновления исключительно через веб-интерфес. Правда от командной строки отвертеться всё равно не удалось. При итерационном обновлении на каждую новую версию в панели управления будут появляться различные предупреждения и уведомления, которые необходимо будет «убирать», осмысленно выполняя команды в командной строке. Можно этого и не делать — сервис работать всё равно будет. Хотя такой подход в корне неправильный, у меня Nextcloud отработал в таком режиме 3 месяца прежде чем я целенаправленно разобрался с возникшими вопросами.



Обновление Debain


Останавливаем веб-сервер:

# service apache2 stop

И обновляемся:

# apt-get update
# apt-get dist-upgrade

После обновления можно проверить версию ОС и сделать контрольную перезагрузку, чтобы убедиться в том, что после обновления всё нормально стартует:

# cat /etc/debian_version
# reboot



Обновление PHP до версии 7.2


Останавливаем веб-сервер:

# service apache2 stop

Добавляем сертификат и ключи PPA, репозиторий PHP:

# apt install ca-certificates apt-transport-https
# wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
# echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list

При удалении старой версии PHP 7.0 так же удалится phpmyadmin, так как «следы» от удалённых пакетов мы зачистим используя autoremove. Это не доставит особых сложностей, так как никаких специальных настроек для phpmyadmin не делалось и установить его снова не составит никаких проблем.

# apt-get purge php7*
# apt-get --purge autoremove
# apt-get update
# apt-get install php7.2 phpmyadmin

Установка модулей необходимых для Nextcloud 17:

# apt-get install php7.2-mysql php7.2-curl php7.2-xml php7.2-gd php7.2-json php7.2-mbstring php7.2-zip php7.2-intl
# apt-get install php-memcached php-apcu php-redis php-imagick

[ Данный текст написан специально для сайта habr.com автором AlexanderS.
Ссылка на источник необязательна, но его упоминание крайне желательно! ]


Проверяем версию PHP, запускаем веб-сервер и проверяем работоспособность Nextcloud:

# php -v
# service apache2 start



Обновление MariaDB до версии 10.4


На сайте проекта есть интересная страничка, на которой нужно указать свою ОС, её релиз и выбрать версию базы данных. После выбора сгенерируется код для добавления репозитория.

Останавливаем веб-сервер:

# service apache2 stop

Добавляем репозиторий и обновляем пакеты:

# apt-get install software-properties-common dirmngr
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.mirror.iweb.com/repo/10.4/debian stretch main'
# apt-get update

При установке MariaDB пакетный менеджер корректно удалит предыдущую версию и установит новую, все базы данных при этом сохранятся. Однако сделать резервную копию базы Nextcloud конечно же рекомендуется.

Устанавливаем MariaDB и запускаем процедуру обновления:

# apt-get install mariadb-server
# mysql_upgrade u root -p

После ввода пароля MariaDB обновится и можно будет её сконфигурировать, следуя инструкциям из второй части:

# mysql_secure_installation

Запускаем веб-сервер и проверяем работоспособность Nextcloud:

# service apache2 start



Обновление Nextcloud до версии 17


Для запуска обновления нужно авторизоваться на сервисе под административной записью, проследовать в настройки и открыть «Общие настройки» в административном разделе. Nextcloud показывает установленную версию и версию доступную для обновления, которое можно запустить нажав кнопку «Открыть окно обновления». После инициации Nextcloud делает резервную копию, скачивает и проверяет целостность файлов обновления, включает режим обслуживания и обновляет файлы. Далее следует вопрос «Keep maintenance mode active»? Здесь нужно быть внимательным. Положительный ответ оставит сайт в режиме обслуживания — предполагается, что администратор знает что дальше делать и сделает это вручную. В противном случае Nextcloud сделает всё сам, поэтому для продолжения нажимаем кнопку «No».

Обновления выполняются итерационно. Сначала Nextcloud 13.x обновится до крайней версии ветки 14.x. После этого нужно будет снова зайти в админцентр и запустить обновление, теперь уже с 14.х до 15.x. И так далее пока не будет достигнута последня возможная актуальная версия. После каждого обновления на странице «Общие настройки» в административном разделе будет выведен список предложений и возникших проблем, а так же рекомендаций по их решению. Ниже пойдёт речь о том, что нужно будет сделать после каждого обновления.

До обновления

На последних версиях Nextcloud рекомендуется включить PHP OPcache для улучшения производительности. Странно, что этот момент я как-то упустил пару лет назад, так как OPcache появился ещё в PHP 5. В /etc/php/7.2/apache2/php.ini нужно раскомментировать и отредактировать следующие параметры:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
pcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Обновление 13.x -> 14.x

Восстанавливаем индексы таблиц:

# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

Обновление 14.x -> 15.x

Подготавливаем базу данных nextcloud для включения четырёхбайтовой кодировки:

# mysql -u root -p
MariaDB [(none)]> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> quit

Включаем поддержку четырёхбайтовой кодировки в Nextcloud:

# sudo -u www-data php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 --type boolean --value="true"

Преобразовываем таблицы:

# sudo -u www-data php /var/www/nextcloud/occ maintenance:repair

Восстановливаем потерянные индексы таблиц:

# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

Преобразовываем индексы таблиц в bigint:

# sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint

Обновление 15.x -> 16.x

Восстановливаем потерянные индексы таблиц:

# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

Преобразовываем индексы таблиц в bigint:

# sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint

Обновление 16.x -> 17.x

Никаких дополнительных действий не требуется.



Послесловие



По данной инструкции была обновлена виртуальная машина с Nextcloud 13. Использование виртуальной машины позволяет не делать резервных копий файлов Nextcloud и его базы данных, так как в случае проблем можно просто вернуть заранее сохранённый файл виртуальной машины и начать всё сначала. Однако это не касается папки с пользовательскими данными, которую я рекомендую так же забэкапить вместе с виртуальной машиной с Nextcloud. В моём случае «облако» используется в качестве удалённой папки с автоматической версионностью, причём с направлением синхронизации «только туда», и мне потрея этих данных была некритична — пришлось бы просто несколько часов опять делать синхронизацию. Несмотря на моё пренебрежение выработанным жизнью правилом «сохранись на всякий случай», обновление прошло без проблем и все клиенты так же без проблем заработали с Nextcloud 17. Я впечатлён, Фрэнк Карлитшек — Вы со своей командой делаете отличную работу!

После обновления я решил почистить пользовательские данные, которые, судя по статистике, занимали под два терабайта. Столько оперативных данных у меня не было — большинство объёма занимали файлы версий и удалённые файлы. Проблема с которой я столкнулся заключалась в том, что для одного пользователя удалённых данных было настолько много (дело даже не в объёме, а именно в количестве — очень много мелких файлов), что Nextcloud не мог их отобразить в веб-интерфейсе. После изучения руководства по администрированию я нашёл решение через командную строку. Возможно кому-то это пригодится.

Для очистки удалённых файлов пользователя user:

# sudo -u www-data php /var/www/nextcloud/occ trashbin:cleanup user

Для очистки файлов версий пользователя user:

# sudo -u www-data php /var/www/nextcloud/occ versions:cleanup user



Вернуться в начало, к оглавлению.



История создания домашнего облака. Часть 5. Актуализация 2019 – PHP 7.2, MariaDB 10.4 и Nextcloud 17
Версия текста: 1.1.2.
Дата первой публикации: 15.01.2020.
Дата последней правки: 29.12.2021.

Лог обновлений
1.1.2 [29-12-2021]
Правка ссылок оглавления.

1.1.1 [15-01-2020]
Исправление опечаток.

1.1.0 [15-01-2020]
Исправлен код подготовки базы данных nexcloud для включения четырёхбайтовой кодировки.

1.0.0 [15-01-2020]
Первая версия.
Теги:
Хабы:
+14
Комментарии64

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн