A história da criação de uma nuvem doméstica. Parte 5. Atualização 2019 – PHP 7.2, MariaDB 10.4 e Nextcloud 17

Há dois anos, publiquei uma série de artigos sobre o tema da criação de um servidor web baseado no Debian 8 e da execução do serviço Nextcloud 11. Alguns meses depois, apareceu um complemento contendo informações “diferenciais” sobre a instalação do Nextcloud 13 no Debian 9. No final de 2018, acabei de atualizar o Debian e o Nextcloud e não encontrei nenhum problema incomum ou interessante. A atualização do final de 2019 já era mais interessante e vale a pena escrever.

A história da criação de uma nuvem doméstica. Parte 5. Atualização 2019 – PHP 7.2, MariaDB 10.4 e Nextcloud 17

Este artigo será útil principalmente para aqueles que, de acordo com as instruções dos quatro artigos anteriores, “montaram” o Nextcloud 13 no Debian 9 (digo olá para cerca de uma dúzia de meus assinantes no tópico Nextcloud, especialmente para aqueles para quem esta foi a primeira experiência deles no mundo Linux). Para quem está planejando criar um serviço do zero, aconselho que tome como base os quatro primeiros artigos desta série, ajustados para as versões atuais do Debian 10 e Nextcloud 17. Para usuários experientes de Linux, o artigo pode demorar alguns lugar entre “trivial e inútil” e “nada mal, folha de dicas completa em um só lugar”.

Índice analítico

Parte 1: Configurando um ambiente Debian para uso diário
Parte 2: Criando um servidor – configurando o LAMP no Debian
Parte 3. Criando uma nuvem pessoal – instalando e configurando Nextcloud
Parte 4. Atualização 2018 – Debian 9 e Nextcloud 13
Parte 5. Atualização 2019 – PHP 7.2, MariaDB 10.4 e Nextcloud 17

Navegação rápida por capítulo

Prefácio
Atualização do Debian
Atualizando o PHP para a versão 7.2
Atualizando MariaDB para a versão 10.4
Atualizando Nextcloud para a versão 17
Posfácio

Prefácio

Inicialmente eu queria instalar e configurar o Nginx no Debian 10, em cima do qual o atual Nextcloud 17 pudesse ser instalado sem problemas, mas não consegui encontrar tempo para tudo isso, então este artigo é um conjunto de instruções para atualização Nextcloud da versão 13 à atual versão 17 com preparação preliminar do servidor web.

Primeiro, precisamos explicar por que foram necessárias mudanças radicais no lado do servidor web. Nosso servidor é baseado no Debian 9 atual e compatível. Você pode simplesmente atualizar o sistema operacional e todos os componentes do servidor web receberão pelo menos atualizações de segurança. Tudo seria ótimo se continuássemos a usar o Nextcloud 13 ou atualizássemos apenas para a versão 14. Mas o Nextcloud 13 não é mais compatível e o suporte para a 14ª versão está em vias de extinção. A partir da versão 15, Nexctcloud oferecerá a conversão do banco de dados para big int para suportar codificação de quatro bytes, e com MariaDB 10.1 isso será muito problemático. Nexctcloud 17 requer PHP 7.1-7.3, enquanto o Debian 9 contém apenas a versão 7.0 em seus repositórios nativos. Seria mais correto, em termos de confiabilidade e previsibilidade, atualizar para a penúltima versão do Nextcloud, mas depois de alguns anos fiquei tão confiante na confiabilidade deste serviço que quis atualizar para a versão mais recente e atualizar o servidor web com reserva para o futuro. Portanto, para atualizar para Nexctcloud 17, é ideal atualizar o MariaDB para a versão estável atual 10.4 e o PHP para 7.2. Exatamente 7.2, não o atual 7.4. O fato é que Nextcloud 13 requer PHP 5.6, 7.0 - 7.2, e Nexctcloud 17 requer PHP 7.1 - 7.3. É conveniente usar o PHP 7.2 para minimizar os esforços de atualização. Não há necessidade de atualizar seu servidor Apache – basta instalar as atualizações de segurança distribuídas pela equipe de suporte do Debian. Mas para atualizações de MariaDB e PHP você terá que conectar repositórios externos.

