Die CouchDB Anleitung

Die CouchDB Anleitung

Rahmenbedingungen

Du willst dir mit CouchDB eine Datenbank aufbauen? Der Zugriff soll online per Web erfolgen? Zudem verwendest du einen Apache2-Webserver? Dann bist du hier genau richtig!

Installation

Quelle der Infos:

CouchDB ist in Erlang vom Unternehmen Ericson geschrieben und benötigt nur geringe Systemanforderungen. Theoretisch könnte das Programm auf einem Handy ausgeführt werden.

Achtung! Da offenbar in der Ubuntu Paketquelle nicht die aktuellste Version (Stand: 26.11.2017 Version 1.60) hinterlegt ist, empfiehlt sich eine Installation wie auf http://docs.couchdb.org beschrieben (Stand 26.11.2017 Version 2.1.1). Diese wird im nächsten Kapitel erläutert.

Installation von CouchDB 2.1.1 auf Ubuntu 16.04.

Für die kommende Installation und Konfiguration benötigst du vier Dinge:

  1. Administrationsrechte: Zunächst brauchen wir vollen Zugang zu unserem System, log dich daher als Admin ein:
    sudo -i
  2. Einen Terminal-Editor: Ich benutze nano hierfür. Installieren kannst du nano mit:
    apt-get update && apt-get install nano
  3. cURL: Ein Programm mit dem wir später http-Anweisungen im Terminal hinterlegen können:
    apt-get update && apt-get install curl
  4. Zeit: Falls es aufanhieb nicht klappen sollte, fließt jede Menge Zeit in die Fehler suche.

Für die Installation laden wir die erforderlichen Pakete aus dem Internet herunter. Hierzu binden wir die offiziellen Quellen in die Paketverwaltung von Ubuntu ein:

echo "deb https://apache.bintray.com/couchdb-deb xenial main" \ | tee -a /etc/apt/sources.list

In der Datei sources.list befindet sich nun ein entsprechender Eintrag. Mit nano könnt ihr euch diesen anschauen und ggf. wieder entfernten.

Zunächst müssen wir in Ubuntu noch einen Schlüssel erzeugen:

curl -L https://couchdb.apache.org/repo/bintray-pubkey.asc \ | apt-key add

Jetzt folgt die eigentliche Installation. Bei neueren Versionen von CouchDB wie Version 2.1.1 öffnet sich evtl. ein Dialog in dem ihr einen Admin und die Reichweite eures CouchDB-Servers (lokal/online) einrichten könnt. Legt einen Admin an und entscheidet euch für die lokale Variante. Das Kommando zur Installation lautet:

apt-get update && sudo apt-get install couchdb

Fertig.

Für einen ersten Test könnt ihr mittels cURL folgendes Kommando in das Terminal eingegeben.

curl http://127.0.0.1:5984/

Dabei steht 127.0.0.1 für den lokalen Computer (also dem Server) und 5984 ist der Port auf dem CouchDB per Standard kommuniziert. Ihr solltet eine Antwort von CouchDB erhalten, welche u.a. die Versionsnummer enthält.

Erste Schritte

Zum Warmwerden programmieren wir zunächst noch einige Zeilen in cURL, bevor wir später auf die Webbasierte grafische Oberfläche Fauxton wechseln. Um zu sehen welche Datenbanken derzeit existieren verwenden wir diesen Befehl:

curl -X GET http://127.0.0.1:5984/_all_dbs

Eine neue Datenbank Baseball legen wir mit diesen Befehl an:

curl -X PUT http://127.0.0.1:5984/baseball

Ist bei der Installation ein Administrator erstellt worden, wird dieser Befehl nicht ausgeführt.

Die Oberfläche Fauxton ist lokal mit euren Webbrowser über http://127.0.0.1:5984/_utils/ zu erreichen. Was uns nicht hilft da wir CouchDB auf einen Server installiert haben.

Sicherheit

Quelle der Info:

Bisher kann nur lokal auf CouchDB zugegriffen werden. Später wollen wir unsere Datenbank über das Internet erreichen. Leider haben die Entwickler von CouchDB einen Hang zur Entspannung und erfanden das Konzept der Admin-Party, dass als Standard eingestellt ist. Soll heißen: Jeder darf erst einmal alles. Deshalb müssen wir, falls noch nicht geschehen, einen Administrator anlegen. Einen Admin Anna mit dem Passwort secret legen wir mit diesen Kommando an:

curl -X PUT http://127.0.0.1:5984/_config/admins/anna -d '"secret"'

Ab jetzt müssen alle cURL Kommandos mit Admin und Passwort versehen sein. Hierzu empfiehlt sich das Verwenden von Variablen:

> HOST="http://anna:secret@127.0.0.1:5984"
> curl -X PUT $HOST/somedatabase

Verbindung und Sicherheit über einen Proxy

