猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

Laravelより早いLumenとLiteSpeedを組み合わせてDocker上で動かす

はじめに

この記事では、Docker上でLiteSpeedを使ってLumenを動かすことを目標にします。

Lumen

Lumen

LumenはLaravelが作っている(?)、PHPのWebフレームワークで、Laravelより軽いことをウリにしているフレームワークです。

lumen.laravel.com

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 の質素なページが見られます。

Lumenの質素なページが表示される
Lumenの質素なページが表示される

Docker LiteSpeed

LiteSpeed とは

LiteSpeedはApache的なやつです。早いのがウリらしいです。

Docker の LiteSpeed イメージ

今回は https://github.com/phpearth/docker-php7.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ページが見られます。

Lumenのデフォルトのページ
Lumenのデフォルトのページ

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

Lumenの管理ツールのページ
Lumenの管理ツールのページ

Docker LiteSpeed ファイル構造

/etc/litespeed/httpd_config.conf がおおもとのconfigファイルです。

この中で virtualHost Example が定義されています。

ここに定義されている通り、

  • virtualHost Example に対応する設定ファイルは /etc/litespeed/vhosts/Example/vhconf.conf
  • vhRoot/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 のアプリケーションを動かすまででした。