discourse を使ってみる

【概要】Ubuntu でDiscourseを手動インストールする基本的な手順である。公式サポートはDockerベースに限定されており、本方法は非推奨かつ古い情報が含まれる場合がある。Ruby 3.3以降、PostgreSQL 13/16、Redis 6.0以降などが必要である。

事前に決めておく事項

Discourse のダウンロードとインストール (Download and Install Discourse)

  1. Discourse の前提ソフトウェア
    1. redis server のインストール (Install redis server)
      # パッケージリストの情報を更新
      sudo apt update
      sudo apt -y install redis-server
      

      Redisは、Discourseのキャッシュやキュー管理に使われるインメモリデータ構造ストアである。Discourse 公式では Redis 6.0 以降が推奨されており、Ubuntu 24.04 の apt リポジトリで提供されるバージョン(通常 7.0 以降)はこれに該当する。

    2. Ruby のインストール (Install Ruby)
      # パッケージリストの情報を更新
      sudo apt update
      sudo apt -y install ruby ruby-dev
      

      (注: Discourse の最新バージョン(3.3+)は Ruby 3.3 以降で動作する。Ubuntu 24.04 の apt リポジトリで提供される Ruby バージョンは通常 3.3 以降であり互換性があるが、最新の Discourse の要件は変動する可能性がある。手動インストール自体が公式サポート外であるため、推奨される Docker インストールと比較してバージョンの追従や管理が複雑になる。)

    3. gem update --system の実行 (Execute 'gem update --system')

      rubygems を最新の状態にするために実行する。

      sudo REALLY_GEM_UPDATE_SYSTEM=YES gem update --system
      
    4. 'sudo gem install bundler' の実行 (Execute 'sudo gem install bundler')

      bundler は Ruby プロジェクトの依存関係(gem)を管理するために必要である。

      dpkg -l | grep bundle
      sudo gem install bundler
      
  2. Discourse ユーザの設定

    このときにDiscourse ユーザの パスワードを設定する.

    sudo adduser --shell /bin/bash --gecos 'Discourse application' discourse
    
  3. /etc/sudoers に Discourse ユーザの設定

    (注: セキュリティ上の理由から、特定のコマンドのみ sudo 実行可能にするなど、より限定的な設定を検討することを推奨する)

    discourse    ALL=(ALL:ALL) ALL
    
  4. Discourse のダウンロード (Download Discourse)

    「sudo su - discourse 」は、discourse ユーザーとして操作を行うためのコマンドである. これ以降の操作は、discourse ユーザーで行う.

    sudo rm -rf /var/www/discourse
    sudo install -d -m 755 -o discourse -g discourse /var/www/discourse
    sudo su - discourse 
    git clone https://github.com/discourse/discourse.git /var/www/discourse
    

    この後の操作も、discourse ユーザーで行う.

  5. bundle の実行 (Execute bundle)

    Discourse の動作に必要な gem をインストールする操作である.

    エラーメッセージが出ていないことを確認する.

    cd /var/www/discourse
    bundle install --deployment --without test
    
  6. sudo gem update の実行 (Execute 'sudo gem update')
    sudo gem update
    gem list
    
  7. Discouse の設定開始
    cd /var/www/discourse/config
    cp discourse_quickstart.conf discourse.conf
    cp discourse.pill.sample discourse.pill
    
  8. /var/www/discourse/config/discourse.conf の設定 (Edit /var/www/discourse/config/discourse.conf)
    • database username: discourse (PostgreSQLに接続するときのユーザ名)
    • database password: <パスワード> (PostgreSQLに接続するときのパスワード)
    • hostname: ホスト名を設定
    • Redisの部分:他のアプリケーションで Redis を使っていないならば、何も設定しなくて良い

    ◆ 設定例

  9. Discouse ユーザから元のユーザに戻る操作
    exit
    

Web サーバ nginx のインストール (Install a Web Server nginx)

  1. 既存の nginx パッケージの削除 (Remove existing version of ngginx)

    (必要に応じて実行する)

    sudo apt-get remove '^nginx.*$'
    
  2. sources.list.d ファイルの設定 (Setup a sources.list.d file)

    (最新版をインストールするため、Nginx公式リポジトリを追加する)

    sudo rm -f /etc/apt/sources.list.d/nginx.list
    touch /etc/apt/sources.list.d/nginx.list
    echo "deb http://nginx.org/packages/ubuntu/ `lsb_release -sc` nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list
    echo "deb-src http://nginx.org/packages/ubuntu/ `lsb_release -sc` nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list
    sudo apt -y update
    sudo apt -y install nginx
    

PostgreSQL のインストールとデータベースファイルの生成 (Install PostgreSQL and Create Database Files)

