Herokuの登録

環境構築
スポンサーリンク
スポンサーリンク

WEBアプリをインターネット上で公開するには

公開する手段あれこれ

自分で作ったアプリをインターネットに公開する手段は数多あると思います。

  • 自宅サーバを公開する
    • 一見一番安価にできそうですが、キチンとしたインターネットセキュリティの知識が必要。
      ※自宅サーバ公開について紹介されている記事をよく拝見します。プロと思われる方が公開されている記事も多くとても参考になります。し・か・し、私もプロとしてお勧めしません。なぜならセキュリティ設定は一度すれば後は放置とはいきません。クラッカーとのイタチごっこが続くため、最新のセキュリティ情報を常に収集しつつ、数か月サイクルの設定見直しを欠かすとあっという間に被害にあいます。余程マメな方以外は無理だと思います。
    • 準備が大変です。固定IPが使えるプロバイダ契約、ドメイン名の取得、SSLの契約、FW(ファイアウォール)の設定、公開用サーバの環境構築など。達成感は一番だと思いますが。
  • 専用サーバサービスを利用する。
    • サーバ1台自由に使えるサービスです。
    • 自宅サーバ公開とほぼ同じ自由度(なんでもできちゃう、サーバのroot権限有)でネットワーク周りのセキュリティはお任せでき、ハードウェア(サーバ本体。HDDが壊れるとかはたまにある)の面倒もみる必要がないので、自宅サーバよりは良いかと思いますが、OSレイヤから上(OS、APサーバ、DBサーバ)のセキュリティは自己責任になります。
    • また大抵利用料が高額です。
  • レンタルサーバーを利用する
    • インターネットにblog公開するぐらい(せいぜいwordpress利用ぐらい)であれば良い選択だと思います。
    • たぬパパもこのサイトはロリポップのレンタルサーバを利用させていただいています。
    • 無料(広告あり)もしくは安価(月500円程度)で利用でき、セキュリティもほぼお任せ(Wordpressがインストール済で、バージョンアップなんかも適宜対応いただける)で、業者さんによっては独自ドメインやSSLが無料(もしくは安価)に利用できたりもします。
    • 最近はPHPやMySQLを利用できるプランもあり、簡単なアプリ公開であればできそうです。
    • ただし安いプランだと全般的に動作が遅く勝手に違うAPサーバやDBサーバをインストールすることはできないので、本格的なアプリを公開する用途には向かないと思います。
    • 共有サーバのため、同じサーバを利用するユーザの影響を受けやすく、自分ではさほど重いコンテンツを公開してないのにいきなり動作が遅くなるなんてことが起きがちです。
  • VPSサービスを利用する。
    • VPS(Virtual Private Server)は仮想化されたサーバを利用するもので、使い勝手とセキュリティの自己責任度合は専用サーバと同等です。
    • 物理サーバの処理能力を複数のユーザで分け合う形なので、他のユーザの処理が集中した際などにパフォーマンスの劣化が見られましたが、仮想化技術の発達でだいぶ解消されてきました。
    • 専用サーバよりは若干安価です。
    • 後述するIaaSサービスと違い、最初に契約した処理能力をすぐに増減することはできません。
  • IaaSサービスを利用する。
    • IaaSは、「Infrastructure as a Service」の略で、クラウド上でサーバやストレージ、ネットワークといったインフラを提供するサービスです。
    • 代表的なIaaSのサービスとして、Amazonが提供する「Amazon EC2」 、マイクロソフトが提供する「Microsoft Azure」、Googleが提供する「Google Compute Engine(GCP)」があります。
    • 必要な時に必要な処理能力を従量料金で提供するのが一般的で、アクセス集中時に威力を発揮します。※その分料金が発生します。ある一定の処理能力まで無料で提供する枠もあります。
    • 従量料金なので、思いがけず利用料が高額になるなどの悲劇もちらほら。
    • クラウド上でのインフラ設計やセキュリティ管理など、利用にあたっては高度なスキルが必要です。
  • PaaSサービスを利用する。
    • PaaSは、「Platform as a Service」の略で、クラウド上でWEBアプリの実行環境を提供するサービスです。
    • 代表的なPaaSのサービスとして、HerokuやGoogle Cloud Functions for Firebaseがあります。
    • IaaSサービスと同様、必要な時に必要な処理能力を提供する従量制で無料枠もあります。
    • Herokuは無料枠をプラン(Free、非商用)として提供しており月あたりの処理時間で制限をかけているのに対し、Google Cloud Functions for Firebaseでは無料枠を超えると課金される(一応アラートは飛んでくるらしいですが)ので、完全に無料で使いたいならHerokuの方が安心です。※その理由でたぬパパはHerokuを使っています。
    • IaaSサービスと異なり、インフラ設計やセキュリティ管理などの高度なスキルは必要としません。※アプリのセキュリティは必要ですよ。

