Help us understand the problem. What is going on with this article?

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側でサンプルプロジェクトを用意しているので思いの外簡単にできました。ぜひ遊んでみてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした