私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

Heroku でシンプルな PHP サイトを作る

ここしばらく、レンタルサーバ中心で開発・提供してきた個人サイトの数々を整理統合する作業をしてます。その一環で、とある PHP 製サイトを Heroku の無料プランに移行してみることにしました。公式のチュートリアルに従って手順を学んだのですが、Silex アプリのボイラープレートを git clone して作業を進めるというのはブラックボックスっぽいというか、いまいち理解に繋がる感じがしなかったので、フレームワーク頼りではなく古典的なスクリプトレットのサイト開発を手作業でひとつずつ進めるやりかたにブレイクダウンしてみました。「Heroku アプリを作る」件だけにフォーカスしたいので、下記を前提にしています。

  • Heroku アカウントを持っている。
  • ローカル環境に Heroku CLIPHP、Composer、Git がインストールされており、使える状態になっている。またそれらについての最低限の知識を持っている。

さて、Heroku で PHP サイトを構築するには、ざっくり言って下記要件が必要なようです。

  • サイトのドキュメントルートとなるディレクトリを作り、そこのプログラムを配置する。
  • モジュールやライブラリの類は Composer で用意する。
  • Heroku のコンテナに指示をする Procfile というファイルが必要。
  • 一式は Git リポジトリ化されており、リモートリポジトリは Heroku を指している。

これらをステップ・バイ・ステップで手作業してみます。macOS 等の Unix 系 OS を対象とした記述になっていますので、Windows の方は適宜読み替えて下さい。まず、ローカル環境の適当な場所にプロジェクトディレクトリを構築。

mkdir -p heroku-php-site/web
cd heroku-php-site/

Heroku のコンテナで使われるモジュールを Composer でインストール。

composer require --dev heroku/heroku-buildpack-php

これで、composer.json, composer.lock, vendor/ が出来ていれば OK。次に PHP アプリファイルを作成。シンプルに phpinfo() を実行するだけのページ1枚だけです。

cat << EOS > web/index.php
<?php
phpinfo();
EOS

Procfile を作成します。

cat << EOS > Procfile
web: vendor/bin/heroku-php-apache2 web/
EOS

Git 管理から外すファイル・ディレクトリも明記。

cat << EOS > .gitignore
vendor/
.env
EOS

これで一式が揃ったので、ビルトインサーバで動作確認。

php -S 0.0.0.0:8080 -t web

ブラウザで http://localhost:8080/ を開き、phpinfo() 出力が表示されていれば OK。

以上でアプリ開発(笑)が完了したので、ここから Heroku にデプロイする手順に入ります。Git ローカルリポジトリを作成。ブランチはデフォルトのまま main が良いようなので、古い git を使っている方はご用心。

git init
git add .
git commit -m "最初のコミット"

事前にブラウザで Heroku ダッシュボード( https://dashboard.heroku.com/ )にログインしておいてから、下記手順でアプリをデプロイします。heroku create の際にはアプリ名を指定しないとランダムな名称が付与されるので、ここでは my-simple-php としておきます。

heroku login
heroku create my-simple-php
git push heroku main

これでデプロイが完了したので、ブラウザで動作確認してみます。

heroku open

ローカルの時と同様、https://my-simple-php.herokuapp.comphpinfo() 出力が表示されていれば OK。

以上です。あとは必要に応じてプログラムを改修し、git push heroku main でデプロイという繰り返しになります。