ここではたぬパパが利用しているHerokuについてご紹介します。

Herokuについてご紹介

Heroku とは?

上述の通り、PaaSサービスとしてWEBアプリの実行環境を提供しています。

Herokuの特徴についてHerokuホームページからの抜粋です。

Heroku の無料クラウドサービスは、Heroku プラットフォームの中心にある軽量 Linux コンテナである dyno に導入できるアプリケーションから始まります。Heroku に登録すると dyno 時間分の試用期間が自動的に付与され、アプリケーションの実行に利用できます。アプリケーションを実行すると dyno 時間が消費されます。30 分間何も操作をせず自動的にアイドル状態になったときや、アプリケーションをスケールダウンしたときには、dyno 時間が消費されなくなります。

クレジットカード番号を入力して Heroku アカウントを認証すると、無料の dyno 時間が 1000 時間となります(認証を行っていない場合、無料の dyno 時間は 550 時間分となります)。有料サービスの使用を申し込まない限り、費用が請求されることはありません。さらに、アカウントの認証を行うと、無料アプリケーションを 6 つ以上実行できるようになるほか、カスタムドメイン名を無料で使用できるようになるなど、さまざまなメリットがあります。

herokuホームページより

1dynoの処理性能は良くわからないのですが(メモリは512MByteと記載あり)、そのDynoで月550時間まで処理ができます。無料枠だと30分でアイドリング(Dyno時間を消費しないため)となり、その状態でWEBアプリへの要求が発生すると、立ち上がるまで数十秒程度要するのでタイムアウトが発生します。もちろん商用サービスだとあり得ないですが、個人がホビーユースで使う分には十分だと思います。

WEBアプリはソースコードをGitでデプロイすることで利用可能になります。

そのほかPostgreSQLなど豊富なアドオンが利用可能です。

Herokuの料金体系

2021/10現在のHerokuの料金体系です。

最新の情報はHerokuホームページをご参照ください。

無料のFreeプランで十分だと思いますが、スリープが嫌な方は月$7払ってHobbyプランもありかと思います。

Herokuの利用準備

Herokuアカウントの登録

Herokuを利用するために、アカウントの登録を行います。


Herokuのサイトに行き、右上の新規登録をクリックします。

アカウント登録画面が表示されるので、苗字、名前、メールアドレス、役職、国、主な開発言語を記入し、私はロボットではありませんにチェックしたら、「無料カウント作成」ボタンをクリックします。

登録したメールアドレスにアカウント確認メールが届いているので、リンクをクリックしましょう。

パスワード設定画面が表示されるので、パスワードを入力後「パスワードを設定しログインする」ボタンをクリックします。

たまに変なところに遷移してなえるのですが、焦らずhttps://jp.heroku.com/に戻って右上のログインボタンをクリックします。

※変なとこ。閉じてもう一度 https://jp.heroku.com/に戻ってログインしましょう。

ログイン画面が表示されたら、メールドアドレス、パスワードを入力し「Log In」ボタンをクリックしましょう。

多要素認証を有効化するか聞いてくるのでここは「Later」をクリック。

サービス利用条項が表示されるので、イタリア在住の方はAre you domiciled in Italy?をyesにして
「Accept」ボタンをクリックします。

ダッシュボードの初期画面が表示されるたら最初のアプリを登録してみましょう。
ダッシュボードに Create new appのリンクがあるのでそれをクリックします。

App nameにアプリ名(heroku上でユニークである必要があるらしい)を入力します。
Choose a regionはそのまま(USかEUしか選べませんが)。
Create appボタンをクリックします。

空のアプリが作成されました。

HerokuCLIのインストール

Herokuにアプリをデプロイする方法は
1、Heroku git
2、GitHub連携
3、Container Registry
の三つあります。