Bisher ist unsere unser CouchDB-Datenbanksystem nur lokal erreichbar. Wir könnten zwar leicht den CouchDB-Server online freigeben, aber dann gibt es Probleme mit der SSL-Verschlüsselung (https://) und alle könnten unser Admin-Passwort mitlesen. Als Lösung dafür verwenden wir einen Proxy. Hierfür müssen Apache und CouchDB konfiguriert werden.

Zunächst muss der Appache2-Webserver die Anweisung bekommen auch Proxys zu behandeln. Hierzu geben wir folgende Kommandos in das Terminal ein:

> a2enmod proxy
> a2enmod proxy_html
> a2enmod proxy_http
> service apache2 restart

Danach legen wir im Verzeichnis /etc/apache2/sites-available eine Konfigurationsdatei für Apache an:

nano website.conf

Der Name ist dabei egal, der Inhalt nicht. Ersetzt xyz.website.com durch eure URL.

<VirtualHost *:80>
  ServerAdmin webmaster@website.com
  ServerName xyz.website.com
  DocumentRoot "/var/www/html/"


  AllowEncodedSlashes On
  ProxyRequests Off
  KeepAlive Off
  <Proxy *>
     Order deny,allow
     Deny from all
     Allow from all
  </Proxy>
  ProxyPass / http://127.0.0.1:5984/ nocanon
  ProxyPassReverse / http://127.0.0.1:5984/

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>

Zum Schluss der Apache-Konfiguration macht ihr eure Konfiguration für den Webserver mit dem Befehl

> a2ensite website.conf
> service apache2 restart

verfügbar.

Den CouchDB-Server bearbeiten wir über die Datei local.ini

nano /opt/couchdb/etc/local.ini

Hier müssen unter den richtigen Stellen folgende Einstellungen ergänzt werden:

[couchdb]
 authentication_handlers = {couch_httpd_auth, cookie_authentication_handler}, {couch_httpd_auth, default_authentication_handler}

[chttpd]
 require_valid_user = false

[couch_httpd_auth]
 require_valid_user = false
 secret = deinpasswort

Damit die Einstellungen wirksam werden, muss CouchDB neu gestartet werden

service couchdb restart

Ab sofort ist eure CouchDB-Instanz über xyz.webseite.com/_utils/ erreichbar, wenn auch noch ohne SSL-Verschlüsselung.

Für die Verschlüsselung legen wir für Apache eine weitere Konfigurationsdatei an

nano website-ssl.conf

Diese füllen wir mit folgenden Inhalt:

<IfModule mod_ssl.c>
<VirtualHost *:443>


  ServerAdmin webmaster@webseite.com
  ServerName xyz.webseite.com
  DocumentRoot "/var/www/html/"


  SSLEngine on
  SSLCertificateFile /dein/Pfad/zum/Zertifikat/fullchain.pem
  SSLCertificateKeyFile /dein/Pfad/zum/Zertifikat/privkey.pem


  <FilesMatch "\.(cgi|shtml|phtml|php)$">
     SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
     SSLOptions +StdEnvVars
  </Directory>
  BrowserMatch "MSIE [2-6]" \
  nokeepalive ssl-unclean-shutdown \
  downgrade-1.0 force-response-1.0
  # MSIE 7 and newer should be able to use keepalive
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown


  AllowEncodedSlashes On
  ProxyRequests Off
  KeepAlive Off


  <Proxy *>
     Order deny,allow
     Deny from all
     Allow from all
  </Proxy>
  ProxyPass / http://127.0.0.1:5984/ nocanon
  ProxyPassReverse / http://127.0.0.1:5984/


  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>
</IfModule>

Anschließend muss die Datei wieder bereitgestellt und Apache neu gestartet werden.

Fertig.

Mit https://xyz.webseite.com/_utils/ könnt ihr nun via gesicherter Verbindung auf eure Datenbank zugreifen.

User-Verwaltung und Zugriffsrechte

Bisher gibt es nur einen Superuser, den Server-Admin. Später wollen wir uns nicht immer als Admin einloggen oder wir wollen mit anderen Leuten an der Datenbank arbeiten. Dafür brauchen wir noch weitere User-Accounts.

Innerhalb von Datenbanken gibt es zwei Rollen: Admins und Members. Der Datenbank-Admin ist kein Server-Admin. Die beiden Rollen haben folgende Berechtigungen:

Member – Ist es erlaubt Dokumente anzulegen und zu verändern, mit Ausnahme von Designdokumenten.

Admin – Können alle Arten von Dokumenten lesen, bearbeiten und erstellen. Sie können andere User innerhalb der Datenbank zufügen und diese als Admin setzen. Zudem können sie Einstellungen für die Datenbank vornehmen.

Neue Nutzer anlegen

Okay! Members und Admins, aber wie lege ich nun einen neue User an? Das machen wir in Terminal mit cURL. Hier am Beispiel eines Users Bob mit dem Passwort 1234 (Diese Passwort solltet ihr natürlich nicht nehmen).

curl -X PUT http://localhost:5984/_users/org.couchdb.user:bob \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name": "bob", "password": "1234", "roles": [], "type": "user"}'

Datenbank und Rolle zuweisen

Diese Schritte gehen am besten über die Oberfläche Fauxton. Log euch zunächst als Server-Admin ein. Und klickt auf den Reiter Databases. Hier seht ihr die beiden Systemdatenbanken _users und _replicator und eure eigenen Datenbanken. Habt ihr noch keine Datenbank erstellt, könnt ihr dies mit einen klick (oben rechts) auf Create Database tun. Klickt auf eure Datenbank und dann auf Permissions. Hier könnt ihr z.B. den User bob als (Datenbank)-Admin hinzufügen.

Fertig.

Die Arbeit mit CouchDB kann nun beginnen.“ -Alexander Freitag, Berlin den 26.11.2017