【Django】Heroku無料枠がなくなるのでRailwayを使ってみた。

この記事は約12分で読めます。
広告

Herokuが2022/11/末から有料になるため代わりを探しました。Railwayがよかったです。どうにかデプロイできたので、その様子をご紹介します。Herokuで動いていたものを動かすことができました。GitHubからだと簡単にできます。ただHerokuではPostgreSQLを簡単に使用できましたがRailwayではPostgreSQL接続、CLIの接続もうまくできず苦戦しました。CLIができないとmigrateの操作ができません。HerokuではconsoleというのがあったのでCLIなしでもWeb上でできました。Railwayにはないみたいです。
そこでデータベースにDjangoに元々入ってるsqlite3でデプロイしたらできたのでPostgreSQL、CLIなしでこのままいけるかなと考えています。そのあたりの記事です。

Railwayにデプロイしたアプリ(毎月21日以降は停止してます)
こちらの記事で作ったアプリです。

広告

Railwayの無料プランとは

https://railway.app/
料金の説明(英語)Starter Planが無料っぽいです。ネットで調べた私の認識では1か月5ドル分は無料で利用できる。500時間までは利用できる。取りあえず、この認識でやってみます。正確なところは英語の文章を読んで確認してください。クレジットカードは登録していません。残高は画面右上に下のように常に表示されています。3プロジェクトデプロイ(デプロイしたり削除を何回か繰り返した)して3日経った状態です。この値が0になった時の様子がわかったら記事更新します。

またほかにも何かあったら、この記事で報告します。11月に5ドルに復活するのかとか。請求きたとか。(来たら困る)2022/10/11から利用開始。

Railwayで登録方法

私はEmailで登録しました。パスワードの設定はなかったです。
手順
Login→メールアドレスを入れてemail→メールが送られてくるのでlog in to Railwayをクリック
そうすると画面右上の表示がUnverified $ 2.00 | 200 Hrsとなり、この段階でも利用できそうです。
続きを、エラー含めそのまま書きます。
Dashboard→New Project→Deploy from GitHub repo→Login with GitHub→Authorize Railway ↓戻って下メッセージ出た。
Verify your account
Unfortunately, your GitHub account did not meet our criteria and we need additional information.
→Verify Account
Your Account is Unverifiedと出たのでto begin, accept theTerms of Service
I agree with Railway’s Terms of Service
I will not deploy any of that
→Your Account is Verifiedになった。

ここで画面右上の表示がStarter Plan$ 5.00|500 Hrsになり5ドル500時間使えるようになったようです。

Railwayデプロイ方法

Herokuで動いている状態のものを3点変えればGitHubからデプロイできました。
1、データベースをPostgeresからSQLite3に変更。migrateやcreatesuperuserが終わって、かつ必要なデータを入れた状態。そうすればdb.sqlite3ファイルに、その辺のデータが入っているのでデプロイ後、何もする必要がありません。
注意git push origin masterでGithubへpushしたときdb.sqlite3がpushされない場合があるので、なかったら後からGithubでAdd files→Uploads filesでdb.sqlite3をアップロードする。
2、requirements.txtからdjango-heroku削除
3、allowed_hosts変更

settings.py
ALLOWED_HOSTS = ['.up.railway.app']

デプロイするレポジトリはallとOnly select repositoriesがあります。都度選択するOnly select repositoriesでやりました。
Dashboard→New Project→Deploy from GitHub repo→Configure GitHub App
Only select repositoriesのselect repositoriesでレポジトリ選ぶ→save
Deploy from GitHub repo→デプロイするレポジトリ選ぶ。

Whitenoizeの関係でHerokuでDISABLE_COLLECTSTATICを1にしていた場合、Railwayでも同じことができます。
Deploy from GitHub repo→デプロイするレポジトリ選んで
Add variablesでDISABLE_COLLECTSTATICを1にしてadd
またsettingsのdomeinsで今、適当に名前がついてるのを自由に変えられます。.up.railway.comは固定。
windowを閉じたらbuildingが勝手に始まっていた。
SettingsのAutomatic DeploymentsでDisable triggerをクリックすれば自動デプロイしなくなります。Connect Environment to Branchで自動デプロイ。これやると手動でデプロイが分からないので自動デプロイにしてからGithubで変更(commit)しないとデプロイがスタートしない。

数分でデプロイが完了し○○minuets ago via Githubと出れば完了です。
Deploymentsの1番上に緑色でアドレスが出てるので、そこをクリックすると動きます。

set up your project locally
1. Install the Railway CLIはWindowsの場合scoopを選ぶProject setup is done
https://zenn.dev/fus1ondev/articles/umami-railway
CLIインストール
ここを見てscoopをインストールhttps://qiita.com/rhene/items/d8a0c0c7d637904e14daコマンドは1行ずつコピペ
scoop bucket add railway https://github.com/railwayapp/scoop-railway; scoop install railway/railway

Run the commands from the location of your project : railway login — railway link yourprojectId — railway run python manage.py makemigrations

railway login
railway link b2678e72-bd42-4947-8d7b-d0b5cf00228d
注意<>なし
railway run python manage.py makemigrations
エラーになるexec: “python”: executable file not found in %PATH%
vue-noclパソコンに入れてやったらDjangoがないと出た。
ImportError: Couldn’t import Django. Are you sure it’s installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
PaizaCloudでやる。cliインストールできない。

ここ見てDjangoインストールした。https://kanda-it-school-kensyu.com/python-django-contents/pdc_ch03/pdc_0302/


