Herokuは2010年にSalesforce.comにより買収され、Salesforce.comが掲げるソーシャルエンタープライズを実現させるために生まれました。現在ではRuby on Railsだけでなく、PHP、Java、Python、JavaScript(Node.js)、Scala、Cloujureにも対応したマルチ言語なプラットフォームとなっています。Herokuは、元々Ruby on Railsを対象とした、Amazon Web ServicesのIaaS(仮想サーバコンピュータを提供してくれるサービス)上に構築されたPaaS(Platform as a Service)です。PaaSは、開発に必要なソフトウエアが準備されたサービスのことです。
1. Herokuへのユーザー登録
からユーザー登録を行う
2. Heroku Command Line(Heroku CLI)のインストール
からインストーラをインストール
3. Herokuへログイン
heroku login
4. Herokuアプリケーションを作成
heroku create アプリケーション名
既存のHerokuアプリケーション名と重複できません。
ユニークになるように考えておつくりください
ここまで行うとURLが自動発行されます
https://XXXXX.herokuapp.com/ | https://git.heroku.com/XXXXX.git
Herokuアプリケーションが作成されたかの確認
heroku apps
No such app as XXXXX. というエラーが出るときは
git remote rm heroku
としてから再度アプリ作成を行いましょう
5.Heroku用設定ファイルを新規作成
Herokuアプリケーション用に Procfile という名前のファイルを作成します。
Procfile は「Herokuで何のWebサーバソフトウェアを使うか」を指定をするためのファイルです。 フォルダの直下で下記のコマンドを実行すると、 フォルダの直下に Procfile が作成されます。
echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile
作成された Procfile は下記の内容になります。 Heroku上のapache2というWebサーバソフトウェアを利用することを指定しています。
6.デプロイ
デプロイする前に、HerokuのPHPの対応バージョンを変更しておきます。
なお、現状のままデプロイするとphp8.1が対応となっているため、エラーが出てしまいます。
まずは、composer.jsonファイルにある
"require": {
"php": "^7.2.5|^8.0",
の部分を
"require": {
"php": "^7.2.5",
"symfony/polyfill-ctype": "1.22.0",
"symfony/polyfill-iconv": "1.22.0",
"symfony/polyfill-mbstring": "1.22.0",
に修正し、保存します。
さらに、composer.lockファイルを削除したのち、
composer update
を実行するとcomposer.lockファイルが再生成されます。これらの変更をGitへコミットします。
これで、HerokuでもPHP 7で実行されるようになります。
では、一度デプロイしてみましょう。
登録されたリモートリポジトリherokuに対して git push
を行うとそのままデプロイされます。何かファイルを更新しても git commit
してからgit push heroku main
するだけで、簡単にデプロイすることが可能です。
git push heroku main
heroku open
リモートリポジトリherokuの確認
Heroku上に作成されたGitリポジトリがリモートリポジトリ heroku として登録されます。
git remote -v
7.Herokuアプリケーションを開く
デプロイが成功したらHerokuアプリケーションのURLにアクセスしましょう。URLは heroku apps:info
コマンドで確認できます。 Web URL に表示されるURLへWebブラウザでアクセスしてください。
heroku apps:info
Web URL: https://Herokuアプリケーション名.herokuapp.com/
8.Herokuアプリケーションの環境変数の設定
いくつか設定する必要のある環境変数があります。Cloud9上では .env が環境変数の役割を担っていましたが、 .env は .gitignore によって無視ファイルとして扱われているため、Gitのコミットには含まれていません。
また、環境変数はその名の通り環境の変数であるため、異なる環境毎に設定する必要があります。
APP_KEY
APP_KEY
はLaravelアプリケーションのセキュリティを強化するために設定されるものです。これを最初に設定しておく必要があります。ローカル(Cloud9)でも .env 上に APP_KEY
が設定されています。
以下を実行し、表示される base64:
で始まる文字列をコピーします(base64:
も含めてコピーしてください)。
php artisan --no-ansi key:generate --show
続いて、コピーした文字列
の箇所に先程の文字列をペーストして実行します。
heroku config:set APP_KEY=コピーした文字列
環境変数の確認方法
Herokuアプリケーション上の環境変数を確認する方法を知っておきましょう。適宜、確認してみてください。
先ほど設定した APP_KEY
が設定されているはずです。
heroku config
=== Herokuアプリケーション名 Config Vars
APP_KEY: base64:...
9.MySQLを追加
cleardbというクラウド上でMysqlを使うためのサービスがあります。プランはがいくつかありますが、igniteは無料です。
$ heroku addons:create cleardb:ignite
Creating cleardb:ignite on ⬢ [アプリ名]... free
Created cleardb-objective-20233 as CLEARDB_DATABASE_URL
Use heroku addons:docs cleardb to view documentation
10.MySQLの接続設定を修正
HerokuのアプリにDB情報の環境変数を設定します。
$ heroku config
=== [アプリ名] Config Vars
CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
$ heroku config:add DB_NAME='[データベース名]'
$ heroku config:add DB_USERNAME='[ユーザー名]'
$ heroku config:add DB_PASSWORD='[パスワード]'
$ heroku config:add DB_HOSTNAME='[ホスト名]'
$ heroku config:add DB_PORT='3306'
$ heroku config:add DATABASE_URL='mysql2://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true'
$ heroku config
=== [アプリ名] Config Vars
CLEARDB_DATABASE_URL: mysql2://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
DATABASE_URL: mysql2://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
DB_HOSTNAME: [ホスト名]
DB_NAME: [データベース名]
DB_PASSWORD: [パスワード]
DB_PORT: 3306
DB_USERNAME: [ユーザー名]
LANG: en_US.UTF-8
RACK_ENV: production
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: [シークレットキー]
11.デプロイ
ローカルリポジトリをHeorkuへプッシュ(デプロイ)します。
$ git push heroku main
よく使うherokuコマンド
▼ herokuへログイン
heroku login
「メールアドレス」「パスワード」を入力してログインします。
▼ heroku上のアプリを表示
heroku apps
▼ herokuアプリをブラウザで表示
アプリ hogehoge-fugafuga をブラウザで表示するには
heroku open --app hogehoge-fugafuga
と入力します。 またはブラウザのアドレス欄に直接
https://hogehoge-fugafuga.herokuapp.com
と入力してもOKです。
▼ heroku上のアプリを削除
アプリ hogehoge-fugafuga を削除するには
● 確認なしで削除
heroku apps:destroy --app hogehoge-fugafuga --confirm hogehoge-fugafuga
● 確認ありで削除
heroku apps:destroy --app hogehoge-fugafuga
▼ heroku上でbashを使用する
heroku run bash
▼ heroku上で任意のLinuxコマンドを使用する
・Heroku上のホームディレクトリのファイル一覧を表示
heroku run pwd ; ls -la
・Heroku上のphantomjsのバージョンを表示
heroku run phantomjs -v
コメント