Требования
- Предварительно настроенный сервер Ubuntu 16.04.
- Не-root пользователь с доступом к команде sudo.
Установка зависимостей
Чтобы получить последнюю версию Redis, нужно скомпилировать программу из исходного кода. Для этого необходимы наборы инструментов для сборки и тестирования кода. Прежде чем загружать исходный код, установите все эти инструменты.
В репозиториях Ubuntu можно найти метапакет build-essential, содержащий инструменты для компиляции. Для тестирования нужен tcl. Чтобы установить эти пакеты, введите:
sudo apt update
sudo apt install build-essential tcl
Загрузка, компиляция и установка Redis
Загрузка и извлечение исходного кода
Поскольку исходный код не нужно хранить (для обновления программы лучше скомпилировать код заново), его можно загрузить и собрать в каталоге /tmp. Откройте этот каталог:
cd /tmp
Теперь загрузите последнюю стабильную версию Redis. Она всегда доступна по этой ссылке.
curl -O http://download.redis.io/redis-stable.tar.gz
Распакуйте архив:
tar xzvf redis-stable.tar.gz
Откройте каталог с исходным кодом Redis:
cd redis-stable
Сборка и установка Redis
Теперь можно скомпилировать бинарные файлы Redis:
make
После этого можно использовать инструменты для тестирования, чтобы убедиться, что код собран правильно.
make test
На выполнение команды уйдёт несколько минут. После тестирования можно установит бинарные файлы:
sudo make install
Настройка Redis
После установки Redis нуждается в настройке.
Для начала создайте каталог для хранения конфигурационных файлов, /etc/redis.
sudo mkdir /etc/redis
Скопируйте образец конфигурационного файла Redis из исходного архива:
sudo cp /tmp/redis-stable/redis.conf /etc/redis
Откройте файл, чтобы изменить в нём несколько параметров:
sudo nano /etc/redis/redis.conf
Найдите директиву supervised; на данный момент её значение no. Поскольку вы работаете в операционной системе, которая использует систему инициализации 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
. . .
Сохраните и закройте файл.
Создание unit-файла для Redis
Теперь нужно создать unit-файл systemd для Redis, чтобы система инициализации могла управлять процессом 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] нужно настроить поведение сервера. В целях безопасности нельзя запускать сервис как root. Для этого нужно создать отдельного пользователя и группу (в руководстве они условно называются redis).
Чтобы запустить сервис, нужно вызвать бинарный файл redis-server, указанный в настройках. Чтобы остановить его, можно использовать команду Redis shutdown при помощи бинарного файла redis-cli. Чтобы настроить восстановление ошибок Redis, нужно изменить значение директивы Restart на always. Получится так:
[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], определяющий target системы 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
Теперь нужно создать пользователя, группу и каталог, указанные в предыдущих настройках.
Сначала создайте группу и пользователя redis. Для этого запустите команду:
sudo adduser --system --group --no-create-home redis
Затем создайте каталог /var/lib/redis:
sudo mkdir /var/lib/redis
Передайте пользователю и группе redis права на каталог:
sudo chown redis:redis /var/lib/redis
Заблокируйте доступ к каталогу для остальных пользователей:
sudo chmod 770 /var/lib/redis
Запуск и тестирование Redis
Запуск сервиса Redis
Запустите сервис systemd:
sudo systemctl start redis
Проверьте состояние сервиса, чтобы убедиться, что он запустился без ошибок:
sudo systemctl status redis
Команда вернёт:
redis.service - Redis Server
Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2016-05-11 14:38:08 EDT; 1min 43s ago
Process: 3115 ExecStop=/usr/local/bin/redis-cli shutdown (code=exited, status=0/SUCCESS)
Main PID: 3124 (redis-server)
Tasks: 3 (limit: 512)
Memory: 864.0K
CPU: 179ms
CGroup: /system.slice/redis.service
└─3124 /usr/local/bin/redis-server 127.0.0.1:6379
. . .
Тестирование Redis
Чтобы убедиться в том, что Redis работает, подключитесь к серверу Redis при помощи клиента командной строки:
redis-cli
Затем введите в появившуюся строку:
ping
Команда должна вернуть:
PONG
Убедитесь в том, что вы можете добавлять ключи:
set test "It's working!"
OK
Попробуйте извлечь значение:
get test
Команда должна вернуть:
"It's working!"
Чтобы закрыть командную строку Redis, введите:
exit
Попробуйте перезапустить Redis:
sudo systemctl restart redis
Снова подключитесь при помощи клиента и убедитесь, что добавленное ранее значение доступно:
redis-cli
get test
Команда должна вернуть:
"It's working!"
Закройте командную строку:
exit
Автозапуск Redis
Убедившись, что Redis работает, настройте автозапуск сервиса.
Для этого введите:
sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.