前書き

Apache CouchDBは、Redis、Cassandra、MongoDBと同様、_NoSQLデータベース_です。 CouchDBは、本質的に非リレーショナルであるJSONドキュメントとしてデータを保存します。 これにより、CouchDBのユーザーは、実世界の対応物と非常によく似た方法でデータを保存できます。

CouchDBは、コマンドラインまたはFutonと呼ばれるWebインターフェイスから管理できます。 Futonを使用して、CouchDBのデータベース、ドキュメント、ユーザーの作成や操作などの管理タスクを実行できます。

目標

この記事の終わりまでに、次のことを行います。

  • Ubuntu 14.04を実行しているドロップレットにCouchDBをインストールします

  • 同じサーバーにFutonをインストールしてください

  • CouchDBインストールを保護しました

  • 安全なトンネルを使用して、ローカルマシンからFutonを使用してCouchDBにアクセスします

  • CouchDBに管理ユーザーを追加する方法を知っている

  • Futonを使用してCouchDBでCRUD操作を実行する

  • コマンドラインからCouchDBを使用してCRUD操作を実行する

前提条件

以下の前提条件を完了してください。

  • Ubuntu 14.04ドロップレット

  • 管理者権限を持つ非ルートユーザーとしてサーバーにログインしています(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntuでの初期サーバーセットアップ14.04])

ステップ1-サーバーの準備

CouchDBをインストールする前に、サーバーがセットアップされていることを確認する必要があります。

システムを更新することから始めます。

sudo apt-get update

ソースリポジトリを管理できるソフトウェアをインストールします。

sudo apt-get install software-properties-common -y

適切なリポジトリから最新のCouchDBバージョンを取得するのに役立つPPAを追加します。

sudo add-apt-repository ppa:couchdb/stable -y

新しいPPAを追加したので、システムを更新して、最新のパッケージ情報が含まれるようにします。

sudo apt-get update

これで、CouchDBとFutonをインストールする準備が整いました。

ステップ2-CouchDBのインストール

以前にこのサーバーにCouchDBをインストールしていた場合は、既存のバージョンを削除することから始めます。

sudo apt-get remove couchdb couchdb-bin couchdb-common -yf

CouchDBをインストールします。

sudo apt-get install couchdb -y

これにより、CouchDBとFutonがサーバーにインストールされます。

デフォルトでは、CouchDBは* localhost で実行され、ポート 5984 *を使用します。 コマンドラインから `+ curl +`を実行することで、この基本情報を取得できます:

curl localhost:5984

次のようなものが得られるはずです。

Output{"couchdb":"Welcome","uuid":"b9f278c743b5fc0b971c4e587d77582e","version":"1.6.1","vendor":{"name":"Ubuntu","version":"14.04"}}

`+ curl -X PUT +`コマンドで新しいデータベースを作成できるようになりました:

curl -X PUT localhost:5984/new_database

結果は次のようになります。

Output{"ok":true}

ステップ3-CouchDBインストールの保護

デフォルトでは、CouchDBのインストール時に作成されるファイルとディレクトリの一部は* root *ユーザーとグループに属します。 開発中はこれで問題ありませんが(推奨されませんが)、実稼働環境ではセキュリティリスクになる可能性があります。

CouchDBがインストールされると、* couchdb という名前のユーザーとグループが作成されます。 このセクションでは、CouchDBファイルの所有権と許可を couchdb *ユーザーとグループに変更します。

所有権の変更_CouchDBプロセスがアクセスできるものを変更し、許可の変更_who_がCouchDBファイルとディレクトリにアクセスできます。

所有権と許可を変更する前に、CouchDBを停止します。

sudo stop couchdb

+ / usr / lib / couchdb ++ / usr / share / couchdb +、および `+ / etc / couchdb `ディレクトリの所有権、および ` / usr / bin / couchdb +`実行可能ファイルを変更します。所有者は* couchdb であり、 couchdb *グループに属していること。

sudo chown -R couchdb:couchdb /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

