Установка Redis из исходного кода в Ubuntu 18.04

Redis – это хранилище типа «ключ-значение», известное своей гибкостью, производительностью и широкой поддержкой языков. Redis обычно используется в качестве базы данных и брокера сообщений и поддерживает широкий спектр структур данных.

В этом мануале вы узнаете, как установить и настроить Redis из исходного кода на сервере Ubuntu 18.04. Обратите внимание, что Redis можно установить быстрее, загрузив и установив его из официального репозитория Ubuntu.

Читайте также: Установка и защита Redis в в Ubuntu 18.04

Требования

Для работы вам понадобится сервер Ubuntu 18.04, настроенный по этому мануалу.

1: Установка зависимостей

Чтобы получить последнюю версию Redis, нужно собрать и установить программу из исходного кода. Но прежде чем загрузить исходный код, нужно установить инструменты для сборки и тестирования программного обеспечения.

Установите пакет build-essential из репозитория Ubuntu. Также вам нужно загрузить пакет tcl, который поможет проверить бинарные файлы.

Обновите локальный индекс пакетов и установите все зависимости:

sudo apt update
sudo apt install build-essential tcl

Все зависимости сборки и тестирования установлены, и вы можете начать процесс установки самого Redis.

2: Загрузка, компиляция и установка Redis

После установки зависимостей пора установить Redis, загрузив, скомпилировав, а затем собрав исходный код. Поскольку вам не нужно долго хранить исходный код Redis (вы всегда сможете загрузить его повторно), загрузите его в каталог /tmp. Перейдите в этот каталог:

cd /tmp

С помощью curl загрузите последнюю версию Redis. Ее всегда можно найти по стабильному URL-адресу.

curl -O http://download.redis.io/redis-stable.tar.gz

Распакуйте архив:

tar xzvf redis-stable.tar.gz

Затем перейдите в структуру исходного каталога Redis, которая была только что извлечена:

cd redis-stable

Скомпилируйте бинарные файлы Redis:

make

После того, как исполняемые файлы были скомпилированы, запустите тест, чтобы убедиться, что все собрано правильно:

make test

Для этого обычно требуется несколько минут. По завершении теста установите бинарные файлы в систему:

sudo make install

Установка Redis завершена, теперь вы готовы начать настройку. Для этого нужно создать каталог конфигурации. Обычно он находится в каталоге /etc/, и вы можете создать его там:

sudo mkdir /etc/redis

Скопируйте образец конфигурационного файла Redis, который поставляется вместе с архивом:

sudo cp /tmp/redis-stable/redis.conf /etc/redis

Откройте файл в редакторе:

sudo nano /etc/redis/redis.conf

Внутри файла найдите директиву supervised . Эта директива позволяет объявить систему инициализации для управления сервисом Redis, предоставляя вам больше контроля над ним. По умолчанию директива supervised  имеет значение no. Поскольку вы используете Ubuntu, которая использует систему инициализации systemd, укажите здесь systemd:

. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .

Затем найдите директиву dir. Этот параметр указывает каталог, который Redis будет использовать для хранения данных. Вам нужно указать здесь каталог, где Redis будет иметь права на запись и который недоступен для обычных пользователей.

Для этого используйте каталог /var/lib/redis; создайте этот каталог и скорректируйте права доступа к нему позже:

. . .
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
. . .

Сохраните и закройте файл.

Это все изменения, которые необходимо внести в конфигурационный файл Redis, но вам еще предстоит выполнить несколько этапов – запустить Redis  как сервис и создать выделенного пользователя и группу.

3: Создание юнит-файла systemd для Redis

Чтобы управлять Redis было удобнее, вы можете создать юнит-файл systemd, который позволит ему функционировать как сервису systemd. Это также упростит автозапуск Redis.

Создайте и откройте файл /etc/systemd/system/redis.service:

sudo nano /etc/systemd/system/redis.service

После этого добавьте раздел [Unit], укажите в нем описание сервиса и определите требования сети:

[Unit]
Description=Redis In-Memory Data Store
After=network.target

В разделе [Service] укажите поведение сервиса. В целях безопасности вы не должны запускать его с правами администратора. Вместо этого нужно  использовать выделенного пользователя и группу, и для простоты вы можете назвать их redis. Создать их можно немного позже.

Чтобы запустить сервис, вам просто нужно вызвать бинарный redis-server и указать его в вашей конфигурации. Чтобы остановить его, используйте команду Redis shutdown, которую вы можете выполнить с помощью redis-cli. Также желательно, чтобы Redis по возможности восстанавливался после сбоев, потому укажите always в директиве Restart.

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

Теперь добавьте раздел [Install]. Определите здесь цель systemd, к которой привязан сервис (это добавит его в автозагрузку):

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target

Сохраните и закройте файл.

Юнит-файл Redis готов. Однако прежде чем его можно будет использовать, нужно создать выделенного пользователя и группу, на которую вы ссылаетесь в разделе [Service], и предоставить им необходимые права.

4: Создание пользователя, группы и каталогов Redis

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

Для начала создайте пользователя и группу redis.

sudo adduser --system --group --no-create-home redis

Теперь создайте каталог /var/lib/redis (на который вы ссылались в redis.conf).

sudo mkdir /var/lib/redis

Передайте пользователю redis права на каталог:

sudo chown redis:redis /var/lib/redis

Измените права доступа, чтобы обычные пользователи не смогли открыть каталог:

sudo chmod 770 /var/lib/redis

Теперь все компоненты готовы. Вы можете запустить сервис Redis и протестировать его работу.

5: Запуск и тестирование Redis

Запустите сервис:

sudo systemctl start redis

Проверьте его состояние:

sudo systemctl status redis
redis.service - Redis In-Memory Data Store
Loaded: loaded (/etc/systemd/system/redis.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2018-05-29 17:49:11 UTC; 4s ago
Main PID: 12720 (redis-server)
Tasks: 4 (limit: 4704)
CGroup: /system.slice/redis.service
└─12720 /usr/local/bin/redis-server 127.0.0.1:6379
. . .

Чтобы убедиться, что сервис работает правильно, подключитесь к серверу Redis с помощью клиента командной строки:

redis-cli

В появившуюся сроку введите:

ping

Команда вернет:

PONG

Установите ключ:

set test "It's working!"
OK

А теперь попробуйте извлечь значение ключа test:

get test

Вы должны получить:

"It's working!"

После этого вы можете закрыть командную строку Redis и вернуться в стандартную оболочку:

exit

В качестве финального теста нужно убедиться, что Redis может сохранять данные даже после остановки или перезапуска. Для этого сначала перезапустите экземпляр Redis:

sudo systemctl restart redis

Затем снова подключитесь к клиенту и убедитесь, что ваше тестовое значение все еще доступно:

redis-cli
get test

Значение должно появиться на экране:

"It's working!"

Вернитесь в оболочку:

exit

Если все тесты пройдены успешно и теперь вы хотите добавить Redis в автозагрузку, включите сервис:

sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.

Заключение

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

Tags: , ,