PHP
Heroku
Paas
Docker

0から始める!HerokuでPHPを動かす方法 with Docker

More than 1 year has passed since last update.

Heroku上でPHPを動かす方法をまとめました。後半、Composerからライブラリの追加を行うところでDockerを使っています。Docker自体のインストールは先に行っておいてください。


Herokuアカウント

すでにHerokuのアカウントをお持ちであればスキップしてください。

Herokuのアカウントをここで作ります。

Heroku Sign up


Heroku CLIのインストール

以下からHeroku CLIをインストールします。OSによって異なりますので適宜インストールしてください。

https://devcenter.heroku.com/articles/heroku-cli

こちらの手元の環境では、elementary OSを使っており、

$ curl https://cli-assets.heroku.com/install-ubuntu.sh | sh

というコマンドではインストールに失敗しましたので、深く考えず、

$ sudo apt install heroku

でインストールを行いました。


サンプルプロジェクト

Heroku側で用意しているPHP用のプロジェクトを使います。

$ git clone https://github.com/heroku/php-getting-started.git

$ cd php-getting-started

分かりやすいディレクトリ構成になっています。

$ ls

app.json composer.json composer.lock Procfile README.md web
$ ls web/
images index.php stylesheets views

index.phpファイルはSilexというマイクロフレームワークを使っていました。composer.jsonに好きなフレームワークを入れて使えば良いかと思います。


Herokuでのアプリ作成とデプロイ

下記のようにHerokuにアプリを作ります。createコマンドへ渡す引数はアプリ名になりますので何か付けてください。引数を渡さなくとも構いませんが、その場合、Heroku側で適当な名前が付けられます。

$ heroku create kyogoku-web

Creating ⬢ kyogoku-web... !
▸ Invalid credentials provided.
Enter your Heroku credentials:
Email: (Herokuアカウントのメールアドレス)
Password: (パスワード)
Creating ⬢ kyogoku-web... done
https://kyogoku-web.herokuapp.com/ | https://git.heroku.com/kyogoku-web.git

Herokuへのデプロイを行います。Gitを使ってHeroku上のmasterブランチにプッシュすれば良いだけです。

$ git push heroku master

Counting objects: 178, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (95/95), done.
Writing objects: 100% (178/178), 48.02 KiB | 0 bytes/s, done.
Total 178 (delta 69), reused 178 (delta 69)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote: NOTICE: No runtime required in composer.json; requirements
remote: from dependencies in composer.lock will be used for selection
remote: - php (7.2.5)
remote: - nginx (1.8.1)
remote: - apache (2.4.33)
remote: -----> Installing dependencies...
remote: Composer version 1.6.4 2018-04-13 12:04:24
remote: Loading composer repositories with package information
remote: Installing dependencies from lock file
remote: Package operations: 12 installs, 0 updates, 0 removals
remote: - Installing psr/log (1.0.2): Downloading (100%)
remote: - Installing monolog/monolog (1.22.1): Downloading (100%)
remote: - Installing symfony/routing (v3.2.7): Downloading (100%)
remote: - Installing symfony/polyfill-mbstring (v1.3.0): Downloading (100%)
remote: - Installing symfony/http-foundation (v3.2.7): Downloading (100%)
remote: - Installing symfony/event-dispatcher (v3.2.7): Downloading (100%)
remote: - Installing symfony/debug (v3.2.7): Downloading (100%)
remote: - Installing symfony/http-kernel (v3.2.7): Downloading (100%)
remote: - Installing pimple/pimple (v3.0.2): Downloading (100%)
remote: - Installing silex/silex (v2.0.4): Downloading (100%)
remote: - Installing twig/twig (v2.3.0): Downloading (100%)
remote: - Installing symfony/twig-bridge (v3.2.7): Downloading (100%)
remote: Generating optimized autoload files
remote: -----> Preparing runtime environment...
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 15.6M
remote: -----> Launching...
remote: Released v3
remote: https://kyogoku-web.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/kyogoku-web.git
* [new branch] master -> master

以下のコマンドでブラウザを開きます。

$ heroku open

ブラウザが開き以下のような画面になっていればオッケーです。

Screenshot from 2018-04-27 09.31.06.png


Composerのローカルでの使用

最後に、Composerをローカル環境で使う方法を説明します。

PHPとComposerが必要なので、今回以下のDockerイメージを使ってみます。

https://hub.docker.com/_/composer/

以下のコマンドを実行してcomposerのバージョンを確認します。初回実行時は、Dockerイメージの取得から始まるため、少し時間がかかります。

$ docker run --rm composer -v

______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.6.1 2018-01-04 14:45:25

ついでに、PHPのバージョンもチェックしましょう。

$ docker run --rm composer php -v

PHP 7.2.1 (cli) (built: Jan 10 2018 02:20:55) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies

PHP7とComposer(ver. 1.6.1)が手に入りました。

例えばライブラリの追加は、以下のような感じで、composer.jsonとcomposer.lockファイルをアップデートします。Gitでのプッシュを先ほどと同じように行えば良いので、この辺は通常のPHPでのウェブアプリケーション開発と同じです。

docker run --rm --volume $PWD:/app composer require <ライブラリ名>

Herokuをとりあえず試してみたいという場合には、上記の方法でライブラリを入れてみたり、index.phpファイルをいじったりすれば良いと思いますし、以下のコマンドで直接ログインも可能です。

$ heroku run bash

Running bash on ⬢ kyogoku-web... up, run.8863 (Free)
~ $ ls
Procfile README.md app.json composer.json composer.lock vendor web

本格的に開発をローカル上でも行いたいとなると、Dockerを使っての開発がおすすめですが、Heroku上の話から脱線するのと長くなるのでまた別の機会に。


まとめ

PHPをHeroku上で動かす作業は、Heroku側でサンプルプロジェクトを用意しているので思いの外簡単にできました。ぜひ遊んでみてください。