2,3は前提となる知識が多いので、ここではgitのremote pushでデプロイできる1を紹介します。

Herokuで様々な操作を行う際に必要となる HerokuCLI をまずインストールします。

まずHerokuCLIをダウンロードします。

Deploy using Heroku Git の横に Install the Heroku CLIの記載があるので、
Heroku CLIのリンクをクリックします。

クリック後に表示される画面を下に降りていくと、Windowsの64-bit installerのリンクがあるのでそれをクリックします。

ダウンロードできたらクリックしてインストール開始します。

このアプリがデバイスに変更を加えることを許可しますか?と聞いてくるので「はい」をクリックします。

コンポーネント選択ではすべてチェックがついた状態で「Next」をクリック。

インストール先を聞いてくるので、必要に応じ変更して「Install」をクリックします。

インストールが完了したら「Close」をクリックしてインストーラを終わらせます。

無事インストールできたことを確認します。

PowerShellを起動して、heroku –versionコマンドを入力し、herokuのバージョンが帰ってきたらインストール成功です。

PS C:\> heroku --version
» Warning: Our terms of service have changed: https://dashboard.heroku.com/terms-of-service
heroku/7.53.0 win32-x64 node-v12.21.0

サンプルアプリの作成

アプリの準備

Herokuにデプロイするサンプルアプリを作成します。
※ここからはgitの環境構築が完了している前提となります。

Gitで管理するため、空のディレクトリを用意します。

テキストエディタで下記のソースコードを入力し、main.pyと名前をつけて用意したディレクトリに格納します。※今回はpythonで簡単なwebアプリを作成できるFlaskを利用します。

import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def main():
    return "Hello world!"
if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

次にHerokuにデプロイするときに依存関係のあるライブラリを一緒にインストールできるよう、
テキストエディタで下記を入力し、requirements.txtと名前を付けて先ほどと同じディレクトリに作成します。

Flask==1.1.2

次にheroku上でデプロイしたアプリを起動するために、 テキストエディタで下記を入力し、 Procfile と名前を付けて先ほどと同じディレクトリに作成します。

web: python main.py

Herokuへのデプロイ

作成したファイルをGitで管理できるようにします。

PowerShellを起動して、先ほどのディレクトリに移動します。

Gitコマンドを入力します。

PS C:\develop\heroku_sample> git init
Initialized empty Git repository in C:/develop/heroku_sample/.git/
PS C:\develop\heroku_sample> git add .
PS C:\develop\heroku_sample>
PS C:\develop\heroku_sample> git commit -m "First commit"
[master (root-commit) 9561add] First commit
3 files changed, 9 insertions(+)
create mode 100644 Procfile
create mode 100644 main.py
create mode 100644 requirements.txt

HerokuをGitのリモートリポジトリとして登録します。

まずHerokuにログインします。

PowerShell上で下記コマンドを入力します。

C:¥heroku login

heroku: Press any key to open up the browser to login or q to exit:

q以外の適当なキーをクリックするとブラウザが立ち上がり認証画面が表示されます。

ログイン完了するとPowerShellにログインできたことが表示されます。

Logging in... done
Logged in as xxxxxx@xxxx.com

次に下記コマンドを入力してリモートリポジトリを登録します。
xxxxxxにはHerokuに登録したアプリ名を入力してください。

C:¥heroku git:remote -a xxxxxx
set git remote heroku to https://git.heroku.com/xxxxxx.git

登録が完了したか確認します。

PS C:\> git remote
heroku

リモートリポジトリとしてheroku が登録されました。

ここまでで準備完了。

herokuにpushしてデプロイします。

git push heroku master

Herokuへのデプロイが完了しました。

herokuダッシュボードのOvewViewを見ると、Dyno formationにweb python main.pyの記載があり、WEBアプリとして登録されたことがわかります。

さらにダッシュボードのsettingsに移動し、下にスクロールするとDomainsのセクションがあり、
その横に今デプロイいたアプリへのアクセスポイント(URL)記載されています。
https://xxxxxx.herokuapp.com/

URLをブラウザで開くと”Hello world!”が表示されたので無事完了です。

うまく動作しない場合はダッシュボードの右上に「More」というボタンがあるので、クリックしてview logsを選択すると動作ログを見ることができます。

コメント

タイトルとURLをコピーしました