はじめに
今更の話ではあるのですが、HerokuのHobby Plan, つまり無料Planが2022年9月28日に終了します。
Students and Nonprofit Program
We appreciate Heroku’s legacy as a learning platform. Many students have their first experience with deploying an application into the wild on Heroku. Salesforce is committed to providing students with the resources and experiences they need to realize their potential. We will be announcing more on our student program at Dreamforce. For our nonprofit community, we are working closely with our nonprofit team, too.
上記内容から、学生には何かしらの補填が考えられますが、一般的には移行が求められているのではないでしょうか。
今回は、Discord上で動くPythonで書かれたbotをrailwayに移行した方法と感想をまとめました。
railwayって何?
Railway is a deployment platform where you can provision infrastructure, develop with that infrastructure locally, and then deploy to the cloud.
一言でいえば、Herokuと同じようなPaaSサービスを提供してくれます。
GUIにより直感的に操作ができるところがポイント高いです。
また、Herokuとの互換性も高いのもよいです。
このURLからわかる通り、Procfileを認識します。また、buildpackにHeroku buildpackも付属しています。
しかし、Herokuのように複数のbuildpackを追加するために、project.tomlをいじればできそうな気がしますが、
私ではよくわかりませんでした。先見の知恵をお待ちしています。
基本的なGUI操作によるDeploy
こちらの記事がとても参考になります。丸投げします。
本記事では詰まった点のみをかいつまんで話します。
nixpackを利用してbuild&deployをしてみよう。
Railwayではデフォルトでnixpackを利用したbuildが実行されます。
今回、discord botをdeployするにあたり、vcを使った機能を搭載するため、ffmpegを追加する必要があります。
やり方はいくつかありますが、nixpackでは、Dockerfileを読み込み
実行を行ってくれるので今回は素直にそのやり方を利用しましょう。
よって、Dockerfileに以下のように記述を行います。
FROM python:3.10.7
USER root
WORKDIR /app
COPY . /app
RUN pip install --upgrade -r /app/requirements.txt # pythonのライブラリはrequirements.txtに記述します。
RUN apt-get update # ffmpegをビルド済みバイナリでinstallします。
RUN apt-get install -y ffmpeg
CMD ["python", "bot.py"]
nixpack.tomlのほうではOpusがロードされないエラーが解消できませんでした。何が違ったのか。
一応その時使っていたtomlを張り付けておきます。もしかしたら、aptPkgsにffmpegを入力したら動くのかもしれません。
[phases.setup]
nixPkgs = [ '...', 'ffmpeg' ]
環境変数をHerokuから転用する
使ってみた感想
Railwayは基本的にクレジットカード登録により、Developer Planに移行することで、500hrのDyno制限が無くなり24/7で動かせます。5$の表記はCPU使用による請求なので、1つのbotを動かす程度であれば5$未満で基本的には収まります。
それでも、PostgreSQLも使え必要なライブラリやappはDockerfileを書くことで追加できるので、
Herokuからの転用先として悪くはないのではないかというのが所見です。
なんなら、Deployボタンも実装されているので、app配布等の検討でRailwayを利用してみるのも良い手ではないでしょうか。