Herokuのアーキテクチャ
2023/3/7
目次
アプリケーション:ソースコード+依存関係の説明
RubyではGemfile
Procfile:プロセスタイプ・実行する名前付きコマンドのリストを定義
foremanのと同じ
webプロセスタイプ、queueプロセスタイプなど
この場合、アプリケーションへの2つのエントリポイントがある
デプロイの方法
いろいろある。Gitがメジャー。
herokuのリポジトリにソースをpushすると、それをトリガーにコンテナがビルドされる
他の方法
GitHubインテグレーション
HerokuAPI
slug
ビルドの結果一式
実行する処理の指示(Procfile)も含まれる
buildpack
オープンソース
ソースコードからslugを作成する
dyno(Unixコンテナ)
アプリケーションを実行するもの
実行時、slugがdynoにロードされる
シンプルなWebアプリを実行する場合:
dyno起動 -> slugロード -> Procfileで定義されたwebプロセスタイプの処理が実行される
heroku ps:scale web=3 queue=2 の形で、プロセスタイプごとの起動数を柔軟に指定できる
プロセスタイプの起動数設定 = Dyno formation
新しいバージョンのアプリをデプロイすると、現在のDynoは強制終了され、Dyno formationに従ったDyno群が新たに起動される
heroku ps で現在のDyno状態を確認可能
環境変数
ソースコードとは切り離した形で、環境依存の変数を設定可能
heroku config:set HOGE=fuga
リリース
リリース=「slug」と「環境変数の組み合わせ」と「アドオン」
heroku releases
過去のリリースバージョン一覧が出る。ここからロールバックも可能
Dyno Manager
Herokuで実行しているすべてのアプリケーションのDynoを管理する
最低でも一日に一回、Dynoは再実行される
One-off dyno
一次的なdyno
heroku run bash
Dyno は独立コンテナ。互いに独立しているため、あるDyno上でファイルを更新しても他のDynoには影響しない。
アドオン
アドオン=接続されたリソース
アドオンのプロビジョニング=アドオンをマーケットプレイスから取得して、自身のアプリケーションに接続すること。
ログ
LogPlex:Herokuのログシステム
すべてのDynoからのログが時系列で記録される
heroku logs
heroku logs --ps web.1 --tail
プロセスタイプ
web: HTTPを受け取る
queue: ジョブのpush, pop ができる
Unixプロスモデル
WebアプリへのUnixプロセスモデルのマッピング
例えば、memcachedのようなプロセスは1つのUnixプロセスタイプを割り当てればOK(Worker)
Webアプリの場合、2つセットが基本
web: railsサーバー
worker: Resqueなどのキュー
heroku local : ローカル環境で動いてる Procfile の内容を Heroku に適用する