AIイノベーションズ
Railway/Guides

Rust Rocketアプリのデプロイ

このステップバイステップガイドで、RailwayにRust Rocketアプリをデプロイする方法を学びます。クイックセットアップ、ワンクリックデプロイ、Dockerfile、その他のデプロイ戦略について説明します。

著者: AIイノベーションズ 阿部隼也X / Twitter

Railwayはこちら

Rust Rocketアプリのデプロイ

Rocketは、高速で型安全、セキュアなWebアプリケーションを驚くほどの使いやすさ、生産性、パフォーマンスで簡単に記述できるRustのWebフレームワークです。

このガイドでは、4つの方法でRailwayにRocketアプリをデプロイする方法について説明します。

  1. テンプレートからのワンクリックデプロイ
  2. GitHubリポジトリから
  3. CLIを使用
  4. 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アプリをデプロイする複数の方法を提供します。

テンプレートからのワンクリックデプロイ

最速で始めたい場合は、ワンクリックデプロイオプションが最適です。

下のボタンをクリックして開始します。

Railwayにデプロイ

デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。

注: コミュニティによって作成されたさまざまなRocketテンプレートから選択することもできます。

CLIからデプロイ

  1. Railway CLIのインストール
    • CLIをインストールし、Railwayアカウントで認証します。
  2. Railwayプロジェクトの初期化
    • Rocketアプリディレクトリで以下のコマンドを実行します。
      railway init
    • プロンプトに従ってプロジェクトに名前を付けます。
    • プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
  3. アプリケーションのデプロイ
    • 以下のコマンドを使用してアプリをデプロイします。
      railway up
    • このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
  4. 公開URLの設定
    • 新しいサービスの「設定」タブのNetworkingセクションに移動します。
    • 「Generate Domain」をクリックして、アプリの公開URLを作成します。 注: アプリケーションが応答しない502エラーが発生します。次の手順で修正します。
  5. Rocketアプリがローカル以外の接続を受け入れるように設定
    • Rocketアプリは、通常 0.0.0.0 である正しいアドレスでリッスンすることで、外部接続を受け入れるように設定する必要があります。環境変数を介してアドレスを設定することで、これを簡単に行うことができます。次のコマンドを実行して、Rocketアドレスを 0.0.0.0 に設定します。
      railway variables --set "ROCKET_ADDRESS=0.0.0.0"
  6. サービスの再デプロイ
    • railway up を再度実行して、サービスの再デプロイをトリガーします。
  7. デプロイの確認
    • デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。公開URLに再度アクセスすると、アプリが正常に動作していることがわかります。

GitHubリポジトリからデプロイ

RocketアプリをGitHubから直接Railwayにデプロイするには、以下の手順に従ってください。

  1. Railwayで新しいプロジェクトを作成
    • Railwayにアクセスして、新しいプロジェクトを作成します。
  2. GitHubからデプロイ
    • Deploy from GitHub repo を選択し、リポジトリを選択します。
      • RailwayアカウントがまだGitHubにリンクされていない場合は、リンクするように求められます。
  3. 環境変数の追加
    • Add Variables をクリックし、ROCKET_ADDRESS を値 0.0.0.0 で追加します。これにより、Rocketアプリは 0.0.0.0 でリッスンして外部接続を受け入れることができます。
  4. アプリのデプロイ
    • Deploy をクリックして、デプロイプロセスを開始します。
    • デプロイされると、アプリ用にRailwayサービスが作成されますが、デフォルトでは公開されません。
  5. デプロイの確認
    • デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。 注: デプロイプロセス中に、RailwayはRustアプリであることを自動的に検出します。
  6. 公開URLの設定
    • 新しいサービスの「設定」タブのNetworkingセクションに移動します。
    • 「Generate Domain」をクリックして、アプリの公開URLを作成します。

Dockerfileの使用

  1. helloworld またはRocketアプリのルートディレクトリに Dockerfile を作成します。
  2. 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"]
  3. CLIまたはGitHubからデプロイします。

Railwayは Dockerfile を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。

注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。

このガイドでは、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Rocketアプリをシームレスにデプロイし始めてください!

次のステップ

Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。

Railwayはこちら

PR