Rust Rocketアプリのデプロイ
このステップバイステップガイドで、RailwayにRust Rocketアプリをデプロイする方法を学びます。クイックセットアップ、ワンクリックデプロイ、Dockerfile、その他のデプロイ戦略について説明します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)Rust Rocketアプリのデプロイ
Rocketは、高速で型安全、セキュアなWebアプリケーションを驚くほどの使いやすさ、生産性、パフォーマンスで簡単に記述できるRustのWebフレームワークです。
このガイドでは、4つの方法でRailwayにRocketアプリをデプロイする方法について説明します。
それでは、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プロジェクトの初期化:
- Rocketアプリディレクトリで以下のコマンドを実行します。
railway init
- プロンプトに従ってプロジェクトに名前を付けます。
- プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
- Rocketアプリディレクトリで以下のコマンドを実行します。
- アプリケーションのデプロイ:
- 以下のコマンドを使用してアプリをデプロイします。
railway up
- このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
- 以下のコマンドを使用してアプリをデプロイします。
- 公開URLの設定:
- 新しいサービスの「設定」タブのNetworkingセクションに移動します。
- 「Generate Domain」をクリックして、アプリの公開URLを作成します。 注: アプリケーションが応答しない502エラーが発生します。次の手順で修正します。
- Rocketアプリがローカル以外の接続を受け入れるように設定:
- Rocketアプリは、通常
0.0.0.0
である正しいアドレスでリッスンすることで、外部接続を受け入れるように設定する必要があります。環境変数を介してアドレスを設定することで、これを簡単に行うことができます。次のコマンドを実行して、Rocketアドレスを0.0.0.0
に設定します。railway variables --set "ROCKET_ADDRESS=0.0.0.0"
- Rocketアプリは、通常
- サービスの再デプロイ:
railway up
を再度実行して、サービスの再デプロイをトリガーします。
- デプロイの確認:
- デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。公開URLに再度アクセスすると、アプリが正常に動作していることがわかります。
GitHubリポジトリからデプロイ
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
を作成します。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"]
- CLIまたはGitHubからデプロイします。
Railwayは Dockerfile
を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。
注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。
このガイドでは、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Rocketアプリをシームレスにデプロイし始めてください!
次のステップ
Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。
PR