Amazon Linux にQiitaクローン「Lodge」をインストールする手順

**Qiita、いいですよね！**

Qiitaの使い勝手の良さに感動し、自分のブログへのTech系投稿をやめてしまったくらい（笑）なんですが、業務で使いたいとなると当然Global Publishするわけにいかず、かといってQiita-Teamでは社内のセキュリティ基準を満たせないという人も結構多いのではないでしょうか。
SaaSのほうがメンテナビリティが高いのは重々承知ですが、様々な理由で使えない、、、、って人たちに向けて、@m-yamashita さんがローカルで動くQiitaクローンを作ってくださいました。マジすげぇ！！

↓無料でイントラネット内にナレッジ/ノウハウの共有ができる「Lodge」 - Qiita
http://qiita.com/m-yamashita/items/d6f64db461acd54095f7
↓lodge/lodge: イントラネット内で誰でも構築できる情報共有サービス
https://github.com/lodge/lodge

基本的に上記ページの記載に従ってインストールを進めればいけるはずですが、Rubyスキルの足りない私が何も考えずに見たまんまやったら一部うまく行かなかったので、私なりのコメントを加えつつ手順を解説してみます。
自分なりの手順を加えて解説してみます。

```
あくまで検証目的のための手順なので、いろんな設定がデフォルトのままになっています。
外に開けてLaunchする際は、キーやパスワード、セキュリティグループの設定に注意してくださいね！
```
# インストールをした環境

**AMI ：** amzn-ami-hvm-2016.03.0.x86_64-gp2 (ami-f80e0596)
**環境：** EC2/t2.micro

# 下準備

念のためyum updateしておきます。

```console:console
$ sudo su -
$ yum update -y
```

今回はデータベースとしてMySQLを使うのでMySQLをインストールしておきます。

↓Amazon Linux に MySQL-Server & Client をインストールする - Qiita
http://qiita.com/mamohacy/items/268733a205eeaf60ca31

あとRails環境も必要なのでこちらも準備。
2016年3月末時点でのLodgeは、Ruby2.1.8にしないと動作しないようなので
rbenvで上記バージョンにglobal設定するようにしています。

↓Amazon LinuxにRails環境(rbenv1.0.0 + ruby-build + Ruby2.1.8 + Rails4.2.6 + Bundler1.11.2)をセットアップする - Qiita
http://qiita.com/mamohacy/items/293150602990a5a388d9


さらに、この先のbundle installで必要になるパッケージがあるので先に入れておきます。
他のディストリはわからないのですが、少なくとも今回のバージョンのアマリナでは
これを入れないといくつかのgemsがインストールできません。

```console:console
$ yum install -y libicu-devel cmake mysql-devel
```

# Lodgeインストール

いよいよLodgeのインストールです。
今回は/optにインストールしました。

```console:console
$ cd /opt
$ git clone https://github.com/m-yamashita/lodge.git
$ cd lodge
$ cp -p config/database.example.yml config/database.yml
$ vi database.yml
  # === mysql ===      ←　このへんのコメントアウトを外す
  adapter: mysql2
  host: localhost
  username: root
  password: ___input-your-password___  <- ここは適宜書き換え
  encoding: utf8
  pool: 5
$ pwd
/opt/lodge
$ bundle install --path vendor/bundle
・・・・・・・・・・
Bundle complete! 54 Gemfile dependencies, 161 gems now installed.
Bundled gems are installed into ./vendor/bundle.
・・・・・・
```

ここでエラーが出るようであれば、yumパッケージが足りないので、エラーメッセージに
従ってgemのインストールとyumのインストールを繰り返せば殆どの場合でクリアになります。
おそらく問題の多くはrubyのバージョンとインストールを行っているユーザーの問題で
私もかなりこのあたりはハマりました。。。。。

次に、環境設定ファイルを編集します。

```console:console
$ pwd
/opt/lodge
$ cp -p .env.example .env
$ vi .env

様々な設定をこのファイルで行えるのですが、初回起動時にメールでインビテーションを飛ばしてアカウント登録を行う関係から
最低限下記の内容については変更する必要があります。

'''console:console
### アプリケーションのドメイン
LODGE_DOMAIN      = example.com　　← デフォルトだとTCPの3000番ポートで起動するので、EC2に振ったEIP:3000でもOK。
　　　　　　　　　　　　　　　　　　　　ここを変更しないとレジストレーション承認のURLの先頭が「http://example.com/〜」に
　　　　　　　　　　　　　　　　　　　　なってしまい、手動で書き換えないと登録できなくなってしまうので注意。

# メールの送信元として扱われるアドレス
MAIL_SENDER       = xxxxxx@gmail.com　← メールレジスト時の送付元に入るアドレスを入れます

# DELIVERY_METHOD = smtp の場合のみ
# 以下の設定が有効です（それ以外は無視されます）
SMTP_ADDRESS              = smtp.gmail.com
SMTP_PORT                 = 587
SMTP_USERNAME             = xxxxxx@gmail.com
SMTP_PASSWORD             = aaaaaaaaaaaaaaaa
SMTP_AUTH_METHOD          = plain
SMTP_ENABLE_STARTTLS_AUTO = true

```

