Historia tworzenia domowego chmury. Część 5. Aktualizacja 2019 – PHP 7.2, MariaDB 10.4 i Nextcloud 17

Dwa lata temu opublikowałem cykl artykułów na temat tworzenia serwera WWW opartego na Debianie 8 i uruchamiania na nim usługi Nextcloud 11. Po kilku miesiącach pojawił się dodatek zawierający 'dyferencjalne' informacje na temat instalacji Nextcloud 13 na Debianie 9. Pod koniec 2018 roku po prostu zaktualizowałem Debiana i Nextcloud i nie napotkałem żadnych nietypowych lub ciekawych problemów. Aktualizacja pod koniec 2019 roku była już bardziej interesująca i na ten temat warto było napisać.

Historia tworzenia domowego chmury. Część 5. Aktualizacja 2019 – PHP 7.2, MariaDB 10.4 i Nextcloud 17

Niniejszy artykuł będzie przede wszystkim przydatny dla tych, którzy według instrukcji czterech poprzednich artykułów 'złożyli' sobie Nextcloud 13 na Debianie 9 (pozdrawiam dziesiątkę moich subskrybentów na temat Nextcloud, w szczególności tych, dla których było to pierwsze doświadczenie w świecie Linuxa). Tym, którzy zamierzają budować usługę od podstaw, polecam opierać się na pierwszych czterech artykułach tego cyklu, uwzględniając aktualne wersje Debiana 10 i Nextcloud 17. Dla doświadczonych użytkowników Linuxa artykuł może zajmować jakieś miejsce pomiędzy 'trywialny i bezużyteczny' a 'nieźle, ściąga w jednym miejscu'.

Spis treści

Część 1. Konfiguracja środowiska Debiana do codziennego użytku
Część 2. Tworzenie serwera — konfiguracja LAMP w Debianie
Część 3. Tworzenie osobistej chmury — instalacja i konfiguracja Nextcloud
Część 4. Aktualizacja 2018 – Debian 9 i Nextcloud 13
Część 5. Aktualizacja 2019 – PHP 7.2, MariaDB 10.4 i Nextcloud 17

Szybka nawigacja po rozdziale

Wstęp
Aktualizacja Debiana
Aktualizacja PHP do wersji 7.2
Aktualizacja MariaDB do wersji 10.4
Aktualizacja Nextcloud do wersji 17
Epilog

Wstęp

Początkowo chciałem na Debianie 10 zainstalować i skonfigurować Nginx, na którym bez problemu zainstalowałby się aktualny Nextcloud 17. Jednak nie udało mi się znaleźć czasu, więc ten artykuł stanowi zestaw instrukcji dotyczących aktualizacji Nextcloud z 13 do aktualnej wersji 17 z wcześniejszym przygotowaniem serwera WWW.

Na początek należy wyjaśnić, dlaczego potrzebne były radykalne zmiany po stronie serwera. Nasz serwer oparty jest na aktualnej i wspieranej wersji Debian 9. Można po prostu zaktualizować system operacyjny, a wszystkie komponenty serwera WWW otrzymają przynajmniej aktualizacje zabezpieczeń. Wszystko byłoby świetnie, gdybyśmy dalej korzystali z Nextcloud 13 lub zaktualizowali się tylko do wersji 14. Jednak Nextcloud 13 już nie jest wspierany, a wsparcie dla wersji 14 jest na wyczerpaniu. Począwszy od wersji 15, Nextcloud będzie oferować konwersję bazy danych na big int w celu wsparcia czterobajtowego kodowania, a z MariaDB 10.1 będzie to dość problematyczne. Nextcloud 17 wymaga PHP 7.1-7.3, podczas gdy Debian 9 w swoich natywnych repozytoriach zawiera tylko wersję 7.0. Z punktu widzenia niezawodności i przewidywalności właściwsze byłoby zaktualizowanie do przedostatniej wersji Nextcloud, ale przez kilka lat tak bardzo upewniłem się w niezawodności tej usługi, że chciałem zaktualizować do najnowszej wersji i zaktualizować serwer WWW z myślą o przyszłości. Dlatego, aby zaktualizować do Nextcloud 17, optymalnie byłoby zaktualizować MariaDB do aktualnej stabilnej wersji 10.4, a PHP do 7.2. Właśnie 7.2, a nie aktualnej 7.4. Chodzi o to, że Nextcloud 13 wymaga PHP 5.6, 7.0 - 7.2, a dla Nextcloud 17 wymagane jest PHP 7.1 - 7.3. Użycie PHP 7.2 jest wygodne w celu minimalizacji działań związanych z aktualizacją. Serwer Apache nie wymaga aktualizacji - wystarczy zainstalować aktualizacje zabezpieczeń, które dostarcza zespół wsparcia Debian. Natomiast w przypadku aktualizacji MariaDB i PHP konieczne będzie podłączenie zewnętrznych repozytoriów.

