🥧

【Rust】dockerコンテナ形式でactix-webのアプリケーションをherokuへデプロイする

2022/07/24に公開

概要

ActixWebで作成したWebアプリケーションを、herokuにデプロイした時のメモ書きです。今回は、dockerコンテナ形式でデプロイしました。(色々記事を参照したのですが、中々一発で上手くいかなかったので・・)

定義ファイルなど

まずはDockerファイルを用意します。アプリケーション名はevent-apiという名前にしています。
Rustのバージョンは1.60.0で動作確認しています。

FROM rust:1.60.0 AS build-stage

RUN USER=root cargo new --bin event-api
RUN apt-get update \
    && apt-get install -y -q \
    ca-certificates \
    locales \
    gnupg \
    apt-transport-https\
    libssl-dev \
    pkg-config \
    build-essential \
    git \
    wget \
    && echo "ja_JP UTF-8" > /etc/locale.gen  \
    && locale-gen

WORKDIR /event-api
COPY ./ .
RUN cargo build --release

####################################################################################################
## Final image
####################################################################################################
FROM debian:bullseye-slim AS production

RUN apt-get update  \
    && apt-get install -y -q \
    curl

# Copy build file
COPY --from=build-stage /event-api/target/release/event-api .
# Copy other file(ビルドしたファイル以外にコピーが必要ものがあれば)
COPY --from=build-stage /event-api/.env.prod .
WORKDIR /asset
COPY --from=build-stage /event-api/asset/ .

WORKDIR /
CMD ["./event-api"]

heroku.ymlのファイルは、1環境分だけ設定しています。

build:
  docker:
    web:
      dockerfile: Dockerfile

deployコマンドは以下の通りです。

heroku container:push web
heroku container:release web

参考記事

Container Registry および Runtime (Docker デプロイ)
axumをherokuにデプロイする
Rustで作ったAPIのDocker on Heroku
【New SQL実装編】Docker + Rust + PostgreSQL/CockroachDBでベンチマーク

Discussion