AWS EC2にFlarumを入れて掲示板を作る

VPS は安くても月 1,000 円くらいします。

私も契約していますが、このブログの運営などに使っていて気軽にテストはできないので、登録から一年間の無料枠がある AWS EC2 を使って掲示板を作りたいと思います。(このあと地獄を見ることを私はまだ知らない。)

スポンサーリンク

Flarum とは

掲示板の OSS です。

esoTalk を基にしている、かつ同じ開発者が作ったようです。ベータ版ですが、自分の求めているものに割と近かったので使ってみようと思います。

実は前々日に GCE で SNS の OpenPNE を導入しようとしたのですが、インストールまで済んでサイトを表示するだけ!というところで 403 エラーになり、設定ファイルや権限など書き換えてみたものの解決しなかった…

気づいたとしてもインスタンス消しちまったので関係ねーです。次回トライすることがあれば。

必要な環境

Flarum を使用するためには Web サーバ, MySQL, PHP の入った環境が必要です。Apache (LAMP) ではなく Nginx (LEMP) でも動きます。

また、メモリは 1GB 以上を推奨します。512MB でも動いているという話を聞きますが、GCE で作ろうとしたら composer killed…

600MB では足りなかったかとなんとも残念な気持ち。

EC2

AWS は登録から 12 か月無料のリソースと常時無料のリソースがあります。EC2 は前者しかないようなので気を付けてください。

インスタンスの作成

無料利用枠の対象は t2.micro というインスタンスになります。詳細は Amazon EC2 インスタンスをご覧ください。

AWS ではインスタンス作成時にマシンイメージ (AMI) を選択するようになっていますが、今回は CentOS 7 (x86_64) – with Updates HVM を使います。AMI Marketplace で CentOS で検索すると出ます。

セキュリティグループの設定では SSH に加えて HTTP も選択しておきます。

作成を押すと、キーペアに関するポップが出ます。SSH で接続するのに .pem ファイルを使うので、必ずダウンロードしてください。

EC2 インスタンスに SSH 接続する

操作は Windows 10, RLogin から SSH で行います。

  • Server Address: グローバル IP アドレス、またはパブリック DNS
  • User Name: centos
  • Password: .pem ファイル生成時のパスフレーズ
  • SSH Identity Key: ダウンロードした .pem ファイル

このように設定するとログインできます。

Web サーバの準備

Apache セットアップ

過去記事のApache セットアップのセクションを参考に。MySQL も入れます。

PHP インストール

Flarum は PHP 5.6 以上でないと動かず、CentOS7 の標準リポジトリでは PHP 5.4.16 がインストールされてしまうため、リポジトリを追加する必要があるようです。

(参考) Yum で任意のバージョンの PHP をインストールする | Qiita

また、必要になる拡張モジュールもいくつかあるので確認しておきます。

  • mbstring
  • pdo_mysql
  • openssl
  • json
  • gd
  • dom
  • fileinfo

入っているかどうかは phpinfo(); を使えば確認できます。DOM だけ入っていなかったので、インストール。

Flarum の準備

公式ドキュメントを見ながら進めていきます。

Composer インストール

まず、上記の環境にプラスして Composer が必要らしいのでインストールします。yum や apt などのパッケージマネージャーは使えないので、ドキュメントに従ってダウンロード、インストールします。

今回はこのプロジェクトだけで使うという前提で設定しておきます。

install-dir や filename は指定しなくてもインストールできます。

Flarum インストール?

おっと、エラーが出てしまったようです。

PHP Warning: proc_open(): fork failed – Cannot allocate memory in phar:///home/centos/bin/composer/vendor/symfony/console/Application.php on line 979

何やらメモリが足りないご様子。GCE でも同様のエラーが出て、インスタンスのメモリが 600MB のせいなのかと思い、メモリが 1GB の AWS に移ったつもりだったのですが…

やはり無料枠では厳しいのかと思いつつもよく読むと、スワップがなんちゃらと書いてあります。

大まかには、メモリが足りなくなったときにメモリ上の使っていないデータをスワップファイルとしてストレージに移すことができるらしいです。仮想メモリやスワップメモリと呼ばれるようですが、次の記事を参考にそのスワップ領域を作成しようと試みました。

How To Add Swap on CentOS 7 | DigitalOcean

ところが、いよいよ最後のコマンドを入力したとき、またエラー!

おいまじかよ。EC2 上で CentOS 7 などの XFS ファイルシステムでは実行できないらしいです。

スワップ領域を作る

これはいよいよ手詰まりかと思ったとき、参考になりそうな記事を見つけました。

EC2のCentOS7でSWAP領域を作る方法 | kumonchu.com

