Борьба за запуск Redis в Nextcloud

8 min

language: ja bn en es hi pt ru zh-cn zh-tw

Здравствуйте, я бездарь.

Настройка Nextcloud 21.0.1 + Nginx + PHP + MariaDB + Redis на Ubuntu 20.04

Я следовал этой статье, на которую ссылался при предыдущей установке Nextcloud, но в моей среде Redis не работал должным образом.
Он работает нормально и без него, так что можно было бы и не делать этого...
Но это меня постоянно беспокоило, поэтому это решение.
Кстати, поскольку я настроил прокси-кэш в Nginx, я задался вопросом, в чем разница, и попросил ChatGPT объяснить. Вы можете увидеть это, нажав кнопку ниже.

#myText { display: none; } #toggleButton:checked ~ #myText { display: block; }

Показать описание

Прокси-кэш Nginx встроен в сам веб-сервер (Nginx).
Он функционирует как обратный прокси, кэшируя запросы к серверу приложений и возвращая ответы.

В основном используется для кэширования веб-контента (HTML, изображений, CSS, JavaScript и т. д.).
Ускоряет доставку статических файлов и снижает нагрузку на сервер.

Прокси-кэшем Nginx можно легко управлять и контролировать с помощью файлов конфигурации Nginx.
Можно настроить срок действия кэша, размер, целевые URL-адреса для кэширования и т. д.

Прокси-кэш Nginx работает в рамках одного сервера Nginx, и для масштабируемости и высокой доступности требуются такие методы, как кластеризация или репликация Nginx.

Он сохраняет временные файлы кэша на диске, но не предоставляет функций для долгосрочной устойчивости или долговечности данных.

Redis — это независимая платформа баз данных и кэширования.
Он работает на отдельном сервере, и приложения подключаются к Redis для чтения и записи кэшированных данных.

Это универсальная платформа кэширования, способная кэшировать различные типы данных.
Типы данных для кэширования включают строки, списки, наборы, отсортированные наборы, хеши и т. д.

Redis напрямую контролируется и управляется программами.
Кэшированными данными можно манипулировать с помощью команд Redis, таких как установка, получение, удаление и установка срока действия данных.

Проблемы

Прежде всего, Redis вообще не работал.
Пакеты, которые я в итоге установил:
Redis, Redis-server, Redis-tools, php-fpm

При попытке запустить Redis

sudo service redis-server start

Возникшие ошибки

Ошибка 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

Решение : Ругается, что не может получить доступ к логу, установленному в redis.conf!
Я оставил его пустым (""), так как он, похоже, создает его автоматически, даже если logfile не указан. Если это действительно необходимо, я думаю, что он будет работать нормально, если настроить лог, права доступа и разрешения.

Ошибка 2

# Opening port: bind: Address already in use

Решение : Ругается, что этот порт уже используется!
Порт, установленный по умолчанию в redis.conf, — 6379. По какой-то причине в Devuan (OpenRC) он не останавливается даже с `sudo service redis-server stop`, выдавая ошибку. Поэтому, чтобы проверить, что его использует, я ввожу следующее:

root@hoge:~# lsof -i :6379

Если есть процесс Redis, работающий в фоновом режиме, то это оно. Проверьте PID и убейте его.

root@hoge:~# kill -9 <PID>

После этого он должен запуститься нормально.

Ошибка 3

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 135
>>> 'slave-serve-stale-data yes'
Bad directive or wrong number of arguments

Решение : Я понял, что это обычно вызвано различиями в версиях Redis и версиях описания в redis.conf.

Выберите ту же версию, что и ваша, на сайте Redis и просто скопируйте и вставьте все.

Redis configuration

Ошибка 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

Решение : Говорит, что не может открыть файл dump.rdb.
Подобно этому, если остаются старые RDB-файлы, он может аварийно завершить работу после запуска. Сначала я думал, что это проблема с памятью, но это было не так.
Это произошло после запуска, когда я изменил папку назначения кэша `Dir */~` в redis.conf.
Похоже, он пытается загрузить его, даже если каталог кэша изменен, поэтому давайте принудительно удалим его. У меня он был в /var/lib/redis/dump.rdb.

sudo rm /var/lib/redis/dump.rdb

На этом проблемы с Redis были решены.

Со стороны Nextcloud

root@hoge:~# sudo -u www-data php /var/www/html/nextcloud/occ maintenance:update:htaccess

Это то, что нужно делать при обновлении htaccess.

RedisException: Connection refused in /var/www/html/nextcloud/lib/private/RedisFactory.php:137
~~~~~

Решение : Если после этого возникает много ошибок с именем файла, это означает, что Redis либо не работает должным образом, либо описание на стороне Nextcloud неверно, и он не может подключиться к Redis.
В основном следует подозревать php.config Redis и Nextcloud.


Мне кажется, были и другие, но, думаю, это все.

Теперь можно быть спокойным, даже если придется работать с Redis в будущем.

Кстати, я думаю, что наложение кэша в памяти может, наоборот, замедлить работу, но как на самом деле? Если он достаточно быстр, то, возможно, узким местом станет скорость отклика сервера или устройства, с которым он обменивается данными.
Это все еще неизведанная территория, так что я с нетерпением жду.

Я уже совсем измотан.
На этом все.

Related Posts