Прочитав эту статью вы научитесь использовать современный способ запуска Redis как безопасного приложения Docker.
Redis — популярное хранилище вида «ключ-значение» в памяти и не только — он позволяет организовывать другие хранилища, например, для множеств, очередей сообщений, блокировок, счетчиков и других структур. Благодаря высочайшей производительности Redis стал популярным хранилищем и используется в множестве продуктов, например, вы можете настроить хранение пользовательских сессий в Redis для PHP, что позволить разгрузить файловую систему сервера и автоматически удалять устаревшие объекты.
Настройка Docker
Если у вас уже настроен и установлен Docker, просто пропустите этот шаг. Если Docker не установлен, установите его по одному из руководств: Ubuntu 16.04 и 18.04, Debian 9 и 10, Centos 7 и приступайте к следующему шагу.
Настройка Redis
При установке Redis мы будем использовать внешний конфигурационный файл и внешний каталог хранения данных для того, чтобы при перезапуске контейнера вся информация оставалась в сохранности.
Нам понадобится два каталога — /opt/redis/etc и /opt/redis/data. В первом мы будем хранить настройки для redis.conf, а во втором — базы данных Redis и журналы, если вам требуется сохранять данные между перезапусками Redis. Обычно, если Redis используется для целей СУБД, а не кэша, то сохранение данных требуется.
Создадим каталоги:
sudo mkdir -p /opt/redis/{etc,data} sudo mkdir /opt/redis/data/{bases,log}
Заполним конфигурационный файл /opt/redis/etc/redis.conf содержимым из блока, приведенного ниже:
bind 0.0.0.0 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 pidfile /var/run/redis/redis-server.pid loglevel notice logfile /data/log/redis-server.log databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data/bases slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no slave-lazy-flush no appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble no lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
Записи журнала Redis будут находиться в файле /opt/redis/logs/redis-server.log, а базы данных Redis в каталоге /opt/redis/data/bases.
Преимущества выполненных настроек Redis:
- все базы данных Redis будут сохраняться между перезагрузками контейнера;
- журналы redis будут находиться в файле, а не в syslog или в стандартном выводе контейнера;
- конфигурационный файл, использованный в настройке находится во внешнем файле и может быть изменен по необходимости.
Запустим контейнер:
sudo docker run --restart=always -d --name redis_1 \ -v /opt/redis/etc/redis.conf:/usr/local/etc/redis/redis.conf \ -v /opt/redis/data:/data \ -p 127.0.0.1:6379:6379 redis redis-server \ /usr/local/etc/redis/redis.conf
Для проверки того, что контейнер нормально запустился запустите команду
sudo docker ps
В результате, вы должны увидеть вывод, похожий на следующий:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES afcd2f031d62 redis "docker-entrypoint.s…" 14 minutes ago Up 14 minutes 127.0.0.1:6379->6379/tcp redis_1
На этом базовое продуктовое развертывание Redis можно считать законченной. Следующим шагом мы рекомендуем выполнить настройки безопасности, приведенные в нашей статье.