Redis Установка инструкция -- Ubuntu linux (компиляция из исходников)
Primary tabs
Устанавливать будем из исходников. Другие полезные моменты по редис см. тут.
Вспомогательные пакеты
Для начала мы установим пакет build-essential -- для разбора зависимостей редис-а, а также tcl, который потребуется для тестирования скаченных бинарников.
Итак, поехали:
sudo apt-get update && \ sudo apt-get install build-essential tcl
Качаем и распаковываем
Идём по временную папку:
cd /tmp
Качаем Редис: curl -O http://download.redis.io/redis-stable.tar.gz
Открываем архив:
tar xzvf redis-stable.tar.gz
Заходит в распакованную папку:
cd redis-stable
Компилируем и устанавливаем
Компилируем редис:
make
Как скомпилируется, начинаем тестировать загруженный код командой:
make test
(если что -- не пугайтесь)
Если тестирование завершено успешно, то выполним установку командой:
sudo make install
Настройка Redis
Теперь пришло время настроить Редис, для начала создадим директорию, в которой будет хранится конфигурация. Пусть это будет директория /etc/redis создадим её командой:
sudo mkdir /etc/redis
Теперь скопируем файл-образец конфигурации Redis из скаченного нами ранее архива Redis:
sudo cp /tmp/redis-stable/redis.conf /etc/redis
Далее изменим там несколько моментов (с помощью любимого nano):
sudo nano /etc/redis/redis.conf
В этом файле находим опцию supervised. По умолчанию она выставлена в no.
Так как мы используем ОС (убунту), где все службы запускаются службой systemd, то изменим значение данной опции на systemd -- чтобы наш файл /etc/redis/redis.conf выглядел как-то так:
. . ....... # 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 в том же файле (опция показывает редису, где хранить свои постоянные данные). Нужно какое-нибудь место, где Редис имеет права на запись, а обычные пользователи не могут просматривать -- будем использовать директорию для этого директорию /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 файл модуля (systemd)
Далее создадим конфигурационный файл, с помощью которого система сможет руководить процессом Redis.
Создадим и откроем файл:
sudo nano /etc/systemd/system/redis.service
-- где мы начнём описания особенностей функционирования редис-а секцией [Unit], в которой укажем, что необходимо наличие работы "с сетью" перед тем, как появится смысл запускать наш процесс:
[Unit] Description=Redis In-Memory Data Store After=network.target
В секции [Service] нам необходимо описать поведение службы. Из соображений безопасности мы не будем запускать наш сервис из-под root. Создадим отдельных пользователя и группу, которых для ясности назовём "redis". Пользователей и группу создадим чуть позже, а пока продолжим заполнять секцию
Чтобы сервис (служба) стартовал, нам достаточно запустить бинарник редиса, но который указывают настройки.
А чтобы остановить редис, мы можем использовать команду:
shutdown
которая может быть выполнена бинарником redis-cli.
Также так как мы хотим, чтобы редис по возможности поднимался после падений, то выставим опцию Restart в "always" после чего наш файл /etc/systemd/system/redis.service будет выглядеть так:
[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] , мы можем определить the цель для systemd (systemd target) которая позволит загрузить нашу службу при старте системы (автозагрузка) -- т.е. теперь наш файл (/etc/systemd/system/redis.service) выглядит так:
[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 Service (службу)
Запускаем слуюжбу редиса через 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-cli
в появившемся окружении выполните команду:
-
ping
в ответ должно выйти что-то вроде:
PONG
- Далее, убедимся, что мы можем высталять ключи командой вроде:
set test "It's working!"
в ответ должны получить:
OK
далее попробуем получить установелнное значение по ключу:
get test
В ответ должны получить:
"It's working!"
- Выйдем из контекста редис-клиента:
exit
Теперь для проверки давайте перезапустим редис комадной:
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.
- Log in to post comments
- 6541 reads
vedro-compota
Tue, 04/24/2018 - 18:01
Permalink
sudo make install -- странный ответ redis
наблюжатеся такое:
но вроде это нормально.
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 04/30/2018 - 10:54
Permalink
Can't chdir to : No such file or directory
Проблема при отладке, запуском под именем редиса:
-- как видим это просто опечатка в имени директории.
_____________
матфак вгу и остальная классика =)