序章

Apache CouchDB は、Redis、Cassandra、MongoDBと同様に、NoSQLデータベースです。 CouchDBは、データを非リレーショナルのJSONドキュメントとして保存します。 これにより、CouchDBのユーザーは、実際のデータと非常によく似た方法でデータを保存できます。

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

目標

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

  • Ubuntu14.04を実行しているドロップレットにCouchDBをインストールします
  • 同じサーバーに布団を設置する
  • CouchDBのインストールを保護しました
  • 安全なトンネルを使用して、ローカルマシンからFutonを使用してCouchDBにアクセスします
  • 管理者ユーザーをCouchDBに追加する方法を知っている
  • Futonを使用してCouchDBでCRUD操作を実行する
  • コマンドラインからCouchDBを使用してCRUD操作を実行します

前提条件

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

注:このチュートリアルはroot以外のユーザーを想定していますが、以下の手順を次のように実行できます。 root sudoユーザーを作成したくない場合は、ユーザーも同様です。 root以外のユーザーを使用する場合は、を使用してコマンドを初めて実行するときにパスワードの入力を求められることに注意してください。 sudo.

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

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

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

  1. sudo apt-get update

ソースリポジトリの管理を可能にするソフトウェアをインストールします。

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

注: -y フラグは apt-get 仮定するコマンド Yes インストールプロセス中に表示される可能性のあるすべてのプロンプトへの応答。 プロンプトに手動で応答したい場合は、このフラグを削除できます。

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

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

警告:サーバーに新しいパーソナルパッケージアーカイブ(PPA)を追加するときは、細心の注意を払う必要があります。 誰でもPPAを作成できるため、PPAが信頼できる、または安全であるという保証はありません。 この場合、上記のPPAは公式のものであり、ApacheCouchDBチームによって維持されています。

新しいPPAを追加したので、最新のパッケージ情報を持つようにシステムを更新しましょう。

  1. sudo apt-get update

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

ステップ2—CouchDBをインストールする

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

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

注:新しいドロップレットがある場合は、この手順を無視できます。

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

  1. sudo apt-get install couchdb -y

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

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

  1. curl localhost:5984

注:お持ちでない場合 curl インストールすると、 sudo apt-get install curl それをインストールするコマンド。

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

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

これで、を使用して新しいデータベースを作成できます。 curl -X PUT 指図:

  1. curl -X PUT localhost:5984/new_database

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

Output
{"ok":true}

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

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

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

CouchDBプロセスがアクセスできる所有権コントロールwhatを変更し、CouchDBファイルとディレクトリにアクセスできる権限コントロールwhoを変更します。

所有権と権限を変更する前に、CouchDBを停止してください。

  1. sudo stop couchdb

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

  1. 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インストールへの)完全なアクセス権を持ち、他のユーザーがこれらのファイルとディレクトリにアクセスできないような実行可能ファイル。

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

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

  1. sudo start couchdb

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

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

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

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

ローカルコンピューターから実行する次のコマンドを使用して、トンネルを設定できます。

  1. ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注: sammy をユーザー名に、your_server_ipをドロップレットのIPアドレスに置き換えることを忘れないでください。

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

http://localhost:5984/_utils

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

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

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

CouchDBが稼働しているので、それを使い始めましょう。

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

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

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

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

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

注:管理者ユーザーを作成すると、許可されていないユーザーがデータベース、設計ドキュメント、およびCouchDB構成を削除および変更するのを防ぐことができます。 ただし、ドキュメントの作成やアクセスを妨げることはありません。

サーバーへのSSHアクセスの配布には注意してください。

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

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

布団からCRUD操作を実行する

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

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

注:管理者ユーザーを作成した場合、新しいデータベースを作成するには、管理者としてログインする必要があります。

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

  1. ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

まずは布団のページをご覧ください。 http://localhost:5984/_utils/.

注:このセクションでは、上記の布団へのアクセスセクションで説明されているように設定されたSSHトンネルを使用してCouchDBにアクセスしていることを前提としています。 設定が異なる場合は、正しいURLで布団にアクセスしてください。

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

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

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

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

ドキュメントを作成する

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

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

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

