Comment installer CouchDB et Futon sur Ubuntu 14.04

introduction

Apache CouchDB, comme Redis, Cassandra et MongoDB, est une base de données NoSQL. CouchDB stocke les données sous forme de documents JSON non relationnels. Cela permet aux utilisateurs de CouchDB de stocker les données de manière très similaire à leurs homologues du monde réel.

Vous pouvez gérer CouchDB à partir de la ligne de commande ou d’une interface Web appelée Futon. Futon peut être utilisé pour effectuer des tâches administratives telles que créer et manipuler des bases de données, des documents et des utilisateurs pour CouchDB.

Buts

À la fin de cet article, vous pourrez:

  • Avoir CouchDB installé sur un Droplet sous Ubuntu 14.04

  • Avez-vous installé sur le même serveur

  • Avoir sécurisé l’installation de CouchDB

  • Accéder à CouchDB en utilisant Futon depuis votre ordinateur local, en utilisant un tunnel sécurisé

  • Savoir comment ajouter un utilisateur administrateur à CouchDB

  • Effectuer des opérations CRUD avec CouchDB en utilisant Futon

  • Effectuer des opérations CRUD avec CouchDB à partir de la ligne de commande

Conditions préalables

Veuillez remplir les conditions préalables suivantes:

Étape 1 - Préparation du serveur

Avant de pouvoir installer CouchDB, nous devons nous assurer que le serveur est configuré pour cela.

Commencez par mettre à jour le système:

sudo apt-get update

Installez le logiciel qui vous permet de gérer les référentiels sources:

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

Ajoutez le PPA qui nous aidera à extraire la dernière version de CouchDB du référentiel approprié:

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

Maintenant que nous avons ajouté un nouveau PPA, mettons à jour le système afin qu’il dispose des informations de package les plus récentes:

sudo apt-get update

Nous sommes maintenant prêts à installer CouchDB et Futon.

Étape 2 - Installation de CouchDB

Si vous aviez précédemment installé CouchDB sur ce serveur, commencez par supprimer la version existante:

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

Maintenant, installez CouchDB:

sudo apt-get install couchdb -y

Cela installera CouchDB et Futon sur votre serveur.

Par défaut, CouchDB s’exécute sur * localhost * et utilise le port * 5984 *. Vous pouvez récupérer ces informations de base en exécutant + curl + à partir de la ligne de commande:

curl localhost:5984

Vous devriez obtenir quelque chose de similaire à ce qui suit:

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

Vous pouvez maintenant créer une nouvelle base de données avec la commande + curl -X PUT +:

curl -X PUT localhost:5984/new_database

Les résultats devraient ressembler à ceci:

Output{"ok":true}

Étape 3 - Sécuriser l’installation de CouchDB

Par défaut, certains fichiers et répertoires créés lors de l’installation de CouchDB appartiennent à l’utilisateur et au groupe * root *. Bien que cela soit correct (bien que cela ne soit pas conseillé) pendant le développement, cela pourrait constituer un risque de sécurité pour la production.

Lorsque CouchDB est installé, il crée un utilisateur et un groupe nommé * couchdb *. Dans cette section, nous allons changer la propriété et la permission des fichiers CouchDB en utilisateurs et groupes * couchdb *.

Modification des contrôles de propriété à ce que le processus CouchDB peut accéder, et modification des contrôles des autorisations _qui peut accéder aux fichiers et répertoires CouchDB.

Avant de modifier la propriété et les autorisations, arrêtez CouchDB:

sudo stop couchdb

Changer la propriété des répertoires + / usr / lib / couchdb +, + / usr / share / couchdb + et + / etc / couchdb +, et du fichier exécutable + / usr / bin / couchdb +, tels que que leur propriétaire est * couchdb * et qu’ils appartiennent au groupe * couchdb *.

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

Maintenant, changez les permissions des répertoires + / usr / lib / couchdb +, + / usr / share / couchdb +, et + / etc / couchdb +, et du fichier exécutable + / usr / bin / couchdb + , de telle sorte que l’utilisateur * couchdb * et le groupe * couchdb * ont un accès complet (à l’installation de CouchDB) alors qu’aucun autre utilisateur n’a accès à ces fichiers et répertoires.

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

Il ne reste plus qu’à redémarrer CouchDB:

sudo start couchdb

CouchDB devrait maintenant être opérationnel sans aucun de ses fichiers ou répertoires appartenant à l’utilisateur * root * ou au groupe * root *.

Étape 4 - Accéder au futon

CouchDB offre un panneau de commande pratique sur le Web appelé Futon. Nous allons y accéder à partir de votre * station de travail locale *, en canalisant le trafic via une connexion SSH à votre serveur. Cela signifie que seuls les utilisateurs ayant une connexion SSH sur votre serveur peuvent accéder au panneau de configuration de Futon.

