【Railway】Rust Rocketアプリのデプロイ
この記事で、RailwayにRust Rocketアプリをデプロイする方法を学びます。クイックセットアップ、ワンクリックデプロイ、Dockerfile、その他のデプロイ戦略について説明します。
Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)
Rust Rocketアプリのデプロイ
Rocketは、高速で型安全、セキュアなWebアプリケーションを驚くほどの使いやすさ、生産性、パフォーマンスで簡単に記述できるRustのWebフレームワークです。
この記事では、4つの方法でRailwayにRocketアプリをデプロイする方法について説明します。
- テンプレートからのワンクリックデプロイ
- GitHubリポジトリからデプロイ
- CLIでデプロイ
- Dockerfileでデプロイ
それでは、Rocketアプリを作成しましょう!🚀
Rocketアプリの作成
注: RocketアプリがローカルまたはGitHubに既にある場合は、この手順をスキップして、「RocketアプリをRailwayにデプロイする」に直接進むことができます。
新しいRocketアプリを作成するには、お使いのマシンにRustがインストールされていることを確認してください。
ターミナルで次のコマンドを実行して、新しいRustアプリを作成します。
cargo new helloworld --binこのコマンドは、helloworld ディレクトリに新しいバイナリベースのCargoプロジェクトを作成します。
次に、ディレクトリに cd して、次のコマンドを実行してRocketを依存関係として追加します。
cargo add rocketこれにより、Rocketが依存関係として追加され、Cargo.toml ファイルにリストされます。
アプリケーションファイルの変更
次に、IDEでアプリを開き、src/main.rs ファイルに移動します。
内容を以下のコードに置き換えます。
#[macro_use]
extern crate rocket;
#[get("/")]
fn index() -> &'static str {
"Hello world, Rocket!"
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![index])
}上記のコードは、Rocketフレームワークを使用して、HTTPリクエストに応答する基本的なWebサーバーを作成します。#[get("/")] マクロを使用して単純なルートを定義し、ルートURL (/) へのGETリクエストを処理するようにRocketに指示します。
index() 関数はこのルートのハンドラーであり、ルートURLにアクセスしたときにレスポンスとして送信される静的文字列 “Hello world, Rocket!” を返します。
rocket() 関数の #[launch] 属性は、アプリケーションを起動するためのエントリポイントとしてマークします。rocket() 内で、サーバーは rocket::build() でビルドされ、インデックスルートは mount() を使用してルートパス / にマウントされます。
アプリケーションを実行すると、着信リクエストをリッスンし、ルートURLへのリクエストに対して「Hello world, Rocket!」レスポンスを提供し、Rocketでの単純なルーティングとレスポンスメカニズムを示します。
Rocketアプリをローカルで実行
ターミナル経由で helloworld ディレクトリで次のコマンドを実行します。
cargo runすべての依存関係がインストールされ、アプリが起動します。
ブラウザを開き、http://localhost:8000 にアクセスしてアプリを表示します。
RocketアプリをRailwayにデプロイする
Railwayは、セットアップと好みに応じて、Rocketアプリをデプロイする複数の方法を提供します。
テンプレートからのワンクリックデプロイ
最速で始めたい場合は、ワンクリックデプロイオプションが最適です。
下のボタンをクリックして開始します。
デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。
注: コミュニティによって作成されたさまざまなRocketテンプレートから選択することもできます。
CLIからデプロイ
- Railway CLIのインストール:
- CLIをインストールし、Railwayアカウントで認証します。
- Railwayプロジェクトの初期化:
- プロンプトに従ってプロジェクトに名前を付けます。
- プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
- アプリケーションのデプロイ:
- このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
- 公開URLの設定:
- 新しいサービスの「設定」タブのNetworkingセクションに移動します。
- 「Generate Domain」をクリックして、アプリの公開URLを作成します。 注: アプリケーションが応答しない502エラーが発生します。次の手順で修正します。
- Rocketアプリがローカル以外の接続を受け入れるように設定:
- サービスの再デプロイ:
railway upを再度実行して、サービスの再デプロイをトリガーします。
- デプロイの確認:
- デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。公開URLに再度アクセスすると、アプリが正常に動作していることがわかります。
Rocketアプリは、通常 0.0.0.0 である正しいアドレスでリッスンすることで、外部接続を受け入れるように設定する必要があります。環境変数を介してアドレスを設定することで、これを簡単に行うことができます。次のコマンドを実行して、Rocketアドレスを 0.0.0.0 に設定します。
railway variables --set "ROCKET_ADDRESS=0.0.0.0"以下のコマンドを使用してアプリをデプロイします。
railway upRocketアプリディレクトリで以下のコマンドを実行します。
railway initGitHubリポジトリからデプロイ
RocketアプリをGitHubから直接Railwayにデプロイするには、以下の手順に従ってください。
- Railwayで新しいプロジェクトを作成:
- Railwayにアクセスして、新しいプロジェクトを作成します。
- GitHubからデプロイ:
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- RailwayアカウントがまだGitHubにリンクされていない場合は、リンクするように求められます。
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- 環境変数の追加:
- Add Variables をクリックし、
ROCKET_ADDRESSを値0.0.0.0で追加します。これにより、Rocketアプリは0.0.0.0でリッスンして外部接続を受け入れることができます。
- Add Variables をクリックし、
- アプリのデプロイ:
- Deploy をクリックして、デプロイプロセスを開始します。
- デプロイされると、アプリ用にRailwayサービスが作成されますが、デフォルトでは公開されません。
- デプロイの確認:
- デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。 注: デプロイプロセス中に、RailwayはRustアプリであることを自動的に検出します。
- 公開URLの設定:
- 新しいサービスの「設定」タブのNetworkingセクションに移動します。
- 「Generate Domain」をクリックして、アプリの公開URLを作成します。
Dockerfileの使用
helloworldまたはRocketアプリのルートディレクトリにDockerfileを作成します。- CLIまたはGitHubからデプロイします。
Dockerfile に以下の内容を追加します。
FROM lukemathwalker/cargo-chef:latest-rust-1 AS chef
# アプリディレクトリを作成して変更
WORKDIR /app
FROM chef AS planner
COPY . ./
RUN cargo chef prepare --recipe-path recipe.json
FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
# 依存関係のビルド - これはキャッシュDockerレイヤーです!
RUN cargo chef cook --release --recipe-path recipe.json
# アプリケーションのビルド
COPY . ./
RUN cargo build --release
CMD ["./target/release/helloworld"]Railwayは Dockerfile を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。
注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。
この記事では、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Rocketアプリをシームレスにデプロイし始めてください!
次のステップ
Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。
Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)