EC2 ではストレージが EBS なので課金が心配になるところですが、調べたところ 12 か月の無料利用枠では EBS 汎用 SSD (gp2) ボリュームは 30GB まで使うことができ、同ボリュームには I/O の料金が含まれているそうなので、その点はクリアしました。

(参考)

設定は /etc/rc.d/rc.local に追記します。門外漢すぎてここはコピペさせていただきました。

取得したメモリサイズを基にスワップ領域の大きさを指定し、XFS ファイルシステムであれば dd, それ以外では fallocate で作成するようなコードでしょうか。

加えて、実行権限を与える必要もあるようです。

設定を終えたら、インスタンスを再起動します。

Flarum インストール

今度こそインストール成功しました。何やらこっち使えみたいなのがいっぱい出ていましたがとりあえず動くだろうということでスルー。

インストール先はカレントディレクトリなので、私の場合は /home/centos でした。http://www.example.com/flarum でアクセスできるようにドキュメントルートにコピーします。

conf 設定ファイルで Alias を使えばいいような気もしますが、Forbidden に負けました。

(追記)

インストール先はカレントディレクトリですが、ドキュメントルート下にしておいたほうが後で苦労しなくて済みます。また、アクセスするときは Alias で設定しない限り http://www.example.com/flarum のようになります。

mod_rewrite 有効化

/etc/httpd/conf/httpd.conf を開いてモジュールが有効になっているか見てみます。

修正したら再起動が必要です。

flarum.conf

Apache の場合は次の設定をしようとのことなので、それに従って。

パーミッション設定

775 にしただけでは Hold On! エラーページが出てしまったため、所有者、所有グループを変更しました。

SELinux 無効化

無効化せずに restorecon とかできればいいんですが、実運用するわけではないので今回は妥協…

パーミッションを正しく 775 に設定していても SELinux に阻まれて Directory not writable が表示されるようなので注意が必要です。

一時的に setenforce 0 で指定してもサーバ再起動で元に戻るので、設定ファイルを書き換えます。

enforcing を disabled にします。

Flarum セットアップ

ようやくここまで来ました。記事もかなり長くなってしまいましたが、あと少しです。

MySQL のセットアップ

設定入力

以上のように設定すると、パブリック DNS ~.compute.amazonaws.com/flarum で Flarum のインストールページが開けます。

Forum Title 任意の英数字
MySQL Host localhost
MySQL Database 作ったデータベース名
MySQL Username 作ったユーザー名
MySQL Password パスワード
Table Prefix なくても可
Admin Username 管理用ユーザー名
Admin Email メールアドレス
Admin Password パスワード
Confirm Password 上と同じパスワード

入力して Install を押せば完成!

最後に…?

数時間くらいでできると思っていたのが、GCE, AWS EC2 でこけまくり、Flarum の導入段階でもこけまくり、パーミッション、セキュリティ、スワップ…

そういえば、本来はメールの送信を行うため、SMTP のポートを開けたりしないと…まあ簡単なテストだったからいいか。

……………………あれ、なんか動いてないな。(辛)

The requested resource was not found.

Composer で再インストール

翌日。よく考えたら Composer でインストールするときにドキュメントルート下にしとけばいいのでは?と思って、コピーで設置したディレクトリ以下ファイル群と flarum に使っていたデータベースを全部消してやり直したらうまくいきました。

(上の記事も修正したためコマンドは同じ)

URL を変更するときの注意点

ブラウザで MySQL などの情報を入力してインストールを終えると config.php が生成されるため、URL を単純に CNAME などで変更することができません。

flarum/config.php の url を新しい URL に対応できるように変更して保存することで、エラーが出なくなります。

(参考) Problems with POST requests when using CNAME records Log In to Reply

ちなみに、ここでスキームを http:// と設定しているのは、確認メールのリンクに使われるからです。参考記事では単に // としていますが、これだとメール内でリンクにならずにめんどくさかったりします。https:// に対応するときは?って感じですが。

Apache の Alias 設定で /flarum 下ではなく / 下で表示できればよかったんですが、conf ファイルと config.php をいじっただけでは、その下の階層に接続できなくなってしまい、トップページしか表示できません。

(シンボリックリンクとか使えばできるのか…?)

最初からルートディレクトリ下にインストールするのが良さげかもしれません。

今度こそ最後に

掲示板の OSS は他にも esoTalk とか Discourse とかがあります。前者は Flarum の前身のような存在ですが、インストールはより楽そうです。後者は Ruby on Rail なので、PHP より Ruby 使いたい人とか。デザインも割といい感じです。

苦労しかなかったけど、無事完成です。お疲れさまでした。

スポンサーリンク

コメント・質問する