PHP

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 を使っています。便利です。

docker-phd-ja の文字化けを修正したり、イメージを分割したり

引き続き docker-phd-ja (PHPマニュアル日本語版ビルド用Dockerイメージ)の改善を進めています。今日は下記の3点を主に進めました。

日本語の文字化けを修正

Dockerコンテナに入って vim で日本語マニュアル用のソースファイルを開いたら、思いっきり文字化けしていることに気づきました。完全にチェック漏れです。

解決のため、locales-all パッケージを入れて LANG を設定しました。修正前に試そうとしてくださった方、申し訳ありません。

イメージの分割

CircleCI でのビルドに少し時間がかかっていたので、テストに関係ない部分を別イメージに切り出しました。具体的には Subversion からのチェックアウト部分です。

ビルドの速度を追求するなら nginx のインストールなども別イメージのほうに移すべきなのですが、CI に特化したイメージを作るのは主客転倒な気がしています(もっと遅くなったら考えが変わるかもしれません)。「特定リビジョンのソースがチェックアウトされたイメージ」なら論理的な意味があると思い、それにとどめました。

Docker Hub リポジトリの再作成

CircleCI の利用によりオートメーションビルドではなくなったのですが、Docket Hub 上ではオートメーションビルド扱いのままだったので、いったん削除して通常のリポジトリとして再作成しました。

プロフィール
知識欲と謎解き欲が旺盛なWebエンジニア。AWS認定ソリューションアーキテクト - アソシエイト。JAPAN MENSA会員
記事検索