A luta para fazer o Redis funcionar no Nextcloud
Olá, sou um inútil.
Configurar Nextcloud 21.0.1 + Nginx + PHP + MariaDB + Redis no Ubuntu 20.04
Segui este artigo, que também usei como referência na minha instalação anterior do Nextcloud, mas o Redis não funcionou corretamente no meu ambiente.
Mesmo que não funcione, ele funciona normalmente, então não precisaria fazer isso...
Mas como isso me incomodava, esta é a parte da solução.
Além disso, como configurei o cache de proxy no Nginx, me perguntei qual era a diferença e pedi ao ChatGPT para explicar. Você pode ver clicando no botão abaixo.
#myText { display: none; } #toggleButton:checked ~ #myText { display: block; }
Mostrar explicação
O cache de proxy do Nginx é integrado ao próprio servidor web (Nginx).
Ele funciona como um proxy reverso, armazenando em cache as requisições para o servidor de aplicação e retornando as respostas.
É usado principalmente para armazenar em cache conteúdo web (HTML, imagens, CSS, JavaScript, etc.).
Acelera a entrega de arquivos estáticos e reduz a carga no servidor.
O cache de proxy do Nginx pode ser facilmente gerenciado e controlado usando o arquivo de configuração do Nginx.
Você pode configurar a expiração do cache, o tamanho, as URLs a serem armazenadas em cache, etc.
O cache de proxy do Nginx opera dentro de um único servidor Nginx, e para escalabilidade e alta disponibilidade, são necessárias técnicas como clustering ou replicação do Nginx.
Ele armazena arquivos de cache temporários no disco, mas não oferece funcionalidade para persistência ou durabilidade de dados a longo prazo.
Redis é uma plataforma de banco de dados e cache independente.
Ele é executado em um servidor separado, e as aplicações se conectam ao Redis para ler e gravar dados em cache.
É uma plataforma de cache de propósito geral e pode armazenar em cache vários tipos de dados.
Os tipos de dados que podem ser armazenados em cache incluem strings, listas, conjuntos, conjuntos ordenados, hashes, etc.
O Redis é controlado e gerenciado diretamente por programas.
Os dados em cache são manipulados usando comandos Redis para definir, obter, excluir, definir expiração, etc.
Problemas
Primeiramente, o Redis não funcionou.
Pacotes finalmente instalados
Redis, Redis-server, Redis-tools, php-fpm
Ao tentar iniciar o Redis
sudo service redis-server start
Erro que apareceu
Erro 1
Reading the configuration file, at line 1
>>> 'logfile "/var/log/redis/redis.log"'
Can't open the log file: No such file or directory
Solução : O Redis reclama que não consegue acessar o log configurado em redis.conf!
Como ele parece criar o arquivo de log automaticamente mesmo sem especificar 'logfile', eu o deixei como "". Se for realmente necessário, acredito que funcionará normalmente se você configurar o log, as permissões e as permissões de acesso.
Erro 2
# Opening port: bind: Address already in use
Solução : O Redis reclama que a porta já está em uso!
A porta configurada inicialmente em redis.conf é 6379. Por alguma razão, no Devuan (OpenRC), ele não para mesmo com sudo service redis-server stop, e um erro aparece. Então, para verificar o que está usando a porta, digite o seguinte:
root@hoge:~# lsof -i :6379
Se houver um processo Redis rodando em segundo plano, bingo. Verifique o PID e mate-o.
root@hoge:~# kill -9 <PID>
Depois disso, ele deve iniciar normalmente.
Erro 3
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 135
>>> 'slave-serve-stale-data yes'
Bad directive or wrong number of arguments
Solução : Percebi que isso geralmente ocorre devido a uma diferença entre a versão do Redis e a versão da sintaxe em redis.conf.
Escolha a versão correspondente à sua no site do Redis e copie e cole tudo.
Erro 4
Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied
6232:M 07 Jul 2023 03:56:39.182 # Background saving error
Solução : Ele está dizendo que não consegue abrir o arquivo dump.rdb.
Algo semelhante acontece quando arquivos RDB antigos permanecem, fazendo com que o Redis caia após a inicialização. No início, pensei que era um problema de memória, mas não era.
Isso aconteceu depois que o Redis foi iniciado e eu alterei a pasta de destino do cache Dir */~ em redis.conf.
Parece que ele tenta carregar o arquivo mesmo depois de mudar o diretório de cache, então vamos excluí-lo à força. No meu caso, estava em /var/lib/redis/dump.rdb.
sudo rm /var/lib/redis/dump.rdb
Com isso, os problemas do lado do Redis foram resolvidos.
Lado do Nextcloud
root@hoge:~# sudo -u www-data php /var/www/html/nextcloud/occ maintenance:update:htaccess
O que se faz ao atualizar o htaccess.
RedisException: Connection refused in /var/www/html/nextcloud/lib/private/RedisFactory.php:137
~~~~~
Solução : Se muitos erros ocorrerem com nomes de arquivo, é um erro que indica que o Redis não está funcionando corretamente ou que a configuração do Nextcloud está incorreta e não consegue se conectar ao Redis.
Suspeite principalmente do Redis e do php.config do Nextcloud.
Acho que havia outros, mas foi basicamente isso.
Agora, mesmo que eu precise lidar com o Redis no futuro, estarei tranquilo.
Aliás, se eu empilhar caches de memória, a velocidade diminuirá? Estou pensando nisso, mas o que você acha? Se for rápido até certo ponto, a velocidade de resposta do servidor ou dispositivo que está se comunicando nesse meio tempo pode se tornar um gargalo.
Ainda há muito a explorar, então estou ansioso.
Estou exausto.
Até mais.