🐳

超高速Webサーバー「LiteSpeed」をDockerで試してみる

2024/11/02に公開
2

この記事は、MacBook Air M1 に、Docker版のOpenLiteSpeed Arm版をインストールした奮闘記である。

LiteSpeedとは?

概要は、以下の記事に移動しました。
https://zenn.dev/tomoakinagahara/articles/7c31d6d1fc828a

Debianへのインストール奮闘記は、以下の記事に移動しました。
https://zenn.dev/tomoakinagahara/articles/81f132967e0795

LiteSpeedのセットアップ

Dockerのインストール

sudo port install docker

Dockerイメージのダウンロード

docker pull litespeedtech/litespeed

ダウンロード済のイメージの確認

docker images

LiteSpeedの起動

docker run -d --name litespeed -p 8088:8088 -p 7080:7080 litespeedtech/litespeed

プラットフォームが違うというエラーが表示される

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
72942972456e4a8d5df58dcede0656f895a9428af6471f2ba0b734a5e6ae44ef

ARM用のイメージを取得する

docker pull --platform linux/arm64/v8 litespeedtech/litespeed

すると、以下のエラーが表示される

Using default tag: latest
latest: Pulling from litespeedtech/litespeed
Digest: sha256:384043d7fa8f0ece3cc743fcc58ef69d68e5547358f1af6be0a231aff547ee08
Status: Image is up to date for litespeedtech/litespeed:latest
image with reference docker.io/litespeedtech/litespeed:latest was found but does not match the specified platform: wanted linux/arm64/v8, actual: linux/amd64

arm64には対応していないらしい。はい、終了。解散。

LiteSpeedのDockerイメージを削除する

イメージを削除する

  • イメージのIDを調査
    docker images
    
  • イメージのIDを指定して削除
    docker rmi [イメージID]
    
    ランニング中なので削除できない
    Error response from daemon: conflict: unable to delete 503dbb5dd11c (cannot be forced) - image is being used by running container 72942972456e
    
  • ランニング中のイメージを調査
    docker ps
    
  • イメージの停止
    docker stop [コンテナーのIDかコンテナーの名前]
    
  • イメージの削除
    rmiは、ReMoveImageの略。
    docker rmi [イメージID]
    
    イメージが停止していても、コンテナーでまだ使用されているため削除できない。
    停止しているコンテナーを削除するか、イメージを強制削除する。
    Error response from daemon: conflict: unable to delete 503dbb5dd11c (must be forced) - image is being used by stopped container 3ebe0212a56c
    
  • コンテナーの削除
    docker rm [コンテナーのIDかコンテナーの名前]
    
  • イメージの削除
    docker rmi litespeedtech/litespeed
    

公式ドキュメントにarm64用のダウンロード先があった

コメントで教えて貰いました。(ありがたい)
https://docs.litespeedtech.com/cloud/docker/openlitespeed/#download-an-image

  1. arm64用のイメージをダウンロードする
    docker pull ghcr.io/ndigitals/openlitespeed:latest
    
  2. 起動する
    docker run --name openlitespeed -p 7080:7080 -p 80:80 -p 443:443 -it ghcr.io/ndigitals/openlitespeed:latest
    
    既に他のWebサーバーが起動していると、80番や443番のポートが使用されているため、エラーになるかもしれない。
    docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:443 -> 0.0.0.0:0: listen tcp 0.0.0.0:443: bind: address already in use.
    
    コンテナ名をlitespeedで作成したので、次回はコンテナ名の指定で起動できる。
    docker start litespeed
    
  3. sshでログイン
    docker exec -it openlitespeed /bin/bash
    
  4. 管理画面にアクセスする
    http://[IPアドレス or ホスト名]:7080
    
    ユーザー名はadminだが、パスワードが未設定なのでログインできない。
  5. パスワードを設定する
    1. コンテナーにログインする:docker exec -it openlitespeed /bin/bash
    2. パスワードの設定:/usr/local/lsws/admin/misc/admpass.sh
  6. 再度管理画面にアクセスする

LiteSpeedの管理画面の使い方

詳細は以下の記事に移動した。エディターは、vinanoもインストールされていないので、apt install nanoなどでインストールしておくとよい。
https://zenn.dev/tomoakinagahara/articles/3bfdff21ffd5ba

.htaccess

Apacheで使っている.htaccessをそのまま使っても動かない。具体的には、

  • RewriteBaseを認識していない(これはサポートして欲しい❗️)
  • DirectoryIndexErrorDocumentRedirectMatchはエラーなる
  • <IfModule><File><FilesMatch><Directorymatch>もエラーになる

エラーログ /usr/local/lsws/logs/error.log をチェックして、動かない理由を潰す必要がある。ちなみにエラーログには、こいつ大丈夫か?と思うくらい大量にエラーが出力される。

  1. Server Configuration から General タブを選択
  2. Rewrite ControlAuto Load from .htaccessYes にしただけではダメ🙅
  3. Virtual Hosts から仮想ホストの設定を編集する必要がある
  4. 仮想ホストの設定から Rewrite タブを選択し Auto Load from .htaccessYes にする
  5. LiteSpeedを再起動する

Rewrite(mod_rewrite)

URLのRewriteだけなら、.htaccess を使わずに、LiteSpeed標準の Rewrite を使った方が良いかもしれない。

ApacheのRewrite Ruleの完全互換ではない。

  • RewriteBaseを認識していない(これはサポートして欲しい❗️)

設定方法

  1. 仮想ホストの設定から Rewrite タブを選択する
  2. Enable RewriteYes にする
  3. Rewrite Rules に リライトルールを書く
  4. LiteSpeedを再起動する

PHPのバージョンを7.4から8.3に変更する

以下の記事を参照。
https://zenn.dev/tomoakinagahara/articles/3bfdff21ffd5ba

デフォルトページをindex.htmlからindex.phpに変更する

  1. Server Configuration > General を選択
  2. Index Filesを変更する

最後に使ってみた感想

めちゃくちゃいい❗️❗️
感動するので是非使ってみて下さい❗️❗️

Discussion