2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railway で Discord bot + Postgres を運用する

Last updated at Posted at 2023-08-15

Railway とは

Railway は PaaS (Platform as a Service) のひとつで、似たサービスに Heroku がよく挙げられます。Heroku の有償化に伴って Railway を知ったという方も多いのではないでしょうか。
ここに Discord bot をホスティングして動かそうじゃないか、というお話です。
今回はそこに DB として Postgres を用意する形にします。

前準備

  • Railway へのログインは GitHub 連携で行うことができます。
    メールアドレスでアカウントを作成することもできますが、コード管理に GitHub を利用していることを前提として進めます。

    1. Railway にアクセスする
    2. 右上の "Login" をクリックする
    3. Github のアカウントからサインイン
  • Discord bot の用意
    こちらの記事を参考にし Python で実行する bot を作成します。
    Python で Discord Bot を起動する

Railway で bot を実行する

  1. requirements.txt を用意する
    ここでは bot に必要なモジュールを記載してあげます。このあと用意する Dockerfile に必要となります。
    バージョンについては適宜変更・更新を行なってください。また、利用するライブラリはお好きなもので構いません。

    requirements.txt
    discord.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 へアクセスするためのライブラリ。
  2. Dockerfile を用意する
    リポジトリに Dockerfile があれば、Railway でそれを検知し、コンテナアプリケーションとして Python ファイルを実行することができます。

    Dockerfile
    FROM 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 の最後の行での記載もそれに合わせておきます。

  3. Railway からデプロイする
    以上のファイルが揃ったリポジトリを Railway で選択することでデプロイはできてしまいます。そもそものリポジトリの選択や、ブランチを間違えないように気をつけましょう。
    デフォルトの設定だと、ブランチに変更があった場合、自動的に再デプロイを行なってくれるようになっています。

Postgres を用意 & bot 側からの接続

  1. Railway に Postgres を配置

    • Railway の Dashboard から "+ New" をクリック
    • Database から "Add PostgreSQL" をクリック
      これだけ。
  2. 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"),
    )
    
  3. 環境変数の設定
    値の設定は 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 管理ツールからアクセスすることも可能です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?