https://www.javadrive.jp/python/install/index3.htmlでpython.exeをpathに追加
エラーになるpython: can’t open file ‘manage.py’: [Errno 2] No such file or directory
多分、プロジェクト入ってないとダメ

https://render.com/
Migrate a Django App from Heroku to Render (and get it ready for prod)
Get Started
E-mailとパスワードを入力するとメールが送られてくるので、そこをクリックすると登録完了です。New Web Service→Connect account→Authorize Render
GitHubが立ち上がります。Only select repositoriesにチェックSelect repositoriesでデプロイしたいrepositoyを選択→Install→GitHubのパスワード入力→confirm
Connect a repositoryで先ほど選んだrepositoyが表示されます。横のconnectをクリック。
You are deploying a web service for~という画面が出ます。
プランは無料$0/monthが選ばれています。有料はpayment infomationを入力しないと選べないようになっています。
Nameだけ入れてCreate Web Serviceでデプロイが始まります。Start Command→gunicorn app:app→gunicorn hajimete_pj.wsgi

RAILWAY_TOKEN=bce4099d-b8bd-407e-9f7b-dea26801363d railway statusだと以下に書いてある通り正しく認識されてる。

https://obel.hatenablog.jp/entry/20220504/1651626086
railway shell

git remote add rail https://github.com/miyamiko/vchart


Add variablesでDATABASE_URLにPostgreSQLのconnectのPostgres Connection URL

https://dev.to/mr_destructive/django-postgresql-deployment-on-railway-app-d54
プロジェクト直下に.env新規作成

PostgreSQL→Connect→Postgres Connection URLをコピーして.envでDATABASE_URL=に貼り付け

settings.py
import dj_database_url
from dotenv import (
    find_dotenv,
    load_dotenv,
)
load_dotenv(find_dotenv())
DATABASE_URL = os.getenv("DATABASE_URL")
DATABASES = {
    "default": dj_database_url.config(default=DATABASE_URL, conn_max_age=1800),
}

requirements.txt
dj-database-url
python-dotenv
pip install djangorestframework
pip install dj-database-url
pip install python-dotenv
pip install psycopg2-binary==2.8.6

Python PostgreSQLをWindowsで使う。インストール〜接続

Csrfエラーが出る

formで送るとcsrfが出る。
Djangoのバージョンで出るようです。今までDjango3で使ってたのか?
取りあえずsettings.pyに以下のようにデプロイしたドメインをCSRF_TRUSTED_ORIGINSに追加でなおりました。
CSRF_TRUSTED_ORIGINS = [‘https://○○.up.railway.app’]
具体的には
CSRF_TRUSTED_ORIGINS = [‘https://ac-web2.up.railway.app’]

参考 Django 3.xから4.xへの更新でPOSTリクエスト時にCSRF検証に失敗する

500時間たったらどうなるのか?

初めにデプロイしてから時間が経過した分、減っていってます。アプリが起動しているかどうかは関係なさそうです。時間をカウントしないようにする設定があるのかは分かりません。500時間だと約21日です。10/11から使い始めたので今月中には0にならないと思います。来月500時間に戻るのか、この記事で更新します。500時間に戻ったとしてさらに21日経過した11/22の様子も記事更新します。デプロイしたものはどうなるのか?とかですね。5ドルのほうは4日経って残り4.56ドルです。最終的に4個デプロイして動かしてます。その間にPostgreSQL使ったり、デプロイしたもの削除したりしています。どういう計算かは分かりませんが、こちらは大丈夫そうです。500時間のほうが確実に0になりそうです。

$2.63 0でStarter plan Maxed Outになった 

2022/10/31Railwayを使い始めて大体20日、右上の表示がStarter plan $2.63 0になっています。All the project deployments have been paused until next month when limits are reset.(次の月でリミットがリセットされるまですべてのプロジェクトは一時停止される)というメッセージが出てます。数時間後デプロイしたものを見るとInvalid Deploymentと出ます。

月初になった。デプロイしたものは消えている

2022/11/1 Starter Plan$ 5.00|500 Hrsに復活しましたがデプロイしたものは消えてました。この20日間でデータベースに更新されたデータもなくなるので注意が必要です。再度デプロイしました。Railwayにデプロイしたアプリ(毎月21日以降は停止してます)
再デプロイ方法
Dashboardから再デプロイしたいプロジェクトを選択→+New→GitHub Repo→Configure GitHub App→Selected * repositories.がある場合×で全部削除→Only select repositoriesのselect repositoriesでレポジトリ選ぶ→save
もう一度+New→GitHub Repo→デプロイするレポジトリ選ぶ。
先月のものを削除
先月のものをクリック→settings→Delete Service from All Environments→Type *** to confirm→***を入力してdelete
必要に応じて新しいもののsettingsからドメイン(1回Generate Domeinで適当に作って、そのあと編集)とService Nameを変更

Render

Herokuの代替先としてhttps://render.com/についてはこちら

あとがき

HerokuからRailwayへはデータベースをsqlite3にすれば簡単に移行できます。無料枠を使いきったとき、どういう状態になるのか、ひと月使って分かったこと

  • クレジットカード登録しないでも使える。
  • デプロイしてから500時間は無料
  • 500時間経過すると表示しなくなる。
  • 月初に500時間に復活するがデプロイしたものは消されているので再度デプロイが必要。

この記事を書いたイチゲを応援する
Vプリカでのお支払いがおすすめです。

MENTAやってます(ichige)

コメント

タイトルとURLをコピーしました