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 [email protected]
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.
# vi /etc/couchdb/local.ini
Modificaremos las lineas:
port = 5984
bind_address = 0.0.0.0
WWW-Authenticate = Basic realm="administrator"
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
# vi /etc/couchdb/local.ini
Modificaremos las siguientes líneas:
httpsd = {couch_httpd, start_link, [https]}
;httpsd = {chttpd, start_link, [https]}
cert_file = /var/lib/couchdb/cert/fullchain.pem
key_file = /var/lib/couchdb/cert/privkey.pem
Ahora editaremos la configuración por defecto CouchDB:
# vi /etc/couchdb/default.ini
Modificaremos las siguientes líneas:
;httpd={couch_httpd, start_link, []}
httpsd = {couch_httpd, start_link, [https]}
Reiniciaremos CouchDB:
# systemctl restart couchdb.service
Ya podemos entrar a CouchDB con SSL https://midominio.com:6984/.
Renovar SSL automáticamente
Crearemos un fichero /root/letsencrypt-renewal.sh 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.
# crontab -e
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/