Gdy po raz pierwszy poznawałem Nextcloud, aktualizowałem go ręcznie: przez konsolę specjalną komendą strona była przełączana w tryb konserwacji, ręcznie pobierałem i rozpakowywałem archiwum z nową wersją strony, aktualizowałem pliki i uruchamiałem procedurę aktualizacji. Taka aktualizacja zazwyczaj przynosiła oczekiwane rezultaty, chociaż nie leniłem się robić kopii zapasowej strony, bazy danych i danych użytkowników. Natomiast automatyczna aktualizacja czasami przynosiła różne niespodzianki. Ale to było dawno, stabilność silnika od tego czasu znacznie wzrosła i tym razem dokonywałem aktualizacji wyłącznie przez interfejs internetowy. Jednak od wiersza poleceń i tak nie udało się uciec. Przy iteracyjnej aktualizacji w panelu sterowania będą pojawiały się różne ostrzeżenia i powiadomienia, które trzeba będzie „usuwać”, wykonując odpowiednie komendy w wierszu poleceń. Nie trzeba tego robić — usługa będzie działać i tak. Chociaż takie podejście w zasadzie jest niewłaściwe, mój Nextcloud funkcjonował w takim trybie przez 3 miesiące, zanim celowo zająłem się powstałymi pytaniami.

Aktualizacja Debain

Zatrzymujemy serwer www:

# service apache2 stop


I aktualizujemy:

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


Po aktualizacji można sprawdzić wersję systemu operacyjnego i wykonać kontrolne uruchomienie, aby upewnić się, że po aktualizacji wszystko dobrze się uruchamia:

# cat /etc/debian_version
# reboot


Aktualizacja PHP do wersji 7.2

Zatrzymujemy serwer www:

# service apache2 stop


Dodajemy certyfikat i klucze PPA, repozytorium 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


Przy usuwaniu starej wersji PHP 7.0 również usunięty zostanie phpmyadmin, ponieważ „ślady” po usuniętych pakietach usuniemy używając autoremove. Nie sprawi to szczególnych trudności, ponieważ nie robiono żadnych specjalnych ustawień dla phpmyadmin, a ponowne zainstalowanie go nie będzie stanowić żadnych problemów.

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


Instalacja modułów niezbędnych dla 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


[ Ten tekst został napisany specjalnie dla strony habr.com autora AlexanderS.
Link do źródła nie jest obowiązkowy, ale jego wzmianka jest bardzo pożądana! ]

Sprawdzamy wersję PHP, uruchamiamy serwer www i sprawdzamy działanie Nextcloud:

# php -v
# service apache2 start


Aktualizacja MariaDB do wersji 10.4

Na stronie projektu znajduje się interesująca strona, na której należy podać swój system operacyjny, jego wersję i wybrać wersję bazy danych. Po dokonaniu wyboru zostanie wygenerowany kod do dodania repozytorium.

Zatrzymujemy serwer www:

# service apache2 stop


Dodajemy repozytorium i aktualizujemy pakiety:

# 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


Podczas instalacji MariaDB menedżer pakietów poprawnie usunie poprzednią wersję i zainstaluje nową, a wszystkie bazy danych zostaną zachowane. Zaleca się jednak wykonanie kopii zapasowej bazy Nextcloud.

Instalujemy MariaDB i uruchamiamy procedurę aktualizacji:

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


Po wprowadzeniu hasła MariaDB zaktualizuje się, a następnie będzie można ją skonfigurować, stosując się do instrukcji z drugiej części:

# mysql_secure_installation


Uruchamiamy serwer WWW i sprawdzamy działanie Nextcloud:

# service apache2 start


Aktualizacja Nextcloud do wersji 17

Aby zainicjować aktualizację, należy zalogować się w serwisie na konto administracyjne, przejść do ustawień i otworzyć „Ogólne ustawienia” w sekcji administracyjnej. Nextcloud wyświetli zainstalowaną wersję oraz wersję dostępną do aktualizacji, której uruchomienie możliwe jest po naciśnięciu przycisku „Otwórz okno aktualizacji”. Po zainicjowaniu Nextcloud tworzy kopię zapasową, pobiera i sprawdza integralność plików aktualizacji, włącza tryb konserwacji i aktualizuje pliki. Następnie pojawi się pytanie „Zachować aktywny tryb konserwacji”? Należy być ostrożnym. Pozytywna odpowiedź pozostawi stronę w trybie konserwacji — zakłada się, że administrator wie, co dalej zrobić i zrobi to ręcznie. W przeciwnym razie Nextcloud zrobi wszystko sam, więc w celu kontynuacji naciskamy przycisk „Nie”.

