Redis — это система кэширования и хранения данных в оперативной памяти с открытым исходным кодом, также называемая сервером структур данных. Он предлагает расширенную поддержку нескольких типов данных, таких как хэши, списки, множества, битовые карты и многие другие. Благодаря своей превосходной производительности Redis пользуется популярностью в ведущих отраслях и крупнейших транснациональных компаниях.
Преимущества Redis
Когда дело доходит до скорости, серверам Redis нет равных. Как NoSQL-сервер баз данных, он обеспечивает фантастическую скорость хранения и извлечения данных. Кроме того, Redis обладает выдающимися функциональными возможностями, которые позволяют беспрепятственно работать с различными данными, включая сложные. Простота использования и сложные функции Redis не только выделили его среди других, но и способствовали его растущей стандартизации в качестве основной базы данных для корпоративных и индивидуальных пользователей.
Ниже мы подробно опишем шаги, которые помогут вам установить Redis на ОС Ubuntu 20.04. В этом руководстве вы получите всю необходимую информацию, начиная от установки и заканчивая настройкой внешнего сервера Redis для использования в качестве обработчика сессий для PHP-приложения, работающего на Ubuntu 20.04.
Начало работы
Для выполнения этих шагов вам понадобятся два разных сервера баз данных (дроплета), расположенных в одном дата-центре с включенной частной сетью. К ним относятся:
-
Веб-сервер PHP, работающий под управлением LAMP и LEMP на Ubuntu 20.04 – мы будем называть этот сервер web.
-
Второй, чистый сервер Ubuntu 20.04, на который будет установлен Redis – мы будем называть этот сервер redis.
Шаг 1 — Установка сервера Redis
Наш первый шаг — установить сервер Redis на Ubuntu 20.04. После этого убедитесь, что сервер запущен и работает на нашем дроплете redis.
В этом руководстве мы будем использовать персональные архивы пакетов (PPA). Мы настоятельно рекомендуем использовать PPA из соображений безопасности. По сравнению с другими сторонними репозиториями, PPA стабильны, просты в установке и, прежде всего, этот репозиторий разработан для пользователей Ubuntu. PPA позволяет получать последнюю доступную версию программного обеспечения, даже для тех программ, которых нет в официальных репозиториях Ubuntu.
Использование PPA из неавторизованных источников категорически не рекомендуется. Убедитесь, что вы получаете PPA только из надежных и проверенных источников. Вы можете добавить репозиторий PPA с помощью команды:
|
1 |
sudo add-apt-repository ppa:chris-lea/redis-server |
Нажмите клавишу Enter для подтверждения. После подтверждения мы обновим кэш менеджера пакетов с помощью следующей команды:
|
1 |
sudo apt-get update |
Next, we will install Redis using the command:
|
1 |
sudo apt-get install redis-server |
После выполнения команды Redis будет установлен на вашем сервере. Давайте протестируем установку с помощью команды:
|
1 |
redis-cli ping |
После выполнения команды вы увидите экземпляр Redis, работающий на localhost на порту 6379. Также будет получен ответ PONG. Если вы видите это, значит, вы успешно выполнили первый шаг. Подробное руководство по установке и защите Redis можно найти в нашей статье Как установить и защитить Redis на Ubuntu 18.04.
Далее перейдем к следующему шагу — настройке Redis.
Шаг 2 — Настройка Redis для приема внешних подключений
Основная цель настройки Redis — разрешить прием внешних подключений. Почему? Потому что по умолчанию Redis разрешает подключения только к localhost, и существует ограничение на подключение из любого другого места. Проще говоря, у вас будет доступ только изнутри сервера, на котором установлен Redis.
Сначала получите подробную информацию о ваших сетевых интерфейсах с помощью команды ifconfig:
|
1 |
sudo ifconfig |
Вы получите следующий вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
eth0 Связь инкапсуляция:Ethernet HWaddr 04:01:63:7e:a4:01 inet адрес:188.166.77.33 Bcast:188.166.127.255 Маска:255.255.192.0 inet6 адрес: fe80::601:63ff:fe7e:a401/64 Область:Связь UP BROADCAST RUNNING MULTICAST MTU:1500 Метрика:1 RX пакетов:3497 ошибок:0 сброшено:0 переполнений:0 кадров:0 TX пакетов:3554 ошибок:0 сброшено:0 переполнений:0 несущая:0 коллизий:0 txqueuelen:1000 RX байт:4895060 (4.8 МБ) TX байт:619070 (619.0 КБ) eth1 Связь инкапсуляция:Ethernet HWaddr 04:01:63:7e:a4:02 inet адрес:10.133.14.9 Bcast:10.133.255.255 Маска:255.255.0.0 inet6 адрес: fe80::601:63ff:fe7e:a402/64 Область:Связь UP BROADCAST RUNNING MULTICAST MTU:1500 Метрика:1 RX пакетов:8 ошибок:0 сброшено:0 переполнений:0 кадров:0 TX пакетов:7 ошибок:0 сброшено:0 переполнений:0 несущая:0 коллизий:0 txqueuelen:1000 RX байт:648 (648.0 Б) TX байт:578 (578.0 Б) |
На eth1 интерфейсе вы найдете inet_addr. Здесь у нас 10.133.14.9. Мы будем использовать этот IP-адрес на следующих шагах для подключения к серверу redis с web сервера.
Шаг 3 — Привязка к Localhost
Вы можете использовать любой текстовый редактор по вашему выбору (наиболее популярными являются Atom и Visual Studio Code).
Теперь откройте файл /etc/redis/redis.conf и найдите строку, содержащую определение bind. Вам нужно добавить ваш IP-адрес частной сети в эту строку:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 |
bind localhost 10.133.14 |
Вы можете увидеть localhost, вместо 127.0.0.1. Не беспокойтесь, вам просто нужно добавить свой частный IP-адрес. Затем перезапустите службу Redis, чтобы применить изменения. Используйте команду ниже для перезапуска сервера redis сервера:
|
1 |
sudo service redis-server restart |
Те пользователи, которые установили Redis с помощью приложения в один клик, должны использовать следующую команду для перезапуска сервера:
|
1 |
sudo service redis restart |
После перезапуска сервера redis, любой сервер в той же частной сети автоматически подключится к этому экземпляру Redis без необходимости делать это индивидуально.
Шаг 4 — Настройка пароля сервера Redis
Вы можете пропустить этот шаг, если используете установку Redis в учебных целях. Тем не менее, настройка пароля для сервера redis крайне рекомендуется, если вы хотите добавить дополнительный уровень безопасности для вашей установки Redis. Давайте изменим тот же конфигурационный файл, что и на предыдущем шаге. Используйте команду для редактирования:
|
1 |
sudo vim /etc/redis/redis.conf |
Раскомментируйте строку, содержащую requirepass, и установите надежный пароль:
|
1 |
requirepass StrongPassword |
Перезапустите службу Redis, чтобы применить внесенные изменения. Используйте команду для перезапуска:
|
1 |
sudo service redis-server restart |
Шаг 5 — Тестирование подключения и аутентификации Redis
На этом шаге мы подключимся к службе Redis изнутри машины redis, чтобы убедиться, что все внесенные изменения работают без сбоев, как и ожидалось. Для подключения используйте команду ниже:
|
1 |
redis-cli -h 10.133.14.9 |
Здесь, даже если вы пропустите указание имени хоста, команда все равно выполнится. Наша основная цель — убедиться, что служба Redis без проблем принимает подключения:
|
1 |
10.133.14.9:6379> |
Возможно, вы получите ошибку AUTH при попытке доступа к данным с использованием заданного пароля:
|
1 |
10.133.14.9:6379> keys * |
Ваш вывод будет выглядеть примерно так:
|
1 2 |
OUTPUT: (error) NOAUTH Authentication required. |
Для аутентификации выполните команду AUTH вместе с тем же паролем, который вы определили в файле /etc/redis/redis.conf :
|
1 |
10.133.14.9:6379> AUTH StrongPassword |
Затем снова запустите команду:
|
1 |
10.133.14.9:6379> keys * |
На этот раз вы получите ответ OK вместо ошибки. Вы получите следующий вывод:
|
1 2 |
OUTPUT: (empty list или set) |
Вывод empty list или set означает, что сервер Redis пуст. Это связано с тем, что мы еще не настроили веб-сервер в качестве обработчика сессий.
Примечание: Прежде чем двигаться дальше, убедитесь, что сессия SSH открыта и подключена к redis-cli. На следующих шагах мы вернемся к командной строке redis-cli, чтобы проверить, правильно ли сохранились данные сессии после внесения необходимых изменений на web сервере.
Шаг 6 — Установка расширения Redis на веб-сервере
Следующие шаги должны быть выполнены на web сервере. Нам нужно установить расширение PHP Redis, чтобы PHP мог подключаться к серверу Redis.
Сначала обновите кэш менеджера пакетов, выполнив команду:
|
1 |
sudo apt-get update |
Затем установите пакет php5-redis :
|
1 |
sudo apt-get install php5-redis |
Все готово для подключения к Redis.
Шаг 7 — Настройка Redis в качестве обработчика сессий по умолчанию на веб-сервере
В PHP есть обработчик сессий по умолчанию. На этом шаге мы отредактируем файл php.ini на web сервере, чтобы изменить настройки по умолчанию. Расположение файла php.ini зависит от текущего стека:
-
Для стека LAMP на Ubuntu 20.04 используйте: /etc/php5/apache2/php.ini.
-
Для стека LEMP на Ubuntu 20.04 путь обычно следующий: /etc/php5/fpm/php.ini.
Если вы не уверены в расположении вашего основного файла php.ini, воспользуйтесь функцией phpinfo(). Поместите следующий код в файл с именем info.php в корневом каталоге вашего веб-сайта:
|
1 2 |
<?php phpinfo(); |
При попытке получить доступ к скрипту из браузера найдите строку, содержащую «Loaded Configuration File». Вы найдете точное расположение загруженного основного файла php.ini. Обязательно удалите файл info.php, так как он содержит конфиденциальные данные о вашем окружении.
После этого откройте файл php.ini и найдите строку, содержащую session.save_handler. Значение по умолчанию будет files, обязательно измените его на redis.
В окружении LAMP :
|
1 |
$ sudo vim /etc/php5/apache2/php.ini |
В окружении LEMP :
|
1 |
$ sudo vim /etc/php5/fpm/php.ini |
|
1 |
session.save_handler = redis |
Затем раскомментируйте session.save_path и измените значение, чтобы оно содержало строку подключения к Redis. Содержимое должно соответствовать следующему формату:
|
1 |
tcp://IPADDRESS:PORT?auth=REDISPASSWORD |
|
1 |
session.save_path = "tcp://10.133.14.9:6379?auth=yourverycomplexpasswordhere" |
Используйте пароль, который мы настроили на шаге 4.. Если вы не используете установленный пароль, укажите параметр auth при настройке Redis. Теперь сохраните файл и перезапустите php службу в обеих средах.
В средах LAMP:
|
1 |
sudo service apache2 restart |
В средах LEMP:
|
1 |
sudo service php5-fpm restart |
Шаг 8 — Тестирование обработки сессий в Redis
На последнем шаге нам понадобится PHP-скрипт или приложение, чтобы убедиться, что ваши сессии теперь обрабатываются Redis. Мы будем использовать простой скрипт, реализующий счетчик — при каждой перезагрузке страницы выводимое число увеличивается.
Создайте файл с именем demo.php на сервере web и сохраните его в корневой папке документов:
|
1 |
sudo sudo vim /usr/share/nginx/html/test.php |
Затем измените /usr/share/nginx/html, чтобы указать путь к корневой папке документов:
|
1 2 3 4 5 6 7 |
<?php //simple counter to test sessions. should increment on each page reload. session_start(); $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1; echo $count; $_SESSION['count'] = ++$count; |
Затем вам нужно открыть в браузере http://web/demo.php для доступа к скрипту. Программа будет увеличивать число при каждой перезагрузке страницы.
Теперь информация о сессии будет храниться на сервере Redis. Чтобы проверить это, вам нужно вернуться к вашей SSH-сессии на машине redis с помощью redis-cli. Получите содержимое еще раз с помощью keys *:
|
1 |
10.133.14.9:6379> keys * |
Вы увидите следующий вывод:
|
1 2 |
OUTPUT: 1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83" |
Вывод подтверждает, что вся информация надежно хранится на сервере redis. Если вы хотите подключить дополнительные web серверы, вы можете сделать это аналогичным образом.
Заключение
Redis — это база данных NoSQL, которая позволяет хранить большие объемы неструктурированных данных. Очень немногие базы данных могут сравниться по функциональности и простоте с сервером redis. Его растущая популярность делает его незаменимым решением, имеющим мало альтернатив благодаря широкому набору функций.
Чтобы еще больше углубить свои знания о PHP-приложениях и их использовании, вы можете ознакомиться со следующими руководствами в нашем блоге:
- Развертывание PHP-приложения в кластере Kubernetes на Ubuntu 18.04
- Установка phpBB на Ubuntu 20.04
- Установка и защита phpMyAdmin на Ubuntu 18.04
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.