Redis Установка инструкция -- Ubuntu linux (компиляция из исходников)

Устанавливать будем из исходников. Другие полезные моменты по редис см. тут.

Вспомогательные пакеты

Для начала мы установим пакет 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.

Источник: https://www.digitalocean.com/community/t...

vedro-compota's picture

наблюжатеся такое:

sudo make install
[sudo] password for qwer: 
cd src && make install
make[1]: Entering directory '/tmp/redis-stable/src'

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: Leaving directory '/tmp/redis-stable/src'

но вроде это нормально.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

Can't chdir to '/var/lib/resid': No such file or directory

Проблема при отладке, запуском под именем редиса:

sudo -H -u redis /usr/local/bin/redis-server /etc/redis/redis.conf

-- как видим это просто опечатка в имени директории.

_____________
матфак вгу и остальная классика =)