Pour vous connecter en toute sécurité à CouchDB, sans le rendre public, vous pouvez créer un tunnel SSH à partir de votre port local 5984 vers le port 5984 du serveur distant.

Vous pouvez utiliser la commande suivante, exécutée à partir de votre * ordinateur local *, pour configurer le tunnel:

ssh -L5984:127.0.0.1:5984 @

Lorsque la connexion est ouverte, vous pouvez accéder à Futon à partir de votre navigateur Web préféré, en utilisant le port 5984. Visitez cette URL pour afficher la page utile Futon:

http://localhost:5984/_utils

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/CYxH1GC.png [Capture d’écran de la page d’accueil Futon]

Par défaut, tous les utilisateurs de CouchDB ayant accès à Futon le font avec des droits d’administrateur. Ceci est annoncé dans le coin inférieur droit:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/hD4Pmx4.png [Bienvenue dans la soirée d’administration! Tout le monde est admin. Répare ça]

Vous pouvez changer cela en cliquant sur le petit lien * Corriger ce * et en créant de nouveaux administrateurs.

Étape 5 - Ajout d’un utilisateur administrateur

Maintenant que CouchDB est opérationnel, commençons à l’utiliser.

Avant la création d’un utilisateur administrateur, tous les utilisateurs peuvent accéder à CouchDB avec des privilèges d’administrateur (bien qu’ils aient d’abord besoin d’un accès SSH au serveur).

Il est recommandé de créer un compte d’administrateur pour CouchDB afin d’empêcher toute perte de données accidentelle ou non autorisée.

Pour ce faire, cliquez sur le lien * Réparer ce * qui apparaît dans le coin inférieur droit de Futon. Cela fera apparaître un écran vous permettant de créer un utilisateur administrateur CouchDB, comme suit:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/VemRmsp.png [Écran de création d’utilisateur Admin]

Entrez le nom d’utilisateur et le mot de passe souhaités:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/bj6fHXw.png [Entrez un nom d’utilisateur, tel que "admin", et un mot de passe]

Après avoir entré votre nouveau nom d’utilisateur CouchDB et un mot de passe sécurisé, cliquez sur le bouton * Créer *. Cela créera le nouvel utilisateur admin. Le message dans le coin inférieur droit de Futon le confirmera en affichant un message semblable au suivant:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/q91ytKn.png [Bienvenue administrateur! Configurer plus d’administrateurs ou changer le mot de passe ou se déconnecter]

C’est ça! Notre serveur CouchDB est maintenant entièrement configuré.

Pour en savoir plus sur l’utilisation de la base de données, continuez à lire.

Effectuer des opérations CRUD à partir de Futon

Futon possède une interface utilisateur très simple mais utile qui vous permet d’effectuer des opérations CRUD de base (créer, lire, mettre à jour et supprimer).

Dans cette section, nous allons créer une nouvelle base de données nommée + todos +, y ajouter un nouveau document, puis récupérer, mettre à jour et supprimer ce document.

Assurez-vous que votre tunnel SSH est toujours ouvert. Sinon, ouvrez votre connexion au serveur à partir de votre * ordinateur local * avec cette commande:

ssh -L5984:127.0.0.1:5984 @

Commençons par visiter la page Futon à + ​​http: // localhost: 5984 / _utils / +.

Créer une base de données et un document

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/a2mVsjd.png [Page d’accueil de Futon]

Pour créer une nouvelle base de données appelée + todos +, cliquez sur le lien * Créer une base de données * à l’écran. Cela fera apparaître un dialogue comme suit:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/b7tzN2C.png [Dialogue nouvelle base de données; entrer le nom de la base de données]

Entrez le nom de la base de données et cliquez sur le bouton * Créer *.

Cela créera une nouvelle base de données nommée + todos + et vous mènera à une page où vous pourrez commencer à créer et à modifier des documents dans la base de données nouvellement créée.

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/CJQo6up.png ["todos" Page de la base de données]

  • Créer un document *

Pour créer un nouveau document, cliquez sur le lien * Nouveau document * de la page.

Cela ouvrira un écran avec un nouveau document. Ce document aura juste le champ + _id +. Vous pouvez modifier la valeur de ce champ si vous en avez besoin ou vous pouvez le laisser tel quel.

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/ktFDUuS.png [Cliquez sur le lien Ajouter un champ; double-cliquez sur la valeur null pour la mettre à jour]

Cliquez sur le lien * Ajouter un champ * pour ajouter un nouveau champ à ce document.

Comme on peut le voir ci-dessus, nous avons ajouté deux champs nommés + todo + et + done +. Par défaut, les nouveaux champs ont une valeur + null.

Double-cliquez sur la valeur pour la changer.

Dans cet exemple, nous avons double-cliqué sur les champs de valeur + todo + et + done + et avons entré les valeurs + Task 1 + et + false + respectivement.

