はじめに
この記事では、Docker上でLiteSpeedを使ってLumenを動かすことを目標にします。
Lumen
Lumen
LumenはLaravelが作っている(?)、PHPのWebフレームワークで、Laravelより軽いことをウリにしているフレームワークです。
Lumenのアプリを作成する
# lumen installer のインストール $ composer global require "laravel/lumen-installer" # global require すると ~/.composer/vendor/bin 以下にバイナリが置かれるので、 # PATHを通しておく $ lumen --version Lumen Installer 1.1.1 $ lumen new lumen-litespeed
Lumenのアプリを動作確認してみる。
php -S localhost:8080 -t public
Lumen の質素なページが見られます。

Docker LiteSpeed
LiteSpeed とは
LiteSpeedはApache的なやつです。早いのがウリらしいです。
Docker の LiteSpeed イメージ
今回は https://github.com/phpearth/docker-php の 7.3-lightspeed というやつを使うことにします。 README には 7.4 にもありそうな書き方がしてありますが、まだ 7.4 はありませんでした。
docker-compose を使います。とりあえず最小構成で。
version: '3'
services:
app:
image: phpearth/php:7.3-litespeed
ports:
- "7080:7080"
- "8088:8088"
- ポート 7080 は Lumen の管理ツールのポート
- ポート 8088 は Lumen の普通のポートです
これで docker-compose up -d します。
http://localhost:8088/にアクセスするとWebページが見られます。

http://localhost:7080にアクセスするとLumenの管理ツールが見られます。今回はこれは使いません。

Docker LiteSpeed ファイル構造
/etc/litespeed/httpd_config.conf がおおもとのconfigファイルです。
この中で virtualHost Example が定義されています。
ここに定義されている通り、
virtualHost Exampleに対応する設定ファイルは/etc/litespeed/vhosts/Example/vhconf.confvhRootが/var/lib/litespeed/Example
になります。
virtualHost Example{
vhRoot $SERVER_ROOT/Example/
allowSymbolLink 1
enableScript 1
restrained 1
maxKeepAliveReq
smartKeepAlive
setUIDMode 0
chrootMode 0
configFile $SERVER_ROOT/conf/vhosts/Example/vhconf.conf
}
/etc/litespeed/vhosts/Example/vhconf.conf を見ると docRoot $VH_ROOT/html/ とあるので、これがドキュメントルートになります。
これ以外にも色々設定が書いてあります。
Lumen のための設定
まず docker-compose.yml のようにします。
version: '3'
services:
app:
image: phpearth/php:7.3-litespeed
ports:
- 7080:7080
- 8088:8088
volumes:
- ./lightspeed/vhosts:/etc/litespeed/vhosts
- .:/var/lib/litespeed/Example
で、 lightspeed/vhosts/vhconf.conf に以下のように設定する
# public にアクセスが行くようにする
docRoot $VH_ROOT/public/
enableGzip 1
expires {
enableExpires 1
}
# これはなくてもいいかも
indexFiles index.html, index.php
errorPage 404{
url /error404.html
}
errorlog $VH_ROOT/logs/error.log{
logLevel DEBUG
rollingSize 10M
useServer 1
}
accessLog $VH_ROOT/logs/access.log{
compressArchive 0
logReferer 1
keepDays 30
rollingSize 10M
logUserAgent 1
useServer 0
}
# Lumenでhtaccessを利用する
# LiteSpeedはhtaccessがそのまま使える
htAccess {
accessFileName .htaccess
allowOverride 1
}
hotlinkCtrl {
suffixes gif, jpeg, jpg
allowedHosts
allowDirectAccess 1
enableHotlinkCtrl 0
onlySelf 1
}
# これ忘れないように
accessControl {
deny
allow *
}
general {
enableContextAC 0
}
これでdocker-compose up -d して http://localhost:8088/ にアクセスすると先程の Lumen のレスポンスが見られます。
まとめ
Docker で phpearth の lightspeed のイメージを利用して Lumen のアプリケーションを動かすまででした。