コンテンツにスキップ

Herokuとは

Herokuは人気のオールインワンホスティングソリューションです。詳細はheroku.comをご覧ください。

サインアップ

Herokuアカウントが必要です。まだお持ちでない場合は、こちらからサインアップしてください:https://signup.heroku.com/

CLIのインストール

Heroku CLIツールがインストールされていることを確認してください。

HomeBrew

brew tap heroku/brew && brew install heroku

その他のインストールオプション

代替のインストールオプションはこちらをご覧ください:https://devcenter.heroku.com/articles/heroku-cli#download-and-install

ログイン

CLIをインストールしたら、次のコマンドでログインします:

heroku login

正しいメールアドレスでログインしていることを確認します:

heroku auth:whoami

アプリケーションの作成

dashboard.heroku.comにアクセスしてアカウントにログインし、右上のドロップダウンから新しいアプリケーションを作成します。Herokuはリージョンやアプリケーション名などいくつかの質問をしますので、プロンプトに従ってください。

Git

HerokuはGitを使用してアプリをデプロイするため、プロジェクトをGitリポジトリに配置する必要があります(まだの場合)。

Gitの初期化

プロジェクトにGitを追加する必要がある場合は、ターミナルで次のコマンドを入力します:

git init

マスターブランチ

Herokuへのデプロイには、mainまたはmasterブランチのような一つのブランチを決めて、それを使い続ける必要があります。プッシュする前に、すべての変更がこのブランチにチェックインされていることを確認してください。

現在のブランチを確認します:

git branch

アスタリスクが現在のブランチを示しています。

* main
  commander
  other-branches

Note

git initを実行したばかりで出力が表示されない場合、最初にコードをコミットする必要があります。その後、git branchコマンドから出力が表示されます。

正しいブランチにいない場合は、次のコマンドで切り替えます(mainの場合):

git checkout main

変更のコミット

このコマンドが出力を生成する場合、コミットされていない変更があります。

git status --porcelain

次のコマンドでコミットします:

git add .
git commit -m "a description of the changes I made"

Herokuとの接続

アプリをHerokuと接続します(アプリの名前に置き換えてください)。

$ heroku git:remote -a your-apps-name-here

ビルドパックの設定

HerokuにVaporの扱い方を教えるためにビルドパックを設定します。

heroku buildpacks:set vapor/vapor

Swiftバージョンファイル

追加したビルドパックは、使用するSwiftのバージョンを知るために.swift-versionファイルを探します。(5.8.1をプロジェクトが必要とするバージョンに置き換えてください。)

echo "5.8.1" > .swift-version

これにより、5.8.1を内容とする.swift-versionが作成されます。

Procfile

Herokuはアプリの実行方法を知るためにProcfileを使用します。私たちの場合、次のようになります:

web: App serve --env production --hostname 0.0.0.0 --port $PORT

次のターミナルコマンドでこれを作成できます:

echo "web: App serve --env production" \
  "--hostname 0.0.0.0 --port \$PORT" > Procfile

変更のコミット

これらのファイルを追加しましたが、まだコミットされていません。プッシュしてもHerokuはそれらを見つけられません。

次のコマンドでコミットします。

git add .
git commit -m "adding heroku build files"

Herokuへのデプロイ

デプロイの準備ができました。ターミナルからこれを実行します。ビルドに時間がかかることがありますが、これは正常です。

git push heroku main

スケールアップ

ビルドが成功したら、少なくとも1つのサーバーを追加する必要があります。価格はEcoプランで月額$5から始まります(価格を参照)。Herokuで支払い設定が完了していることを確認してください。次に、単一のWebワーカーの場合:

heroku ps:scale web=1

継続的デプロイ

更新したい場合は、最新の変更をmainに取り込んでHerokuにプッシュするだけで、再デプロイされます。

Postgres

PostgreSQLデータベースの追加

dashboard.heroku.comでアプリケーションにアクセスし、Add-onsセクションに移動します。

ここでpostgresと入力すると、Heroku Postgresのオプションが表示されます。それを選択します。

Essential 0プランを月額$5で選択し(価格を参照)、プロビジョニングします。Herokuが残りの作業を行います。

完了すると、Resourcesタブの下にデータベースが表示されます。

データベースの設定

次に、アプリがデータベースにアクセスする方法を指定する必要があります。アプリディレクトリで実行します。

heroku config

これにより、次のような出力が生成されます:

=== today-i-learned-vapor Config Vars
DATABASE_URL: postgres://cybntsgadydqzm:2d9dc7f6d964f4750da1518ad71hag2ba729cd4527d4a18c70e024b11cfa8f4b@ec2-54-221-192-231.compute-1.amazonaws.com:5432/dfr89mvoo550b4

ここでのDATABASE_URLはPostgresデータベースを表します。この静的URLを決してハードコードしないでください。Herokuはそれをローテーションし、アプリケーションが壊れます。また、これは悪い習慣です。代わりに、実行時に環境変数を読み取ります。

Heroku Postgresアドオンは、すべての接続を暗号化することを要求します。Postgresサーバーが使用する証明書はHeroku内部のものであるため、未検証のTLS接続を設定する必要があります。

次のスニペットは、両方を達成する方法を示しています:

if let databaseURL = Environment.get("DATABASE_URL") {
    var tlsConfig: TLSConfiguration = .makeClientConfiguration()
    tlsConfig.certificateVerification = .none
    let nioSSLContext = try NIOSSLContext(configuration: tlsConfig)

    var postgresConfig = try SQLPostgresConfiguration(url: databaseURL)
    postgresConfig.coreConfiguration.tls = .require(nioSSLContext)

    app.databases.use(.postgres(configuration: postgresConfig), as: .psql)
} else {
    // ...
}

これらの変更をコミットすることを忘れないでください:

git add .
git commit -m "configured heroku database"

データベースのリバート

runコマンドを使用して、Heroku上でリバートやその他のコマンドを実行できます。

データベースをリバートするには:

heroku run App -- migrate --revert --all --yes --env production

マイグレーションを実行するには:

heroku run App -- migrate --env production