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つ。
- ブラウザを閉じてもセッションが保存されるようにする
- ガベージコレクションで削除される有効期限を延長する
- セッションファイルを保存するディレクトリを作成する
というわけで、こんな感じで設定してみます。
セッション用の追加設定
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時間は維持されるようになるはずです。