Railway とは
Railway は PaaS (Platform as a Service) のひとつで、似たサービスに Heroku がよく挙げられます。Heroku の有償化に伴って Railway を知ったという方も多いのではないでしょうか。
ここに Discord bot をホスティングして動かそうじゃないか、というお話です。
今回はそこに DB として Postgres を用意する形にします。
前準備
-
Railway へのログインは GitHub 連携で行うことができます。
メールアドレスでアカウントを作成することもできますが、コード管理に GitHub を利用していることを前提として進めます。- Railway にアクセスする
- 右上の "Login" をクリックする
- Github のアカウントからサインイン
-
Discord bot の用意
こちらの記事を参考にし Python で実行する bot を作成します。
Python で Discord Bot を起動する
Railway で bot を実行する
-
requirements.txt
を用意する
ここでは bot に必要なモジュールを記載してあげます。このあと用意するDockerfile
に必要となります。
バージョンについては適宜変更・更新を行なってください。また、利用するライブラリはお好きなもので構いません。requirements.txtdiscord.py==2.3.2 python-dotenv==1.0.0 psycopg2==2.9.7
- discord.py
- Python 用 Discord API ラッパー
- python-dotenv
- 環境変数の読み込みのためのライブラリ。DB 周りで利用します。
- psycopg2
- PostgreSQL データベースアダプタ。Python から PostgreSQL へアクセスするためのライブラリ。
- discord.py
-
Dockerfile
を用意する
リポジトリにDockerfile
があれば、Railway でそれを検知し、コンテナアプリケーションとして Python ファイルを実行することができます。DockerfileFROM python:3 WORKDIR /environment RUN apt-get update RUN pip install --upgrade pip COPY ./requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . /environment CMD python sample_bot.py
前準備 で用意した bot は
sample_bot.py
を実行することで動いています。そのためDockerfile
の最後の行での記載もそれに合わせておきます。 -
Railway からデプロイする
以上のファイルが揃ったリポジトリを Railway で選択することでデプロイはできてしまいます。そもそものリポジトリの選択や、ブランチを間違えないように気をつけましょう。
デフォルトの設定だと、ブランチに変更があった場合、自動的に再デプロイを行なってくれるようになっています。
Postgres を用意 & bot 側からの接続
-
Railway に Postgres を配置
- Railway の Dashboard から "+ New" をクリック
- Database から "Add PostgreSQL" をクリック
これだけ。
-
Python から Postgres に接続するためのソースの用意
今回は psycopg2 を利用します。記法は以下の通りですが、接続に必要となる情報を dotenv で環境変数から取るようにしています。from dotenv import load_dotenv import os import psycopg2 # postgreSQL 接続情報 load_dotenv() connection = psycopg2.connect( host=os.environ.get("DB_HOST"), port=os.environ.get("DB_PORT"), database=os.environ.get("DB_NAME"), user=os.environ.get("DB_USER"), password=os.environ.get("DB_PASSWORD"), )
-
環境変数の設定
値の設定は Railway で行います。実際に値を設定するのは、Dashboard からデプロイした GitHub のリポジトリを選択し、"Variables" タブに追加していきます。-
DB_HOST
:PGHOST
-
DB_PORT
:PGPORT
-
DB_NAME
:PGDATABASE
-
DB_USER
:PGUSER
-
DB_PASSWORD
:PGPASSWORD
PG から始まる値は実際の設定値です。これらは Dashboard の Postgres → Connect → Available Variables に記載があります。
-
以上で Postgres に bot 側からアクセスするための設定が完了します。
テーブルやデータの追加は Railway 上から行うことができますし、ここで使用した接続情報を利用すれば、例えば pgAdmin などの GUI 管理ツールからアクセスすることも可能です。