LoginSignup
45
36

More than 5 years have passed since last update.

Heroku(PHP+MySQL)でWebサービス公開手順

Last updated at Posted at 2019-04-05

はじめに

localhostでPHP+MySQLで開発したものを、Herokuで公開するためのもの
OS: mac
PHP: フレームワーク無し
DB: MySQL

1.Herokuに登録

https://www.heroku.com/
クレジットカードを登録しておきます。

2.Heroku CLIをインストール

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

$ heroku login

3.アプリ作成

ここではデスクトップにheroku-appというディレクトリを作ります。

$ cd Desktop
$ mkdir heroku-app
$ cd heroku-app

アプリを作成します。アプリ名を指定しない場合は自動で割り振られます。

$ heroku create アプリ名

4.composer

composer.jsonというファイルを作成します。

touch composer.json

phpのバージョン7を指定します。これが正しいのか分かりませんがこれで動きました。
"ext-mbstring": "*" とすることでmb_xxxの関数(mb_strlenとか)が使えるようになります。指定しないでmb_xxxの関数を使うとCall to undefined functionエラーになります。

composer.json
{
    "require": {
      "php": "~7.0",
      "ext-mbstring": "*"
    }
 }

デフォルトのPHPが入っていることが前提です。

$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

ターミナルを再起動して確認します。大丈夫ならインストールします。

$ cd Desktop/heroku-app
$ composer -v
$ composer install

5.Gitリポジトリ作成

$ git init
$ git remote add heroku https://git.heroku.com/アプリ名.git
$ git remote -v

6.ClearDBアドオンをインストール

herokuでmysqlを使うための設定です。

$ heroku addons:add cleardb:ignite

7.Workbenchをインストール、設定

Workbenchを使うことで、phpMyAdminのようにGUIでデータベースを管理できます。
インストールが完了したら赤枠で囲ったMySQL Connectionsの横の+をクリックして設定画面を開きます。
スクリーンショット 2019-04-05 18.18.34.png

heroku configコマンドでCLEARDB_DATABASE_URLを確認します。

$ heroku config

これを元に入力していきます。CLEARDB_DATABASE_URL: mysql://ユーザ名:パスワード@サーバ名/データベース?reconnect=true
Connection Name: 適当な名前
Hostname: サーバ名
Username: ユーザ名
Password: パスワード
Default Schema: データベース

入力を終えたら、Test Connectionをクリック→上で入力したパスワードを入力→Connection Warning画面が出る→Continue AnywaySuccessfully made the MySQL connectionOKOK

8.phpMyAdminからDBエクスポート→WorkbenchにDBインポート

phpMyAdminからエクスポート

phpMyAdminからエクスポートしたいDBを選択→詳細にチェック→出力をファイルに保存する実行

Workbenchにインポート

7.で設定したものに接続してAdministraionタブからData Import/RestoreImport from Self-Contained Fileにチェックを入れてphpMyAdminからエクスポートしたsqlファイルを選択します。
Default Target Schemaを指定します。newの方ではなくてセレクトメニューでデフォルトのものを指定します。
なぜかフリーズしたように?選択できないときがありますが、謎です。
最後にStart Importをクリックします。

9.PHPのDB接続設定を変更する

local用から本番用に書き換える必要があります。

function.php
function dbConnect(){
  $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']);
  $db['dbname'] = ltrim($db['path'], '/');
  $dsn = "mysql:host={$db['host']};dbname={$db['dbname']};charset=utf8";
  $user = $db['user'];
  $password = $db['pass'];
  $options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true,
  );
  $dbh = new PDO($dsn,$user,$password,$options);
  return $dbh;
}

10.herokuへデプロイ

$ git add -A
$ git commit -m "commit"
$ git push heroku master

heroku openでブラウザを開いて表示してくれます。localと同じようにDBのデータ等ちゃんと表示できていれば完了です。

$ heroku open

11.WorkbenchでDBの中身を確認する

赤枠で囲ったSchemasTables
スクリーンショット 2019-04-06 7.52.37.png
各テーブルにマウスホバーすると、右にアイコンが出る(赤枠で囲った所)ので一番右のカレンダーみたいなアイコンをクリックするとデータが確認できます。または、SQL文を打ち込んで雷アイコンを押してもデータ確認ができます。
スクリーンショット 2019-04-06 8.15.19.png

その他エラーなど

・herokuはphpログファイルとかエラーが見れないようなので、見るにはini_set('display_errors',1)を一時的に使います。

Error Code: 2013. Lost connection to MySQL server〜というエラーが出る場合
https://stackoverflow.com/questions/10563619/error-code-2013-lost-connection-to-mysql-server-during-query

・composer.jsonを編集したら作業ディレクトリで composer update を行う

$ composer update

参考:

herokuでPHPからMySQL(ClearDB)を使うhttp://blog.a-way-out.net/blog/2014/12/11/heroku-php-mysql/
herokuがcomposer.lock必須になったのでcomposerの入れ方をメモしておくhttp://kayakuguri.github.io/blog/2015/08/25/composer-lock-require/
Heroku データベースの管理(ClearDB アドオンによる MySQL の利用)http://www.ownway.info/Ruby/heroku/how/management/database/cleardb
MySQL WorkbenchをMacにインストールする方法https://programmingnavi.com/77/
heroku環境でmb_xxx関数を使うと、Fatal error: Call to undefined function …のエラーが表示されるhttps://qiita.com/taro-hida/items/f677abe2bc3b689002b3

45
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
36