EC2上にopenfireをインストールする


openfireのサイト： https://www.igniterealtime.org/projects/openfire/

openfireはXMPPでチャットをするために使うことのできるサーバーです。EC2にopenfireをインストールして、チャットが出来るところまで試してみます。

# EC2インスタンスの作成

EC2インスタンスをAWSのコンソールから作成します。基本はデフォルトでいいですが、セキュリティーグループの設定に以下の設定を追加します。

|ポート番号|送信元|説明|
|--------+-----+----|
|5222|任意の場所|チャットの通信。どこからでも行えるようにする|
|9090|マイIP|管理画面用。作業しているPCからのみ開けるようにする|

![security-group.png](https://qiita-image-store.s3.amazonaws.com/0/75307/6b3deefb-e53c-6b86-71e9-8f6d1712ef3c.png "security-group.png")


こうして作成したEC2インスタンスには、パブリックDNS名が用意されます。これはこの後openfireのインストールで必要なのでメモしておいてください。今回は`ec2-52-68-129-98.ap-northeast-1.compute.amazonaws.com`となります。

※ このDNS名はグローバルIPと共に、インスタンスの再起動により都度変更されます。

![fqdn.png](https://qiita-image-store.s3.amazonaws.com/0/75307/c24341bc-4ff2-8236-b72b-89d61dc81d6a.png "fqdn.png")

# openfireのインストール

インストールは、EC2インスタンス上で行います。まずはSSHでEC2インスタンスに接続してください。

```
$ssh -i (EC2インスタンスを作成する時に使った秘密鍵) ec2-user@ec2-52-68-129-98.ap-northeast-1.compute.amazonaws.com
Last login: Sun Sep 18 06:00:40 2016 from *****************

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.03-release-notes/
13 package(s) needed for security, out of 26 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-6-209 ~]$
```

openfireはrpmが提供されています。そのため、openfireの公式サイトからrpmをダウンロードして、簡単にインストールすることができます。

```
[ec2-user@ip-172-31-6-209 ~]$ wget --content-disposition http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire-4.0.3-1.i386.rpm
--2016-09-17 06:04:26--  http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire-4.0.3-1.i386.rpm
www.igniterealtime.org (www.igniterealtime.org) をDNSに問いあわせています... 52.58.216.59
www.igniterealtime.org (www.igniterealtime.org)|52.58.216.59|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://download.igniterealtime.org/openfire/openfire-4.0.3-1.i386.rpm [続く]
--2016-09-17 06:04:27--  http://download.igniterealtime.org/openfire/openfire-4.0.3-1.i386.rpm
download.igniterealtime.org (download.igniterealtime.org) をDNSに問いあわせています... 52.58.216.59
download.igniterealtime.org (download.igniterealtime.org)|52.58.216.59|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 97094567 (93M) [application/x-rpm]
`openfire-4.0.3-1.i386.rpm' に保存中

openfire-4.0.3-1.i386.rpm               100%[=============================================================================>]  92.60M  3.86MB/s    in 23s

2016-09-17 06:04:50 (3.97 MB/s) - 'openfire-4.0.3-1.i386.rpm' へ保存完了 [97094567/97094567]

[ec2-user@ip-172-31-6-209 ~]$ sudo rpm -ivh openfire-4.0.3-1.i386.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:openfire-4.0.3-1                 ################################# [100%]
```

# 使用するJavaの変更

openfireにはJDKが同梱されていますが、これはAmazon Linuxの64bit環境では動作しません。そこで、`/etc/sysconfig/openfire`を編集して、Amazon LinuxにもともとインストールされているJDKに変更します。

```sh:/etc/sysconfig/openfire
# ファイルの末尾に以下の1行を追加
JAVA_HOME=/etc/alternatives/jre
```

# openfireの起動

openfireはサービススクリプトが用意されているので、serviceコマンドで起動できます。起動したかどうかはpsコマンドで確認できます。

```
[ec2-user@ip-172-31-6-209 ~] sudo service openfire start
Starting openfire:
[ec2-user@ip-172-31-6-209 ~]$ ps -ef | grep openfire
daemon   23696     1 47 14:18 ?        00:00:02 /etc/alternatives/jre/bin/java -server -DopenfireHome=/opt/openfire -Dopenfire.lib.dir=/opt/openfire/lib -classpath /opt/openfire/lib/startup.jar -jar /opt/openfire/lib/startup.jar
ec2-user 23728 23624  0 14:18 pts/0    00:00:00 grep --color=auto openfire
```

# openfireの初期設定

openfireが起動したら、ブラウザで`http://ドメイン名:9090/`を開きます。管理画面が起動するので次の順に設定していきます。

* 'Choose Language' → 日本語はないので英語を選んでおくのが無難
* 'Server Settings' → DomainにEC2インスタンスを作成した時に記録したパブリックDNS名を入れる
* 'Database Settings' → 今回は説明用なので、何もインストールしなくても利用可能な"Embedded Database"を指定する(*1)
* 'Profile Settings' → openfireでユーザーを管理する'Default'を選択する(*2)
* 'Administrator account' → 管理画面にログインして各種設定を行うためのアカウント。メールアドレスに関係なく、ログインする時のアカウント名は'admin'となることに注意

(*1) 本番環境で利用する時にはEmbedded Databaseは信頼性が低いのでお勧めできない。代わりに"Standard Database Connection"を指定して、既存のデータベースへの接続情報を設定すること。
(*2) 'Directory Server(LDAP)'を選ぶと、既存のLDAPサーバーに登録されているユーザーでログインさせるようにすることも可能

# openfireの管理画面を開く

初期設定が終わると、openfireのインストールは終了です。もう一度ブラウザで`http://ドメイン名:9090/`を開いてください。ログイン画面が開くので、以下の情報を入力してログインします。


|入力項目|値 |
|-------+---|
|username|'admin'固定|
|パスワード|openfireの初期設定で入力したパスワード|

以下の管理画面が表示されれば、完了です。

![スクリーンショット 2016-09-18 14.54.20.png](https://qiita-image-store.s3.amazonaws.com/0/75307/557fac35-8292-c21b-f86e-167e2684eb5b.png "スクリーンショット 2016-09-18 14.54.20.png")