Quando estava conhecendo o Nextcloud, atualizei-o “manualmente”: usando um comando especial do console, o site foi colocado em modo de manutenção, o arquivo com a nova versão do site foi baixado e descompactado manualmente, os arquivos foram atualizados e o procedimento de atualização foi iniciado. Essa atualização geralmente levava aos resultados esperados, embora eu não tivesse preguiça de fazer backup do site, banco de dados e dados do usuário. Mas as atualizações automáticas às vezes levavam a todo tipo de surpresas. Mas isso foi há muito tempo, a estabilidade do motor aumentou muito desde então, e dessa vez fiz atualizações exclusivamente pela interface web. É verdade que ainda não consegui sair da linha de comando. Durante uma atualização iterativa para cada nova versão, vários avisos e notificações aparecerão no painel de controle, que precisarão ser “removidos” executando comandos de forma significativa na linha de comando. Você não precisa fazer isso – o serviço ainda funcionará. Embora essa abordagem seja fundamentalmente errada, o Nextcloud funcionou para mim nesse modo por 3 meses antes de eu lidar propositalmente com os problemas que surgiram.

Atualização de Debain

Pare o servidor web:

# service apache2 stop


E atualizamos:

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


Após a atualização, você pode verificar a versão do sistema operacional e fazer uma reinicialização de teste para ter certeza de que tudo inicia normalmente após a atualização:

# cat /etc/debian_version
# reboot


Atualizando o PHP para a versão 7.2

Pare o servidor web:

# service apache2 stop


Adicione certificado e chaves PPA, repositório 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


Ao deletar a versão antiga do PHP 7.0, o phpmyadmin também será deletado, pois limparemos os “rastros” dos pacotes deletados usando autoremove. Isso não causará nenhuma dificuldade particular, já que nenhuma configuração especial foi feita para o phpmyadmin e instalá-lo novamente não será um problema.

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


Instalação de módulos necessários para 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


[ Esse texto escrito especificamente para o site habr.com autor AlexanderS.
Um link para a fonte é opcional, mas mencioná-lo é altamente recomendado! ]

Verificamos a versão do PHP, iniciamos o servidor web e verificamos a funcionalidade do Nextcloud:

# php -v
# service apache2 start


Atualizando MariaDB para a versão 10.4

No site do projeto há página interessante, onde você precisa indicar seu SO, seu lançamento e selecionar a versão do banco de dados. Uma vez selecionado, será gerado o código para adição do repositório.

Pare o servidor web:

# service apache2 stop


Adicione um repositório e atualize os pacotes:

# 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


Ao instalar o MariaDB, o gerenciador de pacotes removerá corretamente a versão anterior e instalará a nova, enquanto todos os bancos de dados serão preservados. No entanto, é claro que é recomendado fazer uma cópia de backup do banco de dados Nextcloud.

Instale o MariaDB e inicie o procedimento de atualização:

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


Após inserir a senha, o MariaDB será atualizado e você poderá configurá-lo seguindo instruções da segunda parte:

# mysql_secure_installation


Lançamos o servidor web e verificamos a funcionalidade do Nextcloud:

# service apache2 start


Atualizando Nextcloud para a versão 17

Para iniciar a atualização, você precisa fazer login no serviço com uma conta administrativa, ir em configurações e abrir “Configurações gerais” na seção administrativa. Nextcloud mostra a versão instalada e a versão disponível para atualização, que pode ser iniciada clicando no botão “Abrir janela de atualização”. Uma vez iniciado, Nextcloud faz um backup, baixa e verifica a integridade dos arquivos de atualização, ativa o modo de manutenção e atualiza os arquivos. A seguir vem a pergunta “Manter o modo de manutenção ativo”? Você precisa ter cuidado aqui. Uma resposta positiva deixará o site em modo de manutenção - presume-se que o administrador saiba o que fazer a seguir e o fará manualmente. Caso contrário, o Nextcloud fará tudo sozinho, então clique no botão “Não” para continuar.