Une fois que vous avez entré les valeurs, appuyez sur la touche + ENTER + ou cliquez sur la petite coche verte en regard du champ pour enregistrer son contenu. (Ne pas faire cela laissera la valeur du champ sous la forme + null if.) Cela devrait ressembler à ceci:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/yBiUNZK.png [Créer et enregistrer un champ et des valeurs]

Pour enregistrer le document, cliquez sur le lien * Enregistrer le document *. Une fois le document enregistré, vous verrez qu’un champ + _rev + lui a été ajouté comme suit:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/820r4Jb.png [champ _rev]

Lire un document

Cliquez sur le lien + todos + (dans la barre supérieure, à côté du lien + Overview +) pour afficher le document nouvellement créé, en tant que document unique dans la base de données + todos +.

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/Bzq3136.png [Page de la base de données Todos]

Cliquez sur la clé du document (l’ID) dans le tableau pour accéder à la page de détails du document.

Modifier un document

Sur cette page, vous pouvez modifier et mettre à jour les champs de document comme suit:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/9itT5Dt.png [Page de détails du document]

Pour éditer une valeur de champ, double-cliquez dessus et commencez à éditer.

Vous pouvez supprimer n’importe quel champ (à l’exception des champs + _id + et + _rev +), ajouter de nouveaux champs ou modifier les valeurs des champs existants. Dans cet exemple, nous avons changé la valeur du champ + done + de + faux + en + vrai + comme suit:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/hrQk7aj.png [Changer la valeur du champ: le champ "done" de "false" à "true"]

Une fois que vous êtes satisfait des modifications, cliquez sur le lien * Enregistrer le document * pour mettre à jour le document. Une fois cette opération effectuée, vous remarquerez que la valeur du champ + _rev + a également été mise à jour.

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/A95Xce2.png [Enregistrer les modifications]

Supprimer un document

Pour supprimer un document, vous pouvez cliquer sur le lien * Supprimer le document * qui vous invitera à confirmer:

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/EHbvpVj.png [Êtes-vous sûr de vouloir supprimer ce document?]

Confirmez en appuyant sur le bouton * Supprimer *.

Futon supprimera le document et vous mènera à la page de base de données + todos +, qui devrait maintenant être vide, confirmant que le document a bien été supprimé.

image: https: //assets.digitalocean.com/articles/couchdb-ubuntu1404/CJQo6up.png [Page de la base de données Todos]

Exécution d’opérations CRUD à partir de la ligne de commande

Cette section expliquera comment nous pouvons effectuer des opérations CRUD (créer, lire, mettre à jour et supprimer) de base sur une base de données CouchDB à partir de la ligne de commande en utilisant + curl +.

Assurez-vous que votre tunnel SSH est toujours ouvert. Sinon, ouvrez votre connexion au serveur à partir de votre * ordinateur local * avec cette commande:

ssh -L5984:127.0.0.1:5984 @

Créer une base de données

Si vous n’avez pas déjà créé la base de données + new_database +, veuillez le faire maintenant. Cette commande doit être exécutée à partir de votre * station de travail locale *:

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

Depuis que nous avons ajouté un utilisateur administrateur à CouchDB, nous devons maintenant envoyer le nom d’utilisateur et le mot de passe administrateur lors de la création d’une nouvelle base de données.

Les résultats devraient ressembler à ceci:

Output{"ok":true}

Créer un document

Commençons par créer un nouveau document.

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

Cette commande crée un nouveau document dans la base de données + new_database +.

L’indicateur + -X + indique que nous effectuons une opération HTTP POST. L’indicateur + -H + suivi de l’en-tête définit le type de contenu de cette demande sous la forme + application / json + puisque nous postons un document JSON. Enfin, le document JSON lui-même est inclus, avec l’indicateur + -d +.

La réponse de cette opération est la suivante:

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

La partie +" ok ": true + de cette réponse indique que l’opération a réussi. La réponse comprend les champs + id + et + rev +, qui représentent respectivement l’ID du document et la révision du document. Ces deux champs seront obligatoires au cas où ce document devrait être modifié ou supprimé.

Dans cet exemple, l’ID de document a été généré par CouchDB car nous ne l’avions pas fourni avec la commande. Si nécessaire, nous pouvons créer un document avec un identifiant unique que nous avons généré.

  • Créer avec l’ID spécifié *

Créez un document avec l’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"

Cette commande crée un nouveau document avec l’ID défini sur + random_task +. La réponse à cette commande est la suivante:

Output{"ok":true,"id":"random_task","rev":""}
  • Créer plusieurs documents *

En plus de créer des documents uniques, nous pouvons également créer des documents en bloc.

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"

