【Docker】Adminerのセッション有効期限を延長する

PHP logo
Adminerを使いたいとき、ローカルのDockerでさくっと入れるとパッと使えてホント便利です。ただデフォルトの状態だとセッションが保存できなくて24分でログアウトしてしまうので、それだけなんとかしたい。






DockerでAdminerを使うときの設定

Dockerにこれを書くだけで動きます(ネットワークなどは環境に合わせて調整してください)。


  adminer:
   image: adminer:4.7.5
   restart: always
   ports:
     - 8080:8080


しかしこれだけだとセッション切れですぐにログアウトしてしまいます。セッションの設定を確認します。


$ php -i | grep session
(略)
session.cookie_lifetime => 0 => 0
(略)
session.gc_maxlifetime => 1440 => 1440
(略)
session.save_handler => files => files
session.save_path => /var/lib/php/session => /var/lib/php/session
(略)


これを見る限りでは、


  • セッションはブラウザを閉じると削除される
  • 開始から24分を過ぎたセッションは1/100の確率で削除される
  • セッションファイルは/var/lib/php/sessionに保管される


と設定されているようです。リモートではそのような運用があってもいいかなと思うのですが、ローカルでは少々不便です。有効期限を延長してみましょう。


php.iniファイルの場所を確認すると有効なphp.iniファイルは設定されていないようなので、ホストOSから送り込んでやります。


$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/0-upload_large_dumps.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini


やることは3つ。


  1. ブラウザを閉じてもセッションが保存されるようにする
  2. ガベージコレクションで削除される有効期限を延長する
  3. セッションファイルを保存するディレクトリを作成する


というわけで、こんな感じで設定してみます。



セッション用の追加設定

php.iniを作成

session.cookie_lifetime = 86400
session.gc_maxlifetime = 86400
session.save_path = /home/adminer/session

Dockerfileを作成

FROM adminer:4.7.5

RUN mkdir -p /home/adminer/session
RUN chmod 600 /home/adminer/session

docker-compose.ymlに追記

  adminer:
   build:
     context: .
     dockerfile: ./Dockerfile
   volumes:
     - ./php.ini:/usr/local/etc/php/php.ini
   restart: always
   ports:
     - 8080:8080



以上できちんとセッションが保存され、最低24時間は維持されるようになるはずです。