Azure での Discourse のセットアップ

このガイドは、Azure で Discourse サイトをセルフホストしたい方向けのものであり、Linux VM を作成するために必要な初期の Azure ポータルの手順を解説します。その後、ホスティング環境に依存しない通常のクラウドインストールガイドに従って設定を完了できます。セルフホストには興味がないが、Discourse フォーラムのホスティングを当方に依頼したい場合は、こちらからサインアップしてください。

1) リソースグループの作成

VM を作成する前に、まずリソースグループを作成します。Discourse サイトに関連するすべてのもの(VM のストレージディスク、ネットワーク、セキュリティグループ、Blob ストレージなど)はここに配置されます。リソースグループを作成するには、緑色のプラス記号をクリックして「リソースグループ」を選択し、「リソースグループ名」フィールドを入力、「サブスクリプション」と「リソースグループの場所」を選択してから「作成」ボタンを押します。

2) Linux VM の作成

このガイドでは Ubuntu 16.04 LTS の VM を作成します。そのために再度緑色のプラス記号をクリックし、「Ubuntu Server 16.04 LTS」を検索してください。利用可能な VM の一覧に表示されるはずです。

それを選択し、デプロイモデルが「リソースマネージャー」になっていることを確認してから「作成」をクリックします。

3) 基本設定の構成

「仮想マシンの作成」の「基本」タブが表示されているはずです。VM のセットアップに必要なすべての項目を入力してください。先に作成した「discourse」リソースグループを選択し、VM には「discourse」などの名前を付け、使用するリージョンを選びます。

同じ「基本」タブで、VM のサイズを選択する必要があります。デフォルトでは「Standard D2s v3」(メモリ 8 GB、月額 71.42 ドル)が選択されていますが、「サイズを変更」をクリックして、ワークロードに適した VM サイズを選択してください。

最低限必要な構成として、メモリ 2GB の「B1ms」オプションを選択してください。「B1s」は 1GB と広告されていますが、OS レベルでは実際には約 800MB しか割り当てられず、Discourse を十分に動作させるにはメモリ不足になります。「B1ms」の料金は月額 17.11 ドルです。

次に、Linux ユーザー名を入力し、SSH 公開鍵をアップロードしてください。パスワードによるログインを設定することも可能ですが、SSH キーによるログインが推奨されます。

Web アクセスと SSH アクセスを許可するため、「選択したポートを許可」ラジオボタンを選択し、「受信ポートの選択」ドロップダウンから HTTP、HTTPS、SSH を選びます。セットアップ完了後は、SSH アクセスを自分の IP アドレスのみに制限することを強くお勧めします。

「確認 + 作成」を選択します。「概要」ページで内容に問題がないことを確認し、「作成」ボタンを押してください。VM の作成には数分かかります。

4) VM への SSH 接続

スワップの設定と Discourse のインストールには、コマンドラインへのアクセスが必要です。VM が作成されたら、Azure ポータルからそれを選択し、「概要」画面でパブリック IP アドレスを確認できます。ターミナルを開き、このガイドのステップ 3 で指定したユーザー名を使用して VM へ SSH 接続してください。

VM への SSH 接続方法がわからない場合は、Azure ポータル内の「シリアルコンソール」を使用することもできます。VM を選択し、左側のナビゲーションの一番下にある「シリアルコンソール」をクリックしてください。

これによりシェルが開き、VM 作成前に指定したユーザー名とパスワードを入力できます。パスワードがわからない場合は、「パスワードのリセット」オプションを使用してください。

これでコマンドを入力できるターミナル画面が表示されているはずです。

5) スワップの設定

各 Azure VM には、OS ディスクとは別に一時的なディスクが付属しており、通常は /dev/sdb1 にマウントされます。スワップは OS ディスクではなく、この一時的なディスクに設定してください。その理由は以下の通りです。

この一時的なストレージドライブは VM をホストしている物理マシン上に存在するため、データディスクなどの永続的ストレージと比較して、より高い IOPS と低いレイテンシを実現できます。 - Azure 仮想マシンにおける一時的なドライブの理解

/etc/waagent.conf ファイルを編集し、以下の行を更新してください。

ResourceDisk.Format=y
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=2048

注:すでに OS ドライブ上にスワップが設定されている場合(./discourse-setup によって設定された可能性があるなど)、/etc/fstab 内の /swapfile 行のコメントアウトを解除して無効にすることができます。

vim のようなコマンドラインエディタで /etc/waagent.conf を編集する方法がわからない場合は、以下のコマンドをターミナルにコピー&ペーストして Enter キーを押してください。

sudo sed -i '/ResourceDisk.Format=n/c\\ResourceDisk.Format=y' /etc/waagent.conf && sudo sed -i '/ResourceDisk.EnableSwap=n/c\\ResourceDisk.EnableSwap=y' /etc/waagent.conf && sudo sed -i '/ResourceDisk.SwapSizeMB=0/c\\ResourceDisk.SwapSizeMB=2048' /etc/waagent.conf

これが初めての sudo コマンド実行の場合、パスワードを求められることがあります。

その後、sudo shutdown -r now で VM を再起動してください。

スワップが正常に動作しているか確認するには、VM に再度ログインし、swapon --show と入力してください。以下のような表示が確認できるはずです。

root@azure:~# swapon --show
NAME          TYPE SIZE USED PRIO
/mnt/swapfile file   2G 0B   -2

スワップファイルが /mnt 内に配置されていることがわかります。これは一時的なドライブであるため、正しい設定です。

また、free -h と入力して以下のような表示を確認することもできます。

root@azure:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        174M        1.5G        3.0M        172M        1.5G
Swap:          2.0G          0B        2.0G

スワップの「total」列に値が表示されていれば、スワップが正常に設定されています。

6) Discourse のインストール

Azure 上で Linux VM が作成され、スワップパーティションも設定されたので、公式クラウドインストールガイドに従ってインストールを進めてください。

7) Azure Blob ストレージプラグインのインストール(オプション)

Discourse のインストールが完了したら、Azure Blob ストレージプラグインのトピックにあるインストール手順に従ってください。このプラグインをインストールして有効にすると、ユーザーがアップロードした画像が Linux VM 上ではなく Blob ストレージに保存されるようになります。これによりパフォーマンスが向上し、OS ディスクの容量不足を防ぐことができます。

「いいね!」 33

このスレッドと併せて、メタディスカーススレッド「Discourse installation on Azure not reachable」(Discourse installation on Azure not reachable) も私にとって非常に役立ちました。

「いいね!」 3

Discourse をサーバーレスで Azure にインストールすることは可能ですか?Docker ファーストで、基盤となる VM なしで実行できますか?

サポートされておらず、文書化も十分ではありませんが、可能であるはずです。

ユーザーランチャーを使用してイメージをビルドおよびブートストラップし、リポジトリにプッシュします。次に、ランチャーを使用して、どの環境で起動するかを確認します。次に、その情報を使用して起動します。以前、AWSでそれを実行しました。

さらに文書化されていないのは、launcher2です。これはdiscourse_dockerリポジトリに存在すると思いますが、githubのコメント以外では議論されているのを見たことがありません。

ヘルプが必要で、予算がある場合は、私に連絡するか、#marketplaceに投稿してください。

予算はありますが、それは内部リソースと才能を活用するものです。

PoCとして実行する場合、Discourseチームからサポートを受けることはできますか?