上記のように、次の名前の2つのフィールドを追加しました tododone. デフォルトでは、新しいフィールドには null 価値。

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

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

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

ドキュメントを保存するには、ドキュメントの保存リンクをクリックします。 ドキュメントを保存すると、次のように表示されます。 _rev 次のようにフィールドが追加されました。

ドキュメントを読む

クリックしてください todos リンク(上部のバーの横にある Overview リンク)で、新しく作成されたドキュメントを唯一のドキュメントとして表示します。 todos データベース。

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

ドキュメントを編集する

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

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

任意のフィールドを削除できます( _id_rev フィールド)、新しいフィールドを追加するか、既存のフィールドの値を変更します。 この例では、の値を変更しました done からのフィールド falsetrue 次のように:

変更内容に問題がなければ、[ドキュメントの保存]リンクをクリックしてドキュメントを更新します。 そうすると、の値が _rev フィールドも更新されました。

ドキュメントを削除する

ドキュメントを削除するには、ドキュメントの削除リンクをクリックして、確認を求めるメッセージを表示します。

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

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

コマンドラインからのCRUD操作の実行

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

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

  1. ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注:このセクションではデータベースを使用します new_database 上記のステップ2( CouchDB のインストール)で作成されたものです。 このセクションでは、上記の布団へのアクセスの手順で説明されているように、SSHトンネルを使用してCouchDBにアクセスしていることも前提としています。 設定が異なる場合は、以下で使用するコマンドを実行するときに、URL、PORT、およびデータベース名を適切に置き換えるようにしてください。

データベースを作成する

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

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

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

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

Output
{"ok":true}

ドキュメントを作成する

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

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

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

The -X フラグは、HTTPPOST操作を実行していることを示します。 The -H フラグの後にヘッダーが続くと、このリクエストのコンテンツタイプが次のように設定されます。 application/json JSONドキュメントをPOSTしているので。 最後に、JSONドキュメント自体が含まれています。 -d 国旗。

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

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

The "ok":true この応答の一部は、操作が成功したことを示しています。 応答にはフィールドが含まれます idrev、ドキュメントIDとドキュメントリビジョンをそれぞれ表します。 このドキュメントを変更または削除する必要がある場合は、これらのフィールドの両方が必要になります。

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

指定されたIDで作成

IDを使用してドキュメントを作成します random_task:

  1. 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":"1-bceeae3c4a9154c87db1649473316e44"}

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

単一のドキュメントを作成するだけでなく、ドキュメントをまとめて作成することもできます。

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

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

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

ドキュメントを読む

CouchDBデータベースからドキュメントを取得するのは、HTTPGETコマンドを発行するだけです。 上で作成したドキュメントの1つを取得してみましょう。 random_task.

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

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

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

ドキュメントを編集する

ドキュメントを更新しようとするときは、次の情報を含めることが重要です。 _rev 分野。 CouchDBは、 _rev 分野。 CouchDBはドキュメントの一部だけでなくドキュメント全体を更新するため、更新操作中にドキュメント全体をリクエスト本文で送信する必要があります。

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

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

必ず交換してください _rev 前の出力で受け取った文字列の値。

これにより、ドキュメントが変更され、 done フィールドに true. このリクエストへの応答は次のとおりです。

Output
{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}

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

ドキュメントを削除する

この新しいものを使いましょう rev 次のようにHTTPDELETEリクエストを使用してこのドキュメントを削除する値:

  1. curl -X DELETE http://localhost:5984/new_database/random_task?rev=2-4cc3dfb6e76befd665faf124b36b7f1c

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

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

Output
{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}

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

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

再起動

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

  1. sudo restart couchdb

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

Output
restart: Unknown instance:

止まる

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

  1. sudo stop couchdb

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

Output
couchdb stop/waiting

始める

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

  1. sudo start couchdb

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

Output
couchdb start/running, process 12345

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

Output
start: Job is already running: couchdb

状態

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

  1. sudo status couchdb

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

Output
couchdb start/running, process 12345

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

Output
couchdb stop/waiting

結論

これで、DropletにCouchDBが完全に機能するように設定されました。これは、Futonまたはコマンドラインを使用してローカルマシンから安全に管理できます。