Aktualizacje są realizowane iteracyjnie. Najpierw Nextcloud 13.x zaktualizuje się do najnowszej wersji gałęzi 14.x. Po tym trzeba będzie ponownie wejść do centrum administracyjnego i uruchomić aktualizację, teraz już z 14.x do 15.x. I tak dalej, aż osiągnięta zostanie ostatnia dostępna wersja. Po każdej aktualizacji na stronie „Ogólne ustawienia” w sekcji administracyjnej wyświetlony zostanie wykaz sugestii oraz pojawiających się problemów, a także rekomendacje ich rozwiązania. Poniżej omówimy, co należy zrobić po każdej aktualizacji.

Przed aktualizacją

W najnowszych wersjach Nextcloud zaleca się włączenie PHP OPcache w celu poprawy wydajności. Dziwne, że ten aspekt jakoś umknął mi kilka lat temu, ponieważ OPcache pojawił się już w PHP 5. W /etc/php/7.2/apache2/php.ini należy odkomentować i edytować następujące parametry:

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


Aktualizacja 13.x -> 14.x

Odzyskiwanie indeksów tabel:

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


Aktualizacja 14.x -> 15.x

Przygotowujemy bazę danych Nextcloud do włączenia kodowania czterobajtowego:

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


Włączamy obsługę czterobajtowego kodowania w Nextcloud:

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


Konwertujemy tabele:

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


Przywracamy utracone indeksy tabel:

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


Konwertujemy indeksy tabel do bigint:

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


Aktualizacja 15.x -> 16.x

Przywracamy utracone indeksy tabel:

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


Konwertujemy indeksy tabel do bigint:

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


Aktualizacja 16.x -> 17.x

Nie są wymagane dodatkowe działania.

Epilog

Zgodnie z tą instrukcją zaktualizowana została maszyna wirtualna z Nextcloud 13. Użycie maszyny wirtualnej eliminuje potrzebę wykonywania kopii zapasowych plików Nextcloud oraz jego bazy danych, ponieważ w przypadku problemów można po prostu przywrócić wcześniej zapisany plik maszyny wirtualnej i zacząć od nowa. Jednak dotyczy to również folderu z danymi użytkownika, który również zalecam zabezpieczyć razem z maszyną wirtualną z Nextcloud. W moim przypadku „chmura” jest używana jako zdalny folder z automatycznym wersjonowaniem, z kierunkiem synchronizacji „tylko tam”, więc utrata tych danych nie była krytyczna — musiałbym po prostu poświęcić kilka godzin na ponowną synchronizację. Pomimo mojego lekceważenia wypracowanego przez życie zasady „zapisz się na wszelki wypadek”, aktualizacja przebiegła gładko, a wszyscy klienci również bez problemu pracowali z Nextcloud 17. Jestem pod wrażeniem, Frank Karliczek — Ty i Twój zespół wykonujecie doskonałą robotę!

Po aktualizacji postanowiłem wyczyścić dane użytkowników, które według statystyk zajmowały prawie dwa terabajty. Nie miałem aż tyle danych operacyjnych — większość objętości zajmowały pliki wersji i usunięte pliki. Problem, z którym się zmagałem, polegał na tym, że dla jednego użytkownika usuniętych danych było tak dużo (problem nie dotyczył samej objętości, ale ilości — bardzo wiele małych plików), że Nextcloud nie mógł ich wyświetlić w interfejsie webowym. Po zapoznaniu się z przewodnikiem administracyjnym znalazłem rozwiązanie przez wiersz poleceń. Może się to przydać niektórym.

Aby wyczyścić usunięte pliki użytkownika user:

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


Aby wyczyścić pliki wersji użytkownika user:

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

Powrót do początku, do spisu treści.

Historia tworzenia domowego chmury. Część 5. Aktualizacja 2019 – PHP 7.2, MariaDB 10.4 i Nextcloud 17
Wersja tekstu: 1.1.1.
Data pierwszej publikacji: 15.01.2020.
Data ostatniej edycji: 15.01.2020.

Dziennik aktualizacji1.1.1 [15-01-2020]
Korekta literówek.

1.1.0 [15-01-2020]
Poprawiono kod przygotowania bazy danych Nextcloud do włączenia czterobajtowego kodowania.

1.0.0 [15-01-2020]
Pierwsza wersja.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster