[英]How volume user session in php-fpm container?
我的网站基于带有docker文件的docker容器内的代码:
FROM php:7.1-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql opcache gd
#ADD php.conf/opcache.ini /etc/php/7.1/mods-available/opcache.ini
ADD build/prod/php.conf/www.conf /usr/local/etc/php-fpm.d/
ADD build/prod/php.conf/php.ini /usr/local/etc/php/
COPY . /app
WORKDIR /app
RUN chmod 777 -R storage/
RUN php artisan cache:clear && php artisan key:generate
RUN nohup php artisan queue:work &
我建立CI流程只是用代码创建新的应用程序容器并杀死旧的。 但是,每次进行此类“娱乐”后,登录的用户都将注销。 我确定这是由于旧容器包含PHP会话,我想将它们添加到卷中,但是我无法找到它们。 我的php.ini:
session.save_handler = files
session.use_cookies = 1
session.cookie_path = /
我使用Laravel框架,我的sessions.php配置具有:
'driver' => 'file',
'files' => storage_path('framework/sessions'),
'path' => '/',
路径到框架/会话的数量无济于事
当您运行php artisan key:generate
,它将为APP_KEY生成新值。 您可以在.env文件(项目根目录)中看到它的值
APP_KEY用于加密和解密会话数据(和其他内容),因此当再次生成密钥时,laravel无法访问先前的会话数据。
如果您将Docker卷用于会话文件,但是APP_KEY更改,则来自存储/框架/会话的会话文件将变得无用
通过登录到本地网站,运行php artisan key:generate
命令并刷新页面,可以轻松地在本地进行测试。 您将被注销。
为了解决会话问题,每次创建容器时都使用相同的APP_KEY 。
您可以将密钥作为环境变量传递给docker run -e APP_KEY='<key-here>' ...
,但是您需要启用环境变量
注意:即使您使用其他会话驱动程序(redis,数据库,memcached等),密钥也应保持不变。
有关Laravel应用密钥的更多信息-它是什么以及它如何工作?
Laravel安装文档Application Key
有关Laravel会议的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.