ここで、 + / usr / lib / couchdb ++ / usr / share / couchdb +、および `+ / etc / couchdb `ディレクトリ、および ` / usr / bin / couchdb +`実行可能ファイルのパーミッションを変更します。 、* couchdb ユーザーと couchdb *グループは(CouchDBインストールへの)完全なアクセス権を持ち、他のユーザーはこれらのファイルとディレクトリにアクセスできません。

sudo chmod -R 0770 /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

あとは、CouchDBを再起動するだけです。

sudo start couchdb

これで、CouchDBは、* root ユーザーまたは root *グループのいずれかに属するファイルまたはディレクトリなしで、稼働しているはずです。

ステップ4-布団へのアクセス

CouchDBはFutonと呼ばれる便利なWebベースのコントロールパネルを提供します。 *ローカルワークステーション*からアクセスし、サーバーへのSSH接続を介してトラフィックをトンネリングします。 つまり、サーバーにSSHログインしているユーザーのみがFutonコントロールパネルにアクセスできます。

CouchDBを一般公開せずに安全に接続するには、ローカルポート5984からリモートサーバーのポート5984へのSSHトンネルを作成します。

次のコマンドを使用して、*ローカルコンピューター*から実行し、トンネルをセットアップできます。

ssh -L5984:127.0.0.1:5984 @

接続が開いている間、ポート5984を使用して、お気に入りのWebブラウザーからFutonにアクセスできます。 このURLにアクセスして、便利な布団ページを表示してください。

http://localhost:5984/_utils

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/CYxH1GC.png [Futonホームページのスクリーンショット]

デフォルトでは、FutonにアクセスするすべてのCouchDBユーザーは管理者権限でアクセスします。 これは右下隅で発表されます:

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/hD4Pmx4.png [Admin Partyへようこそ! 誰もが管理者です。 これを修正]

これを変更するには、[* Fix this *]リンクをクリックして、新しい管理者を作成します。

ステップ5-管理ユーザーの追加

CouchDBが稼働しているので、使用を開始しましょう。

管理者ユーザーが作成される前に、すべてのユーザーは管理者権限でCouchDBにアクセスできます(ただし、最初にサーバーへのSSHアクセスが必要です)。

CouchDBの管理者アカウントを作成して、偶発的または不正なデータ損失を防ぐことをお勧めします。

これを行うには、Futonの右下隅に表示される[* Fix this *]リンクをクリックします。 これにより、次のようにCouchDB管理ユーザーを作成できる画面が表示されます。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/VemRmsp.png [管理者ユーザー作成画面]

目的のユーザー名とパスワードを入力します。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/bj6fHXw.png [「admin」などのユーザー名とパスワードを入力してください]

新しいCouchDBユーザー名と安全なパスワードを入力したら、[作成]ボタンをクリックします。 これにより、新しい管理ユーザーが作成されます。 Futonの右下隅のメッセージは、次のようなメッセージを表示してこれを確認します。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/q91ytKn.png [ようこそ管理者! 他の管理者を設定するか、パスワードまたはログアウトを変更します]

それでおしまい! これで、CouchDBサーバーは完全に構成されました。

データベースの使用の詳細については、読み続けてください。

FutonからCRUD操作を実行する

Futonには、基本的なCRUD操作(作成、読み取り、更新、削除)を実行できる、非常にシンプルですが便利なユーザーインターフェイスがあります。

このセクションでは、 `+ todos +`という名前の新しいデータベースを作成し、それに新しいドキュメントを追加してから、このドキュメントを取得、更新、削除します。

SSHトンネルがまだ開いていることを確認してください。 そうでない場合は、次のコマンドを使用して*ローカルコンピューター*からサーバーへの接続を開きます。

ssh -L5984:127.0.0.1:5984 @

まず、 `+ http:// localhost:5984 / _utils / +`のFutonページにアクセスします。

データベースとドキュメントを作成する

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/a2mVsjd.png [Futonホームページ]

`+ todos +`という新しいデータベースを作成するには、画面の[*データベースの作成]リンクをクリックします。 これにより、次のようなダイアログが表示されます。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/b7tzN2C.png [新しいデータベースダイアログ;データベース名を入力してください]

データベースの名前を入力し、[作成]ボタンをクリックします。

これにより、 `+ todos +`という名前の新しいデータベースが作成され、新しく作成されたデータベースでドキュメントの作成と変更を開始できるページに移動します。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/CJQo6up.png [“todos”データベースページ]

ドキュメントの作成

新しいドキュメントを作成するには、ページの[新しいドキュメント]リンクをクリックします。

これにより、新しいドキュメントで画面が開きます。 このドキュメントには、 `+ _id +`フィールドのみが含まれます。 必要に応じてこのフィールドの値を変更することも、そのままにしておくこともできます。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/ktFDUuS.png [フィールドの追加リンクをクリックします。 null値をダブルクリックして更新します]

[*フィールドの追加]リンクをクリックして、このドキュメントに新しいフィールドを追加します。

上記のように、「+ todo 」と「 done 」という2つのフィールドを追加しました。 デフォルトでは、新しいフィールドには「 null」値があります。

値をダブルクリックして変更します。

この例では、「+ todo 」と「 done 」の値フィールドをダブルクリックし、それぞれ「 Task 1+」と「+ false +」の値を入力しました。

値を入力したら、「+ ENTER 」キーを押すか、フィールドの横にある小さな緑色のチェックマークをクリックしてその内容を保存します。 (これを行わないと、フィールドの値は ` null +`のままになります。)これは次のようになります。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/yBiUNZK.png [フィールドと値の作成と保存]

ドキュメントを保存するには、[ドキュメントの保存]リンクをクリックします。 ドキュメントが保存されると、次のように `+ _rev +`フィールドが追加されていることがわかります。

画像:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/820r4Jb.png [_revフィールド]

ドキュメントを読む

`+ todos `リンク(トップバーの ` Overview `リンク)をクリックして、 ` todos +`データベース内の唯一のドキュメントとして、新しく作成されたドキュメントを表示します。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/Bzq3136.png [トドスデータベースページ]

表のドキュメントのキー(ID)をクリックして、ドキュメントの詳細ページにアクセスします。

ドキュメントを編集する

このページでは、次のようにドキュメントフィールドを編集および更新できます。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/9itT5Dt.png [ドキュメントの詳細ページ]

フィールド値を編集するには、それをダブルクリックして編集を開始します。

( `+ _id `および ` _rev `フィールドを除く)任意のフィールドを削除したり、新しいフィールドを追加したり、既存のフィールドの値を変更したりできます。 この例では、次のように、「 done 」フィールドの値を「 false 」から「 true +」に変更しました。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/hrQk7aj.png [フィールド値の変更:「完了」フィールドを「false」から「true」に変更]

変更に満足したら、[ドキュメントを保存]リンクをクリックしてドキュメントを更新します。 そうすると、「+ _ rev +」フィールドの値も更新されていることに気付くでしょう。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/A95Xce2.png [変更を保存]

ドキュメントを削除する

ドキュメントを削除するには、[ドキュメントの削除]リンクをクリックして、確認を求めます。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/EHbvpVj.png [このドキュメントを削除してもよろしいですか?]

*削除*ボタンを押して確認します。

Futonはドキュメントを削除し、 `+ todos +`データベースページに移動します。このページは空になっているはずで、ドキュメントが実際に削除されたことを確認します。

image:https://assets.digitalocean.com/articles/couchdb-ubuntu1404/CJQo6up.png [トドスデータベースページ]

コマンドラインからCRUD操作を実行する

このセクションでは、コマンドラインから `+ curl +`を使用してCouchDBデータベースで基本的なCRUD(作成、読み取り、更新、削除)操作を実行する方法を説明します。