Cette commande créera deux documents comme spécifié dans le corps du POST. Il existe deux légères différences par rapport aux encarts à document unique:

  1. Lors de l’insertion d’un seul document, le corps du POST n’était qu’un objet JSON standard. Dans le cas d’insertions en masse, le corps du POST comprend un objet avec un champ + docs +. Ce champ contient le tableau des documents à insérer.

  2. Lors de l’insertion d’un seul document, la demande POST a été envoyée à l’URL pointant vers la base de données (+ http: // localhost: 5984 / new_database +). La demande d’insertion en bloc insère toutefois les POST dans l’URL + http: // localhost: 5984 / new_database / _bulk_docs +.

La réponse de l’opération d’insertion en bloc est la suivante:

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

Lire un document

Récupérer un document depuis une base de données CouchDB est une simple tâche consistant à émettre une commande HTTP GET. Essayons de récupérer l’un des documents que nous avons créés ci-dessus: celui appelé + random_task +.

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

Notez que l’URL comprend l’ID (+ random_task +) du document en cours de récupération. Comme indiqué ci-dessous, la réponse à cette demande GET contient l’intégralité du document, ainsi que les champs + _id + et + _rev +, qui peuvent être utilisés pour mettre à jour ou supprimer ce document.

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

Modifier un document

Lors de la tentative de mise à jour d’un document, il est important d’inclure le champ + _rev +. CouchDB rejettera toute demande de mise à jour qui n’inclut pas de champ + _rev +. Etant donné que CouchDB met à jour le document entier, et pas seulement certaines parties, le document entier doit être envoyé dans le corps de la demande lors d’une opération de mise à jour.

Pour mettre à jour le document créé avec l’ID + random_task +, nous devons émettre une demande HTTP PUT comme suit:

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

Assurez-vous de remplacer la valeur + _rev + par la chaîne que vous avez reçue dans la sortie précédente.

Ceci modifie le document et met à jour le champ + done + en + true +. La réponse à cette demande est la suivante:

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

Comme on peut le voir dans la réponse, le champ + rev + de ce document change après sa mise à jour. Toute future demande de mise à jour ou de suppression de ce document devra désormais utiliser la dernière valeur + rev +.

Supprimer un document

Utilisons cette nouvelle valeur + rev + pour supprimer ce document à l’aide d’une requête HTTP DELETE, comme suit:

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

Tout comme les demandes GET & PUT ci-dessus, la demande DELETE utilise l’URL qui pointe vers le document. Cependant, il inclut également un paramètre de requête supplémentaire dans l’URL. Ce paramètre, + rev +, doit avoir la dernière valeur + _rev + pour que l’opération de suppression aboutisse.

Dans ce cas particulier, nous utilisons la valeur qui a été renvoyée après l’opération de mise à jour à l’étape précédente. La réponse à la demande ci-dessus est indiquée ci-dessous.

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

Redémarrage, arrêt et démarrage du service CouchDB

Démarrer, arrêter et redémarrer le service CouchDB est assez simple. Terminez-vous ces étapes à partir du * serveur *.

Redémarrer

Pour redémarrer une instance CouchDB en cours d’exécution, exécutez la commande suivante:

sudo restart couchdb

Cette commande redémarre une instance CouchDB en cours d’exécution et affiche l’ID de processus de la nouvelle instance. Si aucune instance de CouchDB n’est en cours d’exécution, l’exécution de cette commande donnera le message suivant:

Outputrestart: Unknown instance:

Stop

Pour arrêter une instance CouchDB en cours d’exécution, exécutez la commande suivante:

sudo stop couchdb

L’exécution de cette commande arrêtera toute instance de CouchDB en cours d’exécution et fournira un message de confirmation comme celui-ci:

Outputcouchdb stop/waiting

Début

Pour démarrer CouchDB, exécutez la commande suivante:

sudo start couchdb

Si CouchDB n’était pas déjà en cours d’exécution, l’exécution de cette commande démarrera CouchDB et fournira un message de confirmation du type:

Outputcouchdb start/running, process 12345

D’autre part, si une instance de CouchDB était déjà en cours d’exécution, l’exécution de la commande ci-dessus entraînerait l’affichage d’un message comme celui-ci:

Outputstart: Job is already running: couchdb

Statut

Si vous souhaitez vérifier l’état de CouchDB, vous pouvez le faire en utilisant la commande suivante:

sudo status couchdb

Si CouchDB est en cours d’exécution, un message semblable au suivant s’affichera:

Outputcouchdb start/running, process 12345

Si CouchDB n’est pas en cours d’exécution, la vérification de l’état donnera comme résultat:

Outputcouchdb stop/waiting

Conclusion

Vous avez maintenant une configuration entièrement fonctionnelle de CouchDB sur votre Droplet, que vous pouvez administrer en toute sécurité à partir de votre ordinateur local en utilisant Futon ou la ligne de commande.