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 がインストールされてしまうため,リポジトリを追加する必要があるようです.

terminal

# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum install yum-utils
# yum-config-manager --enable remi-php56
# yum install php

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

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

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

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

terminal

# yum install php-dom

次に Flarum を準備します.

Flarum の準備

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

Composer インストール

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

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

terminal

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php --install-dir=インストール先 --filename=任意の名前
# php -r "unlink('composer-setup.php');"

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

Flarum インストール?

terminal

# composer create-project flarum/flarum --stability=beta

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

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

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

terminal

# sudo swapon /swapfile
swapon: /swapfile: swapon failed: Invalid argument

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

スワップ領域を作る

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

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

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

参考

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

/etc/rc.d/rc.local

#MAKE SWAP FILE
SWAPFILENAME=/swap.img
MEMSIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`

if [ $MEMSIZE -lt 2097152 ]; then
    SIZE=$((MEMSIZE * 2))
elif [ $MEMSIZE -lt 8388608 ]; then
    SIZE=$MEMSIZE
elif [ $MEMSIZE -lt 67108864 ]; then
    SIZE=$((MEMSIZE / 2))
else
    SIZE=4194304
fi

# SELECT FILE SYSTEM
FSTYPE=`df -T |grep /$ | grep xfs | wc -l`

if [ $FSTYPE -eq 1 ]; then
    # For XFS
    dd if=/dev/zero of=$SWAPFILENAME count=$SIZE bs=1K && mkswap $SWAPFILENAME && swapon $SWAPFILENAME
elif [ $FSTYPE -eq 0 ]; then
    # For EXT4
    fallocate -l "$SIZE"k $SWAPFILENAME && mkswap $SWAPFILENAME && swapon $SWAPFILENAME
fi

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

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

terminal

# chmod +x /etc/rc.d/rc.local

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

Flarum インストール

terminal

# cd /var/www/html
# composer create-project flarum/flarum --stability=beta

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

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

terminal

# cp -r /home/centos/flarum /var/www/html/flarum **do not execute

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

(追記)

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

mod_rewrite 有効化

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

httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

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

terminal

# /etc/rc.d/init.d/httpd restart

flarum.conf

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

terminal

# vi /etc/httpd/conf.d/flarum.conf

flarum.conf

<Directory "/var/www/html/flarum">
  AllowOverride All
  Require all granted
</Directory>

パーミッション設定

terminal

# chown -R apache:apache /var/www/html/flarum
# chmod -R 775 /var/www/html/flarum

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

SELinux 無効化

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

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

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

terminal

# vi /etc/selinux/config
SELINUX=disabled

enforcing を disabled にします.

Flarum セットアップ

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

MySQL のセットアップ

terminal

# mysql -u root -p
Enter Password: ルートのパスワード

mysql> create database データベース名;
mysql> grant all privileges on データベース名.* to ユーザー名@localhost identified by 'パスワード';

設定入力

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

Forum Title任意の英数字
MySQL Hostlocalhost
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 に使っていたデータベースを全部消してやり直したらうまくいきました.

terminal

# cd /var/www/html
# composer create-project flarum/flarum --stability=beta

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

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

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

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

config.php

'url' -> 'http://' . $_SERVER['HTTP_HOST'] . '/flarum',

参考: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 使いたい人とか.デザインも割といい感じです.

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