Closed4

Discord botをHerokuからFly.ioに移行する

theta_ktheta_k

前提

  • 言語は TypeScript
  • フレームワークは Discord.js
  • データベースは未使用
  • ローカルでbotを動かせる状態である
theta_ktheta_k

大まかな手順

  • アカウント作成
    • GitHubログインが楽
    • メールアドレスでも作成可能
    • クレジットカード番号入力が出るが、Try Fly.io for freeを押せば入れずに進められる
  • flyctlをインストール
    • Windows: Powershellを開いて iwr https://fly.io/install.ps1 -useb | iex
      • WSL2 Ubuntuを使っているなら下でOK
    • Mac/Linux: curl -L https://fly.io/install.sh | sh
  • ログイン
    • $ flystl auth login
  • デプロイ準備
    • $ flyctl launch
    • fly.tomlとDockerfileが作成される
      • fly.tomlは基本そのままでOK
      • Dockerfileもほとんどそのまま
        • ProcfileのコマンドがRUNCMDで実行されていることを確認
  • 環境変数を使っている場合は登録
    • $ flyctl secrets set TOKEN=hogehogetest
  • デプロイ
    • $ flyctl deploy
    • 10分以上はかかる
  • 動作確認
theta_ktheta_k

ハマったこと

現状のDockerfileはこんな感じ

FROM debian:bullseye as builder

ARG NODE_VERSION=16.13.2

RUN apt-get update; apt install -y curl
RUN curl https://get.volta.sh | bash
ENV VOLTA_HOME /root/.volta
ENV PATH /root/.volta/bin:$PATH
RUN volta install node@${NODE_VERSION}

#######################################################################

RUN mkdir /app
WORKDIR /app

# NPM will not install any package listed in "devDependencies" when NODE_ENV is set to "production",
# to install all modules: "npm install --production=false".
# Ref: https://docs.npmjs.com/cli/v9/commands/npm-install#description

ENV NODE_ENV production

COPY . .

# ここだけ変更
RUN npm install --production=false && npm run build
FROM debian:bullseye

LABEL fly_launch_runtime="nodejs"

COPY --from=builder /root/.volta /root/.volta
COPY --from=builder /app /app

WORKDIR /app
ENV NODE_ENV production
ENV PATH /root/.volta/bin:$PATH

CMD npm run start

theta_ktheta_k

Pythonであればこの動画を見れば良さそう
https://www.youtube.com/watch?v=J7Fm7MdZn_E&feature=emb_title

Dockerfileの内容はこんな感じになるはず

 # バージョンを指定
 FROM python:3.10
 # サーバーの中でbotを動かす作業ディレクトリを指定
 WORKDIR /bot
 # 使用ライブラリ一覧を作業ディレクトリにコピー
 COPY requirements.txt /bot/
 # ライブラリをダウンロード
 RUN pip install -r requirements.txt
 # `flyctl deploy`を実行したディレクトリの中身とライブラリを作業ディレクトリにコピー
 COPY . /bot
 # 作業ディレクトリでbotを実行
 CMD python main.py
このスクラップは2022/12/02にクローズされました