SSHトンネルがまだ開いていることを確認してください。 そうでない場合は、次のコマンドを使用して*ローカルコンピューター*からサーバーへの接続を開きます。

ssh -L5984:127.0.0.1:5984 @

データベースを作成する

データベース「+ new_database +」をまだ作成していない場合は、今すぐ作成してください。 このコマンドは、*ローカルワークステーション*から実行する必要があります。

curl -X PUT http://localhost:5984/new_database -u "admin:password"
{"ok":true}

CouchDBに管理ユーザーを追加したので、新しいデータベースを作成するときに管理ユーザー名とパスワードを送信する必要があります。

結果は次のようになります。

Output{"ok":true}

ドキュメントを作成する

新しいドキュメントを作成することから始めましょう。

curl -X POST -d '{"todo":"task 1", "done":false}' http://localhost:5984/new_database -H "Content-Type:application/json"

このコマンドは、 `+ new_database +`データベースに新しいドキュメントを作成します。

`+ -X `フラグは、HTTP POST操作を実行していることを示します。 JSONドキュメントをPOSTしているため、ヘッダーに続く「 -H 」フラグは、このリクエストのコンテンツタイプを「 application / json 」として設定します。 最後に、JSONドキュメント自体が、 ` -d +`フラグとともに含まれています。

この操作の応答は次のとおりです。

Output{"ok":true,"id":"803da996e1524591ce773d24400004ff","rev":"1-2fc1d70532433c39c9f61480607e3681"}

この応答の `” ok “:true +`部分は、操作が成功したことを示します。 応答には、ドキュメントIDとドキュメントリビジョンをそれぞれ表すフィールド「 id 」と「 rev +」が含まれます。 このドキュメントを変更または削除する必要がある場合、これらのフィールドは両方とも必須です。

この例では、コマンドを指定しなかったため、ドキュメントIDはCouchDBによって生成されました。 必要に応じて、生成した一意のIDを使用してドキュメントを作成できます。

指定されたIDで作成

IDが「+ random_task +」のドキュメントを作成します。

curl -X POST -d '{"_id":"random_task", "todo":"task 2", "done":false}' http://localhost:5984/new_database -H "Content-Type:application/json"

このコマンドは、IDが `+ random_task +`に設定された新しいドキュメントを作成します。 このコマンドに対する応答は次のとおりです。

Output{"ok":true,"id":"random_task","rev":""}

複数のドキュメントを作成

単一のドキュメントを作成することに加えて、ドキュメントを一括で作成することもできます。

curl -X POST -d '{"docs": [{"todo":"task 3", "done":false}, {"todo":"task 4", "done":false}]}' http://localhost:5984/new_database/_bulk_docs -H "Content-Type:application/json"

