Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What is going on with this article?
@woxtu

Dockerを使ってHerokuにデプロイする

More than 3 years have passed since last update.

 初投稿です。Rust で書いたウェブアプリケーションが Heroku で動くと嬉しい、という話をします。

ローカルで動かす

 これは、GET /hello-heroku と叩くと "Hello, Heroku!" と喋るアプリケーションです。

Cargo.toml
[package]
name = "hello-heroku"
version = "0.1.0"
authors = []

[dependencies]
shio = "0.2.0"
structopt = "0.1.6"
structopt-derive = "0.1.6"
src/main.rs
extern crate shio;
extern crate structopt;
#[macro_use]
extern crate structopt_derive;

use shio::prelude::*;
use structopt::StructOpt;

#[derive(StructOpt)]
#[structopt(name = "hello-heroku", about = "Hello, Heroku!")]
struct Options {
  #[structopt(short = "p", long = "port", default_value = "7878")]
  port: u16,
}

fn hello_heroku(_: Context) -> Response {
  Response::with("Hello, Heroku!")
}

fn main() {
  let options = Options::from_args();

  Shio::default()
    .route((Method::Get, "/hello-heroku", hello_heroku))
    .run(format!(":{}", options.port))
    .unwrap()
}

structopt という crate が便利なので使うと良いと思います。

$ cargo run -- -p 8000
$ curl localhost:8000/hello-heroku
Hello, Heroku!

楽しい!₍₍ (ง╹◡╹)ว ⁾⁾

Docker で動かす

 これは、アプリケーションを乗せたイメージです。Heroku で動かす場合、公開するポート番号は環境変数 PORT に渡される1ので、そのようにします。

Dockerfile
FROM rust:1.22.1

RUN mkdir /app
COPY ./Cargo.toml /app/Cargo.toml
COPY ./src /app/src
WORKDIR /app
RUN cargo build --release

CMD cargo run --release -- -p $PORT

ビルドにわりと時間かかるのが最高です。私のマシンが非力すぎるという説もある。

$ docker build -t hello-heroku .
$ docker run -it --rm -e "PORT=8000" -p 8000:8000 hello-heroku
$ curl localhost:8000/hello-heroku
Hello, Heroku!

楽しい!₍₍ (ง╹◡╹)ว ⁾⁾

Heroku で動かす

 イメージをプッシュし、アプリケーションをデプロイします。

$ heroku container:push --app YOUR_APP_NAME web

やりました。

$ curl https://YOUR_APP_NAME.herokuapp.com/hello-heroku
Hello, Heroku!

楽しい!₍₍ (ง╹◡╹)ว ⁾⁾

やっていく

 Docker を使うと Heroku にシュッとデプロイできて最高です。SSR (Server-Side Rust) をやっていきましょう。

参考

24
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
woxtu
世界の上にタンポポをのせる仕事をしています。
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
24
Help us understand the problem. What is going on with this article?