如何在php fpm容器中创建用户会话卷?
我的网站基于docker容器中的代码,docker文件如下:如何在php fpm容器中创建用户会话卷?,php,laravel,session,docker,Php,Laravel,Session,Docker,我的网站基于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
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会话,我想将它们添加到卷中,但我没有找到它们。
My php.ini:
session.save_handler = files
session.use_cookies = 1
session.cookie_path = /
我使用Laravel framework,我的sessions.php配置有:
'driver' => 'file',
'files' => storage_path('framework/sessions'),
'path' => '/',
卷到路径框架/会话没有帮助当您运行
php artisan key:generate
时,它会为应用程序密钥生成新值。您可以在.env文件(项目根目录)中看到它的值
应用程序密钥用于加密和解密会话数据(以及其他内容),因此当您再次生成密钥时,laravel无法访问以前的会话数据
如果您将docker卷用于会话文件,但是APP_KEY发生了更改,则storage/framework/sessions中的会话文件将变得无用
通过登录本地网站,运行命令php-artisan-key:generate
,并刷新页面,这很容易在本地进行测试。您将被注销
要解决会话问题,请在每次创建容器时使用相同的APP_键
您可以将key作为环境变量传递给docker run-e APP_key=''…,但需要启用
注意:即使您使用不同的会话驱动程序(redis、数据库、memcached等等),键也应该保持不变
更多关于
Laravel安装文档
有关的更多信息当您运行
php artisan key:generate
时,它会为应用程序密钥生成新值。您可以在.env文件(项目根目录)中看到它的值
应用程序密钥用于加密和解密会话数据(以及其他内容),因此当您再次生成密钥时,laravel无法访问以前的会话数据
如果您将docker卷用于会话文件,但是APP_KEY发生了更改,则storage/framework/sessions中的会话文件将变得无用
通过登录本地网站,运行命令php-artisan-key:generate
,并刷新页面,这很容易在本地进行测试。您将被注销
要解决会话问题,请在每次创建容器时使用相同的APP_键
您可以将key作为环境变量传递给docker run-e APP_key=''…,但需要启用
注意:即使您使用不同的会话驱动程序(redis、数据库、memcached等等),键也应该保持不变
更多关于
Laravel安装文档
更多关于的信息,您可以使用Redis来做这类事情,因为无论您是否拥有卷……当您将“重新创建”容器时……显然,正在运行的容器将重新启动。您可以使用卷,但是,您还需要进行滚动升级:)您是否可以尝试将session.save_path(如果您无法识别位置)设置到所需的位置,然后将装入的卷使用到指定的路径?您可以使用Redis来执行这类操作,因为不管您是否拥有卷……当您将“重新创建”容器时……显然,正在运行的容器将重新启动。您可以使用卷,但是,您还需要进行滚动升级:)是否可以尝试将session.save_path(如果您无法识别位置)设置到所需的位置,然后将装入的卷使用到指定的路径?