PHP

docker-phd-ja、進捗を色付き表示させたり、PHP 7系に移行したり

PHPマニュアル日本語版ビルド用Dockerイメージ、ブラウザだけでビルドできるようにしたのは既報の通りですが、進捗が色付きで表示されるようになりました。

phd-build-color

だんだんそれっぽくなってきましたね。E_WARNING が出ているのは、ビルドツール(PhD)のバグが原因のようです。しばらく待っても直らないようなら、くわしく調べてみます。

その他の変更点

PHP を 5.6.36 から 7.2.6 に移行しました。「PHP manual generate HOWTO (version 2018-06-16) - mumumu の日記」で、PHP 7系でも問題なくビルドできると知ったためです。

また、内部的な話ですが、nginx や supervisor などのインストール処理をベースイメージ側に移動しました。

4日前の記事で:

ビルドの速度を追求するなら nginx のインストールなども別イメージのほうに移すべきなのですが、CI に特化したイメージを作るのは主客転倒な気がしています(もっと遅くなったら考えが変わるかもしれません)

と書いたものの、だんだんビルドの遅さが気になるようになりました。イメージ分割の論理性にこだわる必要はないと判断し、あっさり移した次第です。

関連リンク

docker-phd-ja、ブラウザでPHPマニュアルがビルドできるようになりました

開発中のPHPマニュアル日本語版ビルド用Dockerイメージで、Webアプリ経由でのビルドが可能になりました。

実際に動かした結果がこれです。

色指定部分が化けていますが、別途修正予定です。

ビルドだけでなく、ソースのチェックアウトと、PhDの設定ファイル更新もできるようにしました。

試してみる

試したい方は下記の手順でどうぞ。Docker がインストールされていれば、すぐ動かせます。

docker pull iwamot/phd-ja
docker create -it -p 8080:80 --name phd-ja iwamot/phd-ja
docker start phd-ja

その後 http://localhost:8080/phd-ja-admin/ の管理画面にアクセスすると、現状では下記のボタンが表示されます。

「Build documentation」ボタンを押すと、ビルドが始まります。冒頭の画像のようになれば成功です。

ビルドされたマニュアルは http://localhost:8080/phd-ja/ で参照できます。

Docker コンテナがいらなくなったら、下記の手順で削除できます。

docker stop phd-ja
docker rm phd-ja

管理画面のTODO

  • 各コマンドの実行完了をわかりやすくする(Notifications API を使う?)
  • 色指定が化けないようにする(指定色で表示させる)
  • ファイルの編集を可能にする(テキストエリアにペーストして保存できるだけでも便利)
  • デザインをきれいにする(いかにも管理画面っぽい感じに)

技術的なメモ

  • Webサーバ上のPHPから外部コマンドを実行するために sudo を使っている
    • 初回実行時のパスワード入力をイメージ側で済ませている
    • 実行可能なコマンドは /etc/sudoers.d/phd-ja で制限している
      • /etc/sudoers.d/ 配下にドットを含むファイルを置いても無視されることに注意
  • nginx の出力バッファリングを無効にするために「X-Accel-Buffering: no」ヘッダを出力している
  • タイムアウトを避けるため、nginx の設定で「fastcgi_read_timeout 300;」を指定している

詳細はコミットをご参照ください。

関連リンク

ブラウザでPHPマニュアルがビルドできたら便利ですよね?

開発を進めている docker-phd-ja (PHPマニュアル日本語版ビルド用Dockerイメージ)、PHPアプリケーションが動かせるようになりました

まだ実装できていませんが、将来的にはブラウザだけで「ソースファイルの更新 → ファイルの編集 → ビルド」ができるようにしたいと思っています。

ちなみに、ひとつのコンテナで PHP-FPM と nginx を連携させることにしたのは、下記の理由からです。

  • Docker イメージの pull だけですぐに使えるようにしたかった(複数コンテナにはできない)
  • apache を試したら重かった(やっぱり nginx がいい)

ひとつのコンテナで複数のプロセスを起動するために Supervisor を使っています。便利です。

プロフィール
Web開発者。現在の関心事はシステム品質の改善(特に性能効率性と保守性)。JAPAN MENSA会員。
カテゴリ別アーカイブ
記事検索