猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

DockerでHerokuにPHPとLiteSpeedのアプリをデプロイしようとしたけど無理だった

f:id:yoshiki_utakata:20190209091912p:plain

Herokuのアプリケーションを作成する

Create new app する
Create new app する

Deployment Method で Container Resigtry を選択

Deploy の Deployment Method から Container Registry を選択する
Deploy の Deployment Method から Container Registry を選択する

Deploy your Docker-based app の通り実行

Heroku CLI (Herokuのコマンド) はインストールされているとします。

# CLI から Heroku にログイン
heroku login

# Heroku の Container Registry にログインする
heroku container:login

Dockerfile の作成

今回はこのような Dockerfile を作成した。

FROM phpearth/php:7.3-litespeed

COPY ./lightspeed/vhosts /etc/litespeed/vhosts
COPY . /var/lib/litespeed/Example

# アプリケーションがリクエストを受けるべきポートが
# 環境変数 $PORT として Heroku から与えられるので
# その $PORT で起動できるようにしておく必要があります
# 今回はsedで無理やり LiteSpeed の設定ファイルを書き換えることにした
COPY ./litespeed/httpd_config.conf /tmp/httpd_config.conf
RUN sed -e "s/8088/${PORT}/g" /tmp/httpd_config.conf > /etc/litespeed/httpd_config.conf

Docker イメージのビルドとpush

下記コマンドを叩くだけで Dockerfile を元にビルド&pushまでやってくれます。

  • web は web サーバーのイメージということを指しています(多分。この辺のオプションがよくわからなかった)
  • nicommon-zapping はアプリ名です
heroku container:push web -a nicommon-zapping

アプリ名とは

これです。

リリースコマンドの実行

heroku container:release web -a nicommon-zapping

デプロイできたはずだが...

アクセスしても 500 エラー。HerokuのActivityのログを見てもデプロイはされている様子。

デプロイはされている
デプロイはされている

ログを見ると

Herokuのログを見る
Herokuのログを見る

No web processes running と言われてしまっている。

2020-01-02T10:26:34.909079+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=nicommon-zapping.herokuapp.com request_id=ca9c6baa-bc33-4594-8f7b-39a4a3a0e5f0 fwd="126.23.166.85" dyno= connect= service= status=503 bytes= protocol=https
heroku ps:scale web=1

でもやっぱりなんかだめだった

結局

Procfile を書いてデプロイした!PHPとDockerとHerokuのかみ合わせが良くなかった。