このコマンドは、POST本文で指定された2つのドキュメントを作成します。 単一文書の挿入と比較すると、2つのわずかな違いがあります。

  1. 単一のドキュメントを挿入する間、POST本体は単なる標準のJSONオブジェクトでした。 一括挿入の場合、POSTボディは `+ docs +`フィールドを持つオブジェクトで構成されます。 このフィールドには、挿入されるドキュメントの配列が保持されます。

  2. 単一のドキュメントを挿入しているときに、データベースを指すURL( + http:// localhost:5984 / new_database +)にPOSTリクエストが送信されました。 ただし、一括挿入のリクエストは、 + http:// localhost:5984 / new_database / _bulk_docs + URLにPOSTします。

一括挿入操作の応答は次のとおりです。

Output[{"ok":true,"id":"803da996e1524591ce773d24400007df","rev":"1-778fd61f8f460d0c1df1bb174279489d"},{"ok":true,"id":"803da996e1524591ce773d2440001723","rev":"1-dc9e84861bba58e5cfefeed8f5133636"}]

ドキュメントを読む

CouchDBデータベースからドキュメントを取得するには、HTTP GETコマンドを発行するだけです。 上記で作成したドキュメントの1つ、「+ random_task +」と呼ばれるドキュメントを取得してみましょう。

curl -X GET http://localhost:5984/new_database/random_task

URLには、取得されるドキュメントのID( + random_task +)が含まれていることに注意してください。 以下に示すように、このGETリクエストへの応答には、ドキュメント全体と、このドキュメントの更新または削除に使用できる「+ _id 」および「 _rev +」フィールドが含まれています。

Output{"_id":"random_task","_rev":"","todo":"task 2","done":false}

ドキュメントを編集する

ドキュメントを更新しようとするとき、 `+ _rev `フィールドを含めることが重要です。 CouchDBは、「 _ rev +」フィールドを含まない更新リクエストを拒否します。 CouchDBはドキュメントの一部だけでなくドキュメント全体を更新するため、更新操作中にドキュメント全体をリクエスト本文で送信する必要があります。

ID「+ random_task +」で作成されたドキュメントを更新するには、次のようにHTTP PUTリクエストを発行する必要があります。

curl -X PUT -d '{"_rev":"", "todo":"task 2", "done":true}' http://localhost:5984/new_database/random_task

必ず `+ _rev +`の値を前の出力で受け取った文字列に置き換えてください。

これによりドキュメントが変更され、「+ done 」フィールドが「 true +」に更新されます。 この要求に対する応答は次のとおりです。

Output{"ok":true,"id":"random_task","rev":""}

応答でわかるように、この特定のドキュメントの「+ rev 」フィールドは、更新後に変更されます。 今後、このドキュメントを更新または削除するリクエストでは、最新の「 rev +」値を使用する必要があります。

ドキュメントを削除する

次のように、この新しい「+ rev +」値を使用して、HTTP DELETEリクエストを使用してこのドキュメントを削除しましょう。

curl -X DELETE http://localhost:5984/new_database/random_task?rev=

上記のGET&PUTリクエストと同様に、DELETEリクエストはドキュメントを指すURLを使用します。 ただし、URLに追加のクエリパラメーターも含まれます。 削除操作が成功するためには、このパラメーター `+ rev `に最新の ` _rev +`値が必要です。

この特定のケースでは、前の手順で更新操作の後に返された値を使用します。 上記のリクエストに対する応答を以下に示します。

Output{"ok":true,"id":"random_task","rev":""}

CouchDBサービスの再起動、停止、開始

CouchDBサービスの開始、停止、再起動は非常に簡単です。 *サーバー*から次の手順を実行します。

再起動

実行中のCouchDBインスタンスを再起動するには、次のコマンドを実行します。

sudo restart couchdb

このコマンドは、実行中のCouchDBインスタンスを再起動し、新しいインスタンスのプロセスIDを表示します。 CouchDBのインスタンスが実行されていない場合、このコマンドを実行すると次のようなメッセージが表示されます

Outputrestart: Unknown instance:

Stop

実行中のCouchDBインスタンスを停止するには、次のコマンドを実行します。

sudo stop couchdb

このコマンドを実行すると、実行中のCouchDBインスタンスが停止し、次のような確認メッセージが表示されます。

Outputcouchdb stop/waiting

開始

CouchDBを起動するには、次のコマンドを実行します。

sudo start couchdb

CouchDBがまだ実行されていない場合、このコマンドを実行するとCouchDBが起動し、次のような確認メッセージが表示されます。

Outputcouchdb start/running, process 12345

一方、CouchDBインスタンスがすでに実行されている場合、上記のコマンドを実行すると、次のようなメッセージが表示されます。

Outputstart: Job is already running: couchdb

状態

CouchDBのステータスを確認する場合は、次のコマンドを使用して確認できます。

sudo status couchdb

CouchDBが実行されている場合、次のようなメッセージが表示されます。

Outputcouchdb start/running, process 12345

CouchDBが実行されていない場合、ステータスを確認すると次のような結果になります。

Outputcouchdb stop/waiting

結論

これで、DropletにCouchDBの完全に機能するセットアップができました。これは、Futonまたはコマンドラインを使用してローカルマシンから安全に管理できます。