インストール手順

  1. システムのアップデート操作
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y upgrade
    
  2. PostgreSQL と関連パッケージのインストール (Install PostgreSQL and related packages)
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install postgresql postgresql-client-common postgresql-common postgresql-contrib
    

    (注: Ubuntu 24.04 の apt リポジトリでは PostgreSQL 16 がインストールされる。Discourse 公式サポートバージョンは PostgreSQL 13 であるが、PostgreSQL 16 も非公式ながら動作報告がある。PostgreSQL のインストールにより、デフォルトのデータベースクラスタと postgres OSユーザーは通常自動的に作成されるため、手動での initdb 実行は通常不要である。)

  3. pgAdmin のインストール (Install pgAdmin)

    (注: pgAdmin III は開発が終了しており、現在は pgAdmin 4 が推奨される。apt でインストールできる pgAdmin3 は古いバージョンのため、最新の pgAdmin 4 を使用する場合は公式ウェブサイトからのダウンロードなど、別の方法でインストールする必要がある。)

  4. postgreSQL サーバの起動チェック (Try to Start and Stop postgreSQL server)

    (Ubuntu では systemd によるサービス管理が一般的である)

    sudo systemctl restart postgresql
    sudo systemctl status postgresql
    
  5. Postgres 用アカウントが存在することの確認 (print the postgreSQL account)

    パッケージを使って PostgreSQL をインストールすると、Postgres 用アカウント(OSユーザ名は「postgres」)が自動的に作成される.

    sudo cat /etc/passwd | grep postgres
    

    *x」はパスワードが設定されているが、そのハッシュが /etc/shadow に保存されていることを示す(パスワードがないという意味ではない)

  6. データベースディレクトリの作成と権限の設定 (create a database directory)

    ここでは、データベースディレクトリは /var/lib/postgresql/data とする.好きに決めていいが、日本語を含まないディレクトリ名にする.

    (注: 前述の通り、通常はパッケージインストール時に作成される標準パスを使用することが推奨される)

    sudo mkdir /var/lib/postgresql/data
    sudo chown -R postgres:postgres /var/lib/postgresql/data
    

discourse データベースの新規作成

  1. postgreSQL のログインに関する設定 (Settings of postgreSQL login)

    discourse ユーザーで PostgreSQL にログインできるように、 /etc/postgresql/main/pg_hba.conf を編集する.

    local all discourse peer
    

    (注: peer 認証は OS ユーザー名と DB ユーザー名が一致する場合に機能する。アプリケーションからの接続には md5scram-sha256 など、パスワード認証の設定が必要となる場合が多い)

  2. postgreSQL サーバの再起動 (Restart postgreSQL server)

    /etc/postgresql/main/pg_hba.conf を書き換えたので再起動する.

    sudo systemctl restart postgresql
    sudo systemctl status postgresql
    
  3. ロールの新規作成 (Create a new role)

    /var/www/discourse/config/discourse.conf で設定したユーザ名(ここでは「discourse」)とパスワードを正しく設定する.

    sudo su - postgres
    psql -U postgres
    create role discourse with login password '<パスワード>';
    \q
    exit
    

    (注: アプリケーションが使用するDBユーザーに SUPERUSER 権限を与えるのはセキュリティリスクが高い。Discourseに必要な権限(通常はデータベース作成権限など)のみを与えるべきであり、login 権限だけでも接続は可能である。)

    * 「間違えたので、ロールを削除したい」というときは「drop role discourse;」のように操作する.

  4. 試しに、いま作成したロールを使って PostgreSQL に接続してみる.

    「sudo su - discourse 」は、discourse ユーザーとして操作を行うためのコマンドである.

    sudo su - discourse 
    psql -U discourse -d postgres
    \q
    
  5. /var/www/discourse/config/database.yml の設定

    database: discourse_prod のように設定する.

    ◆ 設定例

  6. Discourse 用データベースの新規作成 (Create a database)

    関連する外部ページhttps://github.com/discourse/discourse/blob/main/docs/INSTALL.md

    cd /var/www/discourse
    createdb discourse_prod
    RUBY_GC_MALLOC_LIMIT=90000000 RAILS_ENV=production bundle exec rake db:migrate
    RUBY_GC_MALLOC_LIMIT=90000000 RAILS_ENV=production bundle exec rake assets:precompile
    
  7. データのベースの一覧表示 (List Databases)
    psql -U discourse -l
    
  8. サーバの起動
    bundle exec rails s
    

    (注: このコマンドは開発用の軽量Webサーバを起動するものであり、プロダクション環境での運用には適さない。プロダクション環境ではPuma/UnicornなどのアプリケーションサーバをNginxと組み合わせて使用し、Sidekiqなどのバックグラウンドジョブも別途起動する必要がある。Discourseの公式ドキュメントではDockerでのデプロイが最も推奨されている。また、Discourseは多くのメモリ(最低2GB RAM推奨)を使用するため、適切なシステムリソースの確保とスワップ領域の設定が重要である。)

  9. http://localhost:3000 をWebブラウザで開いてみる

補足事項

本記事はDiscourseの手動インストール手順を解説しているが、Discourseの公式ドキュメントでは、管理やアップデートが容易なDockerイメージを用いたインストール方法を推奨している。Ubuntu 24.04 LTS は Docker インストールの公式サポート対象OSである。

プロダクション環境で運用する場合は、ファイアウォール(例: ufw)を設定して不要なポートを閉じ、Webアクセスに必要なポート(通常 80/443)のみを開ける必要がある。

また、セキュリティと信頼性の観点から、HTTPS (SSL/TLS) の設定が必須である。NginxでLet's Encryptなどの証明書を設定する方法を別途確認する必要がある。

Discourse の多くの機能はメールに依存するため、SMTP サーバの適切な設定が必須である。