Загрузка...

Redis для сессии в Symfony4

Пример настройки и конфигурирования Redis в Symfony4


В распределённых системах всё чаще используются облачные решения для обработки пользовательских сессии. И хорошим инструментом для этого будет Redis. Даже просто по той простой причине что скорость обращения к данным намного выше чем к файлам на диске, где PHP по умолчанию хранит сессии, а там где надо будет иметь несколько серверов с единым хранилищем, то без этого не обойтись.

Настроим php-cli в контейнере с composer:

#php-cli.docker

FROM php:7.2-cli

RUN apt-get update && apt-get install -y libpq-dev zlib1g-dev zip \
    && docker-php-ext-install zip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/bin --filename=composer --quiet

ENV COMPOSER_ALLOW_SUPERUSER 1

WORKDIR /app

# docker-compose.yml:

version: '3'
services:
# ...
    app-php-fpm:
        build:
            context: # path to dockerfile
            dockerfile: php-fpm.docker # там образ, например: FROM php:7.2-fpm и остальные утилиты для работы sf4
        volumes:
            - ./your-dir:/app
        depends_on:
            - app-redis
    app-php-cli:
        build:
            context: # path to dockerfile
            dockerfile: php-cli.docker
        volumes:
            - ./your-dir:/app
            - composer:/root/.composer/cache
        depends_on:
            - app-redis
    app-redis:
        image: redis:3.0-alpine
        volumes:
            - app-redis:/data
        command: redis-server --requirepass secret
# ...

volumes:
    app-redis:
    composer:

Подтягиваем в проект библиотеку:

docker-compose run --rm app-php-cli composer require predis/predis

Конфигурация SF4

#/config/services.yaml
services:
    # ...
    Predis\Client:
        arguments:
            - '%env(REDIS_URL)%'

    Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
        arguments:
            - '@Predis\Client'
# config/packages/framework.yaml
framework:
    # ...  
    session:
        handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler
# .env

#...

REDIS_URL=tcp://app-redis:6379?password=secret

Проверим:

docker-compose exec app-redis redis-cli -a secret --stat

Если всё нормально, то теперь симфони будет использовать специальный RedisSessionHandler который по умолчанию встроен в четвертую версию фреймворка и вынесен в конфигурацию для управлениями пользовательскими сессиями.



Похожие заметки:

Настройка локального сервера в Ubuntu

Краткая заметка по развертыванию LEMP стека в Ubuntu, конфигурировании хостов и пример некоторых конфигов nginx

Открыть здесь

Установка LEMP c xdebug в Docker

Пример конфигурации для стека nginx, php-fpm+xdebug, mysql и настройка PhpStorm для работы с xdebug в докер контейнере

Открыть здесь


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии