DockerでLiteSpeed Webサーバを構築してLaravelを実行する

新しいWebサービスを開発したいと思い、今回はWebサーバをLiteSpeedでやってみることにしました。
が、新しいことはおおよそハマるので、結局調査開始からLaravel稼働まで1週間ほど費やしてしまいした・・・

Dockerfileとdocker-composeについて

Docker Composeを利用して仮想サーバを管理します。
どちらのファイルも以下のGitHubから取得可能です。

今回のディレクトリ構成は、以下のような感じです。

Docker buildからlaravelを動かすまで

イメージのビルド

docker-compose.ymlファイルがあるディレクトリへ移動し、以下のコマンドでイメージのビルト、コンテナの起動を行います。

$ docker-compose build
$ docker-compose up -d

litespeed管理画面へのログイン

コンテナが無事に起動したら、コンテナにログインし、初期パスワードを確認します。

$ winpty docker-compose exec web bash
[root@6c71de6daed0 lsws]# cat /usr/local/lsws/adminpasswd

初期パスワードを確認したら、以下のURLから管理画面にログインします。
https://localhost:7080/login.php

初回アクセス時、SSL証明書の警告が表示されますが、自身の開発サーバなので構わずアクセスします。

php7.4のインストール、バーチャルホスト、リスナーの設定

デフォルトでphp7.3が入っていましたが、せっかくなのでphp7.4のバイナリをインストールします。
Dockerfileでは、php7.4バイナリのインストールに必要なパッケージも同時にインストールしています。
具体的な手順は、下記画像を参照してください。

phpのコンパイルシェルはセキュリティの関係でターミナルから実行してくれとのこと。
といっても、親切に実行シェルがフルパスで書いてあるので、コンテナに接続後、コピペしてエンターを押せばよいだけです。

上記表示になればコンパイル終了です。画面的にはあと1ステップ残ってそうですが、作業はこれで終わりです。

バーチャルホストの作成

laravel実行用にバーチャルホストを作成します。下記画像を参照してください。

画面に映っている部分以外はすべてデフォルトです

保存時にファイルがないエラーが出ますが、CLICK TO CREATE をクリックしファイル作成後に再度保存すれば大丈夫です。

リスナーの作成

ユーザーからのアクセスを受け付けるためのリスナーを作成します。設定は画像をば・・・

バーチャルホストで利用するphpバージョンを指定

デフォルトでphp7.4を利用するように設定を変更します。

設定を保存し、以下のURLにアクセス。
http://localhost:8088/

Test PHPでバージョンが7.4.3になっていることが確認できます。

Laravelを動かす

設定ファイル系をlaravel用に書き換えます。
(GUIからの変更方法がわからなかったので、ターミナルから直接編集しました)

Example バーチャルホストを参考に、以下の設定を挿入
編集ファイルは「/usr/local/lsws/conf/vhosts/laravel/vhconf.conf」です。

docRoot $VH_ROOT/public

context / {
  allowBrowse 1
  location $DOC_ROOT/
  rewrite  {
    RewriteFile .htaccess
  }
}

.htaccessにlaravel公式のリライト設定を挿入します。
ファイルの場所は「/var/www/laravel/public/.htaccess」ですね。
litespeedはapacheのリライトと互換性があるとのことで、apache用の設定がそのまま使えます。

Options +FollowSymLinks -Indexes
RewriteEngine On

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

ファイル設定後はGUIから再起動を行います。

後は、laravelプロジェクトを作成し、ホスト側のlaravelアプリケーションディレクトリにファイルを設置します。
今回はlaravel 配下に設置すればOK

やっとLaravelのデフォルト画面が拝めます

以上の設定でlitespeedでlaravelアプリが動くはずです。以下のURLにアクセスし、画面が表示されるか確認します。
http://localhost:8080/

やっとlaravelアプリが動きました! 隙間時間とはいえ、調査に1週間、この記事を書くのに3時間・・・長かった。

でも、使うかどうかはわかりません

まだ解決していない問題として、「サーバ設定の永続化」が残っています。
Dockerはご存じの通り、コンテナを破棄すれば内部のデータは消えてしまいます。そのためにVolumeなどを設定しデータの永続化を行いますが、litespeedはどこを永続化すればよいのかいまだにわからず・・・
今回行った設定も、コンテナを破棄したときに一緒に消えてしまうのです。
もうしばらく調べて、わからなかったらnginx続投かな・・・