groonga-httpdのセットアップでつまづかないための方法

# はじめに

**Groonga 3.0.1以降ではgroonga-httpdの設定ファイルのデフォルトが変更されたため、この記事の内容は現在では古くなっています。**

2013年2月9日にオープンソースの[カラムストア機能付き全文検索エンジンGroonga](http://groonga.org/ja/) 3.0.0をリリースしました。

3.0.0はおよそ1年ぶりのメジャーアップデートリリースです。

以前のメジャーバージョンである2.xから3.xになるまでに、サーバー用途として使うのに便利な設定済みパッケージも追加しました。

それまではgroongaコマンドから直接起動していたのが、サービスとして普通に起動/終了できるようになっています。

設定済みパッケージには以下の3つがあります。

* groonga-server-http (HTTP)
* groonga-server-gqtp (GQTP)
* groonga-httpd (HTTP)

これを見て、HTTPを使っているパッケージが複数あるのと、GQTPって何だと思われるかも知れません。

HTTPを使っているパッケージが複数あるのは、機能に違いがあるからです。詳細は[比較](http://groonga.org/ja/docs/server/http/comparison.html)を参照してください。
簡単に言うと、groonga-server-httpよりgroonga-httpdパッケージのほうが[nginx](http://nginx.org/)をベースにしているので高機能です。

GQTPというのは[Groonga Query Transfer Protocol](http://groonga.org/ja/docs/spec/gqtp.html)のことで、Groonga専用に設計された独自プロトコルです。

今回はこれらパッケージのうち、groonga-httpdのセットアップでつまづかないための方法を紹介します。

# groonga-httpdパッケージのインストール

groonga-httpdは各種ディストリビューション向けにパッケージを提供しているので、[インストール](http://groonga.org/ja/docs/install.html)手順に従ってgroongaがインストールできている状態であれば、以下のようにして追加インストールすることができます。

Debian/Ubuntuの場合:

```sh
sudo apt-get install -y groonga-httpd
```

CentOS/Fedoraの場合:

```sh
sudo yum install -y groonga-httpd
```

# groonga-httpdの動作確認をする

Debian/Ubuntuの場合、パッケージをインストールすると自動的にサービスを起動するようになっているので、プロセスを確認すると以下のようにgroonga-httpdがいるはずです。

```sh
% ps -ef|grep groonga
root      5956     1  0 11:05 ?        00:00:00 nginx: master process /usr/sbin/groonga-httpd
```

では、ブラウザを起動して http://localhost:10041 へアクセスしてみてください。

Groongaの管理画面が表示されたでしょうか?

実は、素の状態では表示されません。ちょっとだけ設定ファイルを変更する必要があります。

# groonga-httpdの設定を変更する

groonga-httpdはnginxをベースにしているため、groonga-server-httpよりもできることが増えます。
そのため、専用の設定ファイルが用意されています。

設定ファイルの場所は、[groonga-httpd](http://groonga.org/ja/docs/server/package.html#groonga-httpd)に記載してありますが、以下にあります。

```
/etc/groonga/httpd/groonga-httpd.conf
```

groonga-httpdの場合、データベースにアクセスするユーザーを設定ファイルで任意に設定することができます。


```
# Match this to the file owner of groonga database files if groonga-httpd is
# run as root.
#user groonga groonga;
```

3.0.0では、デフォルトではユーザーの設定はコメントアウトされていました。
これはgroonga-httpdを利用する人に設定をまかせているからです。

ただ、コメントアウトしたままだと、ワーカープロセスをnobodyとして起動しようとするため、groongaのデータベースへアクセスする権限がないと失敗します。

最初に起動しているプロセスを確認したときにマスタープロセスのみでワーカープロセスがいないのはそのためです。

データベースにアクセスするのがgroongaユーザーのままでよければ、このコメントアウトをはずして有効にします。

```
# Match this to the file owner of groonga database files if groonga-httpd is
# run as root.
user groonga groonga;
```

設定ファイルを変更したら、サーバーを再起動します。

**なお、3.0.1以降ではデフォルトで有効となっているため、groongaユーザーのままで運用する場合は、上記の操作は不要です。**

Debian/Ubuntuの場合:

```sh
% sudo service groonga-httpd restart
```

Fedoraの場合:

```sh
% sudo systemctl restart groonga-httpd
```

サーバーを再起動した後で、以下のようにしてプロセスを確認します。

```sh
% sudo service groonga-httpd restart
 * Restarting a HTTP server for groonga which provides full-text search engine and column store groonga-httpd [ OK ] 
% ps -ef|grep groonga
root      6542     1  0 11:32 ?        00:00:00 nginx: master process /usr/sbin/groonga-httpd
groonga   6544  6542  0 11:32 ?        00:00:00  \_ nginx: worker process  
```

先ほどとは違って、worker processというのがgroonga-httpdの下にぶらさがっているのがわかります。

では、先程と同様にブラウザからhttp://localhost:10041にアクセスしてみてください。

無事、管理画面が表示されるはずです。

# まとめ

groonga-httpdをセットアップしたときに、データベースにアクセスするユーザーとその権限が一致しないと失敗するというハマりポイントとその対策について紹介しました。

Groongaに興味を持ったなら、まずは[インストール](http://groonga.org/ja/docs/install.html)して試してみてください。

[チュートリアル](http://groonga.org/ja/docs/tutorial.html)も用意しています。