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