As atualizações são realizadas iterativamente. Primeiro, Nextcloud 13.x será atualizado para a versão mais recente do branch 14.x. Depois disso, você precisará ir novamente ao centro de administração e iniciar a atualização, agora de 14.x para 15.x. E assim por diante até que a última versão atual possível seja alcançada. Após cada atualização, na página “Configurações Gerais” da seção administrativa, será exibida uma lista de sugestões e problemas encontrados, bem como recomendações para solucioná-los. A seguir falaremos sobre o que precisa ser feito após cada atualização.

Até a atualização

Nas versões mais recentes do Nextcloud, é recomendado habilitar o PHP OPcache para melhorar o desempenho. É estranho que eu tenha perdido esse ponto alguns anos atrás, já que o OPcache apareceu no PHP 5. Em /etc/php/7.2/apache2/php.ini você precisa descomentar e editar os seguintes parâmetros:

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


Atualização 13.x -> 14.x

Restaurando índices de tabela:

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


Atualização 14.x -> 15.x

Preparamos o banco de dados nextcloud para permitir a codificação de quatro bytes:

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


Habilite o suporte para codificação de quatro bytes no Nextcloud:

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


Convertendo tabelas:

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


Recuperando índices de tabelas perdidos:

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


Converta índices de tabela em bigint:

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


Atualização 15.x -> 16.x

Recuperando índices de tabelas perdidos:

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


Converta índices de tabela em bigint:

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


Atualização 16.x -> 17.x

Nenhuma ação adicional é necessária.

Posfácio

Seguindo essas instruções, foi atualizada uma máquina virtual com Nextcloud 13. O uso de uma máquina virtual permite não fazer cópias de backup dos arquivos Nextcloud e de seu banco de dados, pois em caso de problemas você pode simplesmente devolver o arquivo da máquina virtual salvo anteriormente e começar tudo de novo de novo. Porém, isso não se aplica à pasta com dados do usuário, da qual também recomendo fazer backup junto com a máquina virtual com Nextcloud. No meu caso, a “nuvem” é usada como uma pasta remota com versionamento automático, e com a direção de sincronização “só lá”, e perder esses dados não foi crítico para mim - eu só teria que fazer a sincronização novamente por várias horas . Apesar do meu desrespeito pela regra vitalícia de "salvar por precaução", a atualização ocorreu sem problemas e todos os clientes começaram a trabalhar com Nextcloud 17 sem problemas. Estou impressionado, Frank Karlitshek - você e sua equipe estão fazendo um ótimo trabalho!

Após a atualização, resolvi limpar os dados do usuário, que, a julgar pelas estatísticas, ocupavam cerca de dois terabytes. Eu não tinha tantos dados operacionais - a maior parte do volume era ocupada por arquivos de versão e arquivos excluídos. O problema que encontrei foi que para um usuário havia tantos dados excluídos (não é nem uma questão de volume, mas de quantidade - muitos arquivos pequenos) que o Nextcloud não conseguiu exibi-los na interface da web. Depois de estudar o manual de administração, encontrei uma solução via linha de comando. Talvez isso seja útil para alguém.

Para limpar arquivos de usuário excluídos:

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


Para limpar arquivos de versão do usuário:

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

Retornar para o início, para o índice.

A história da criação de uma nuvem doméstica. Parte 5. Atualização 2019 – PHP 7.2, MariaDB 10.4 e Nextcloud 17
Versão de texto: 1.1.1.
Data da primeira publicação: 15.01.2020/XNUMX/XNUMX.
Data da última edição: 15.01.2020/XNUMX/XNUMX.

Registro de atualização1.1.1 [15-01-2020] Correção de erros de digitação.

1.1.0 [15-01-2020] Corrigido o código de preparação do banco de dados nexcloud para permitir a codificação de quatro bytes.

1.0.0 [15-01-2020] Primeira versão.

Fonte: habr.com