ここでまたハマったのが、私が使ったGmailでは二段階認証を入れていたため、通常の
パスワードではSMTPが使えなかったです。この場合は「アプリパスワード」なるものを
生成し、それをここに設定することで使えるようになります。

↓メーラーからGmailへの接続時に認証（パスワード）のエラーが生じる場合の対処方法 (2/2)
http://www.atmarkit.co.jp/ait/articles/1409/03/news109_2.html#cause02

この手順で生成されたアプリパスワードを、上記ファイルの「SMTP_PASSWORD」のところに記載します。

データベースの生成と更新

```console:console
$ bundle exec rake db:create RAILS_ENV=production
$ bundle exec rake db:migrate RAILS_ENV=production
```

絵文字の準備

```console:console
$ bundle exec rake emoji
```

サーバ起動

```console:console
$ pwd
/opt/lodge
$ bundle exec rails server thin -e production
=> Booting Thin
=> Rails 4.1.0 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
Thin web server (v1.6.4 codename Gob Bluth)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop
```

この状態で、http://対象のホストのIP:3000/ にアクセスすると、ログインページが表示されるはずです。

## EC2設定の注意点

* EC2に当てるセキュリティグループで自分のアクセス元IPに対して、Inbound設定としてTCP:3000を許可しておく必要があります。
* IPアドレスでアクセスしてもいいですが、ドメインを持っている場合はRoute53に設定を入れて、先の.envファイルの
 LODGE_DOMAINにポートと一緒に設定しておくと良いと思います。デフォルトポートはTCP:３０００です。

## メールが送信されないときは？

だいたいSMTP設定が間違っています。
/opt/lodge/log/production.log を確認すると下記のようなエラーが出ているはずなので、メール設定を見なおして下さい。

```console:console
$ cat /opt/lodge/log/production.log
・・・・・・
I, [2016-03-31T12:19:58.120956 #821]  INFO -- :   Rendered users/mailer/confirmation_instructions.html.erb (0.8ms)
I, [2016-03-31T12:19:59.500115 #821]  INFO -- :
Sent mail to mm-oohashi@kddi.com (1377.3ms)
I, [2016-03-31T12:19:59.502487 #821]  INFO -- : Completed 500 Internal Server Error in 1694ms
F, [2016-03-31T12:19:59.504597 #821] FATAL -- :
Net::SMTPAuthenticationError (534-5.7.9 Application-specific password required. Learn more at
):
  config/initializers/quiet_assets.rb:6:in `call_with_quiet_assets'
・・・・・・・
```

# 総括

巷にインストールに関する情報があまり無く、Rubyスキルの低い私はrbenvやgemsやRailsの勉強をやりなおしました。
結果的に更から４回ほど作りなおして成功できました。

使い勝手はなかなかに良く、テキストベースのプライベートQiitaとして使うのにはこれで十分な感じがします。

↓記事一覧
![スクリーンショット 2016-04-01 11.58.38.png](https://qiita-image-store.s3.amazonaws.com/0/110606/65024789-7f50-cee1-a6d8-a29cb61f9e5d.png)

↓記事の個別ページ
![スクリーンショット 2016-04-01 12.03.01.png](https://qiita-image-store.s3.amazonaws.com/0/110606/9956b0b0-8732-e60c-571d-bc157dc5d6bf.png)
![スクリーンショット 2016-04-01 12.03.27.png](https://qiita-image-store.s3.amazonaws.com/0/110606/d1f114b3-42d7-23b0-3bd4-f22fcac7cae5.png)

↓編集画面
![スクリーンショット 2016-04-01 12.04.04.png](https://qiita-image-store.s3.amazonaws.com/0/110606/750ac439-b9ed-33c5-811c-833cb5ccf197.png)

↓プレビュー機能もついてます
![スクリーンショット 2016-04-01 12.04.23.png](https://qiita-image-store.s3.amazonaws.com/0/110606/91f8f18f-dad0-db0d-951e-07b5ca187812.png)



ただ、画像ファイルのアップロード機能とかがないので単品運用ではちょっと厳しい気もします。
見た目や使い勝手といった面で、どうしても本家からは見劣りしてしまうところもありますが、
GitHub上で公開されていることですし、誰かにForkされて開発が進むことを期待します。

チーム内でももう少し使い込んでみたいと思います。


# 参考にさせて頂いたサイト

↓Lodgeを導入するとき注意すること - Qiita
http://qiita.com/kaho2063/items/68c66d153a1978771a02
↓CentOSにlodgeを導入する - Qiita
http://qiita.com/shu920921/items/1cc92f2958ff13602781