はじまり
![リサちゃん](https://www.endorphinbath.com/wp-content/uploads/2021/10/02_nayutarisa_003.png)
ちっくしょおーー!!
HerokuからGitHubリポジトリのソースをデプロイ出来ないなんて、何てことだあああ!!
![135ml](https://www.endorphinbath.com/wp-content/uploads/2021/10/01_kinkinbeer135ml_001-2.jpg)
まあ、2022/4/16のOAuth漏れた騒動があったからねー・・・
![リサちゃん](https://www.endorphinbath.com/wp-content/uploads/2021/10/02_nayutarisa_001-1.png)
ぐぬぬ・・・、同じ感じでGitHubからデプロイ出来るサービスはないのだろうか・・・
![135ml](https://www.endorphinbath.com/wp-content/uploads/2021/10/01_kinkinbeer135ml_001-2.jpg)
じゃあ、Render.comを使ってみますかあ?
![リサちゃん](https://www.endorphinbath.com/wp-content/uploads/2021/10/02_nayutarisa_004.png)
むむっ? なんだそれは、教えてくれ!
Renderとは
最近、色々なアプリをデプロイ出来て、Herokuよりも安価にそれが出来るとして、注目を集めているサービスです。
僕は、今回起きたGitHubとHeroku間のOAuth事故が起きたときに知りました。
HerokuとRenderを色々と比較してくれている記事が以下にありましたので、もう少し違いを詳しく見たい方はご参照ください。
![](https://res.cloudinary.com/zenn/image/upload/s---GAAd666--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2580%2590%25E6%25A0%25BC%25E5%25AE%2589%25E6%259C%25AC%25E7%2595%25AA%25E9%2581%258B%25E7%2594%25A8%25E3%2581%258C%25E5%258F%25AF%25E8%2583%25BD%25E3%2581%25AB%25E3%2580%2591Render.com%2520%25E3%2581%25AE%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2588%25E3%2583%25BB%25E3%2583%2587%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2588%25E3%2582%2592%2520Heroku%2520%25E3%2581%25A8%25E6%25AF%2594%25E8%25BC%2583%25E3%2581%2597%25E3%2581%25A6%25E3%2581%25BF%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2581%258B%25E3%2581%25AD%25E3%2581%2593%25E3%2581%259F%25E3%2581%258F%25E3%2582%2584%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2I4ZTU1Njc3MTQuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
実際にRenderを使ってデプロイしてみよう
この機会なので、HerokuではなくRenderを使ってみたいと思います。
RenderをGitHubに連携する
まず、デプロイしたいサービス形態を選択します。今回は、「Private Services」を選択します。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_01-1024x544.jpg)
初めて利用するのであれば、クレジットカードを登録します。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_02-1024x772.jpg)
GitHubのリポジトリを選択する画面になります。(画面はCron Jobで試したものです。Private Servicesでも同じような画面になると思います。)
public repositoryを選べ的な感じで書いてありますが、private repositoryを選んでも大丈夫です。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_03-1024x543.jpg)
Private repositoryを選ぶと、そのGitHubのプライベートリポジトリにRenderをインストールしろと言われますので、インストールします。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_04-1024x534.jpg)
インストールするリポジトリは、デプロイするリポジトリだけでいいので、そのリポジトリを選択します。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_05-1024x544.jpg)
Installをクリックしてインストールします。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_06-1024x542.jpg)
先程の画面に戻るので、プライベートリポジトリを再度選択します。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_07-1024x543.jpg)
インストールに関しては、ここに記事があったので詳細はこちらをご参照ください。
![](https://cdn.sanity.io/images/hvk0tap5/production/cb7ff287cdf28d8115569e91e856e9b6441bc7a6-3840x2146.png?rect=13,0,3815,2146&w=1600&h=900&fit=max&auto=format)
デプロイの設定をする。
デプロイの設定に入ります。Python 3を選択して、mainブランチからデプロイします。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_08-1024x553.jpg)
「Build Command」および「Start Command」は、このコマンド群でデプロイしてみます。
Build Command
apt update; apt install -y python3 python3-pip; /opt/render/project/src/.venv/bin/python -m pip install --upgrade pip; pip install -r requirements.txt
Start Command
python3 app.py
料金プランは最弱の「Starter」を選びました。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_09-1024x549.jpg)
「Create Private Service」をクリックして、デプロイが始まります。どきどき・・・。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_10-1024x546.jpg)
Pythonでデプロイ出来ない・・・
これでデプロイしてみると、こんなエラーメッセージが表示されてデプロイ出来ません。(僕のDiscord botアプリは、py-cord 2.0.0じゃないと動きません・・・。困った・・・。)
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_11-1024x446.jpg)
Pythonのバージョンが古いのが問題・・・?
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_12-1024x241.jpg)
Dockerでデプロイしてみよう
Pythonのバージョンを上げたいのですが、Python 3でデプロイすると、Python 3.7からバージョンアップできないようです。
RenderでPythonのバージョンについて調べてみると、3.7がデフォルトらしくそれ以上のバージョンでデプロイしたければDockerでデプロイしてみろとのことです。
![](https://cdn.sanity.io/images/hvk0tap5/production/cb7ff287cdf28d8115569e91e856e9b6441bc7a6-3840x2146.png?rect=13,0,3815,2146&w=1600&h=900&fit=max&auto=format)
Dockerfileの設定
なので、Dockerでデプロイしてみます。Dockerfileを以下のように設定します。Ubuntuでコンテナを作ります。
先程デプロイしようとしたメインディレクトリに、以下の感じのDockerfileを配置します。
デプロイに必要ないファイルは.dockerignoreで排除してデプロイ時間を短縮します。
Dockerfile
FROM ubuntu:latest
ENV PYTHON_VERSION 3.7.1
ENV HOME /root
ENV PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION
ENV PATH $PYTHON_ROOT/bin:$PATH
ENV PYENV_ROOT $HOME/.pyenv
# setup timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# update apt
RUN apt update
# install python and pip
RUN apt install -y python3 python3-pip
RUN pip install --upgrade pip
# save docker layer cache
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
# use git
RUN apt install git -y
# pip install
RUN pip install --no-cache-dir -r requirements.txt
# install landmasterlibrary
RUN pip install git+https://github.com/landmaster135/landmasterlibrary.git@main
# copy files
COPY ./ /usr/src/app
# execute Python code
RUN python3 app.py
デプロイ設定
再度、デプロイ設定に入ります。「Environment」を今回はDockerにします。Commandを入れる必要はなくなったので以下の設定で基本的にOKです。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_13-1024x543.jpg)
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_14-1024x544.jpg)
デプロイ完了・・・?
「Create Private Service」をクリックして、デプロイが始まります。どきどき・・・。
していると、デプロイが終わりました。その結果を見てみると、405: Method Not Allowed
のメッセージが出ていますね・・・
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_16-1024x543.jpg)
うーん、少し気になりますが、Discordの画面を見てみるとボットは起動しているようです・・・。問題なく使えています。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_17-1024x576.jpg)
うーん・・・、今回は詮索するのは保留にします・・・。pycordの中で起きている例外なので、分かるには時間が掛かりそう・・・。
ところがどっこい
デプロイがエラーコード137で失敗する
ところがどっこい、先程の状態を放置して2時間ほど経過した後、Renderを見てみると・・・
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_18-1024x277.jpg)
「Deploy failed」となっていますね・・・。Error codeが137となっています。どうやら、このコード自体はメモリ不足が原因のようです。
![](https://docs.docker.com//assets/images/thumbnail.webp)
プランを引き上げて再デプロイしてみる
試しにサーバを「Starter Plus」にして、再度デプロイして放置してみます・・・。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_19-1024x442.jpg)
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_20-1024x545.jpg)
しかし、またもや、失敗と出ます・・・。同じエラーコードです。
アプリを走らせるコマンドをRUNではなくCMDで走らせてみる。
今度試したのは、DockerfileのサイドのコマンドをRUNではなくCMDで実行する試みです。
Dockerfile
FROM ubuntu:latest
ENV PYTHON_VERSION 3.7.1
ENV HOME /root
ENV PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION
ENV PATH $PYTHON_ROOT/bin:$PATH
ENV PYENV_ROOT $HOME/.pyenv
# setup timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# update apt
RUN apt update
# install python and pip
RUN apt install -y python3 python3-pip
RUN pip install --upgrade pip
# save docker layer cache
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
# use git
RUN apt install git -y
# pip install
RUN pip install --no-cache-dir -r requirements.txt
# install landmasterlibrary
RUN pip install git+https://github.com/landmaster135/landmasterlibrary.git@main
# copy files
COPY ./ /usr/src/app
# execute Python code
CMD ["python3", "app.py"]
今度は・・・、Timed outと表示されてしまいました。
でも、エラーメッセージが変わったので、少し光明が見えてきたかも。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_22-1024x113.jpg)
Private Serviceではなく、Background Workerでデプロイしてみる。
ここに有力そうな記事が見つかりました。
Private Serviceは10000番ポートでlistenするように想定されているから、そうじゃないポートで使うとうんちゃらかんちゃらと書いてあるっぽいです。
とりあえず、同じリポジトリから、Private ServiceではなくBackground WorkerでDockerデプロイしてみます。
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_23-1024x583.jpg)
そうしたら・・・、
なんと! 相変わらず、405: Method Not Allowed
のメッセージは表示されていますが、デプロイが終わり「Live」の状態になっています!
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_24-1024x563.jpg)
Botも特に問題なく動作しています!
![](https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_25-1024x616.jpg)
まとめ
以下、今回のDiscord botをデプロイした件のまとめです。
- 2022/4/16のインシデントが原因で、HerokuがGitHubからのデプロイに対応していない状況である。
- しかし、Render.comを使えば、Herokuと同様にGitHubからデプロイ出来る。
- pycordのバージョンが、Python 3.7以前で利用できないものである場合、Dockerでデプロイする。
- アプリ種別は「Background Worker」でデプロイする。
おしまい
![リサちゃん](https://www.endorphinbath.com/wp-content/uploads/2021/10/02_nayutarisa_016.png)
やった! デプロイ出来るじゃないですかあ!
![135ml](https://www.endorphinbath.com/wp-content/uploads/2021/10/01_kinkinbeer135ml_001-2.jpg)
なんか例外は出てるけどね・・・
![リサちゃん](https://www.endorphinbath.com/wp-content/uploads/2021/10/02_nayutarisa_021.png)
変だな〜、変だな〜
以上になります!
コメント