Cómo instalar CouchDB con Let’s Encrypt en Ubuntu 16

CouchDB es una base de datos NoSQL como MongoDB, Couch viene del acrónimo cluster of unreliable commodity hardware (sistema de almacenamiento para una base de datos objetal de gran escala). CouchDB emplea JSON para guardar datos, JavaScript para realizar consultas y HTTP como API. Una de las ventajas de CouchDB es la posibilidad de replicarse a otros dispositivos y funcionar offline para luego volver a sincronizarse. En este artículo os vamos a enseñar como instalar CouchDB con Let’s Encrypt en Ubuntu 16.

Instalar CouchDB

Para instalar CouchDB ejecutaremos estos comandos:
# add-apt-repository ppa:couchdb/stable
# apt update
# apt-get install couchdb
# chown -R couchdb:couchdb /usr/bin/couchdb /etc/couchdb /usr/share/couchdb
# chmod -R 0770 /usr/bin/couchdb /etc/couchdb /usr/share/couchdb
# systemctl restart couchdb
# curl localhost:5984

Con este último comando podremos verificar que está funcionando CouchDB en el puerto 5984. Recordar abrir el puerto 5984 y 6984 TCP en el firewall del panel de cliente, más adelante lo necesitaremos.
Por ahora crearemos un túnel para conectarnos a CouchDB, para ello ejecutaremos desde nuestro PC:
ssh -L 5984:127.0.0.1:5984 root@46.183.116.90
Una vez conectados al servidor de CouchDB ya podremos entrar en nuestro navegador a la web http://127.0.0.1:5984/_utils/index.html, ahí nos permitirá crear usuario y contraseña:

Configurar CouchDB

Ahora que ya tenemos creado usuario y contraseña, vamos a modificar la configuración de CouchDB para poder acceder con la IP pública de nuestro servidor. Para ello modificaremos las líneas 12, 13, 20, 40 y 41:

; CouchDB Configuration Settings

; Custom settings should be made in this file. They will override settings
; in default.ini, but unlike changes made to default.ini, this file won't be
; overwritten on server upgrade. 

[couchdb]
;max_document_size = 4294967296 ; bytes
uuid = 0b763d1ba6ae72cccea13a64b2443d7f

[httpd]
port = 5984
bind_address = 0.0.0.0
; Options for the MochiWeb HTTP server.
;server_options = [{backlog, 128}, {acceptor_pool_size, 16}]
; For more socket options, consult Erlang's module 'inet' man page.
;socket_options = [{recbuf, 262144}, {sndbuf, 262144}, {nodelay, true}]

; Uncomment next line to trigger basic-auth popup on unauthorized requests.
WWW-Authenticate = Basic realm="administrator"

; Uncomment next line to set the configuration modification whitelist. Only
; whitelisted values may be changed via the /_config URLs. To allow the admin
; to change this value over HTTP, remember to include {httpd,config_whitelist}
; itself. Excluding it from the list would require editing this file to update
; the whitelist.
;config_whitelist = [{httpd,config_whitelist}, {log,level}, {etc,etc}]

[query_servers]
;nodejs = /usr/local/bin/couchjs-node /path/to/couchdb/share/server/main.js


[httpd_global_handlers]
;_google = {couch_httpd_proxy, handle_proxy_req, <<"http://www.google.com">>}

[couch_httpd_auth]
; If you set this to true, you should also uncomment the WWW-Authenticate line
; above. If you don't configure a WWW-Authenticate header, CouchDB will send
; Basic realm="server" in order to prevent you getting logged out.
require_valid_user = true
secret = bcf234ce8954decc60bc93f42e74f06c

Una vez hecho los cambios ya podemos reiniciar el servicio de CouchDB y acceder con la IP pública de tu servidor.
# systemctl restart couchdb.service

Instalar Let’s Encrypt

Procedemos a añadir el repositorio de certbot e instalamos cerboot y lighttpd:
# add-apt-repository ppa:certbot/certbot
# apt-get update
# apt-get install certbot lighttpd

Creamos un directorio para el SSL y generamos el SSL con nuestro dominio:
# mkdir /etc/couchdb/letsencrypt
# certbot certonly --webroot -w /var/www/html --config-dir /etc/couchdb/letsencrypt --logs-dir /var/log/couchdb -d midominio.com
# cp /etc/couchdb/letsencrypt/live/midominio.com/fullchain.pem /var/lib/couchdb/cert/
# cp /etc/couchdb/letsencrypt/live/midominio.com/privkey.pem /var/lib/couchdb/cert/
# chown couchdb.couchdb /var/lib/couchdb/cert* -R

CouchDB + SSL

Ahora editaremos la configuración local CouchDB para hacer que funcione por SSL modificando las siguientes líneas:

[daemons]
; enable SSL support by uncommenting the following line and supply the PEM's below.
; the default ssl port CouchDB listens on is 6984
httpsd = {couch_httpd, start_link, [https]}
;httpsd = {chttpd, start_link, [https]}

[ssl]
;cert_file = /full/path/to/server_cert.pem
;key_file = /full/path/to/server_key.pem

cert_file = /var/lib/couchdb/cert/fullchain.pem
key_file = /var/lib/couchdb/cert/privkey.pem

Ahora editaremos la configuración por defecto CouchDB:

[daemons]
index_server={couch_index_server, start_link, []}
external_manager={couch_external_manager, start_link, []}
query_servers={couch_query_servers, start_link, []}
vhosts={couch_httpd_vhost, start_link, []}
;httpd={couch_httpd, start_link, []}
httpsd = {couch_httpd, start_link, [https]}
stats_aggregator={couch_stats_aggregator, start, []}
stats_collector={couch_stats_collector, start, []}

Reiniciaremos CouchDB:
# systemctl restart couchdb.service
Ya podemos entrar a CouchDB con SSL https://midominio.com:6984/.

Renovar SSL automáticamente

Crearemos un fichero con el siguiente contenido:

/usr/bin/certbot renew --quiet --renew-hook "/bin/cp -apr /etc/letsencrypt/archive/midominio.com/fullchain.pem /var/lib/couchdb/cert/ && /bin/cp -apr /etc/letsencrypt/archive/midominio.com/privkey.pem /var/lib/couchdb/cert/ &&  /usr/sbin/service couchdb stop && /usr/sbin/service couchdb start"

Añadiremos al crontab para que se ejecute 1 vez al mes.

1 0 * * 1 /root/letsencrypt-renewal.sh

Este artículo está basado en: https://linoxide.com/linux-how-to/install-couchdb-futon-ubuntu-1604/ y http://verbally.flimzy.com/configuring-couchdb-1-6-1-letsencrypt-free-ssl-certificate-debian-8-jessie/

To write a comment on this article, fill out the form below. Fields marked with an asterisk (*) are required.