CouchDB поставляется в комплекте с версией Fauxton, в которой есть критическая ошибка, препятствующая работе Fauxton, если CouchDB размещен в некорневом расположении. Итак, если вы хотите разместить CouchDB в /couchdb
, то объединенный Фокстон в /couchdb/_utils
попытается получить доступ к CouchDB из корневого каталога /
вместо места /couchdb
, что приведет к нарушению функциональности Fauxton.
Проблема объясняется более подробно следующими проблемами на GitHub:
Можно ли разместить CouchDB с Fauxton в некорневом месте, используя Nginx в качестве обратного прокси, и как этого добиться?
Метод, который сработал для меня, заключался в том, чтобы позволить Nginx проксировать /couchdb/_utils/
расположение автономной версии NPM Fauxton, работающей внутри контейнера Docker. Все запросы к /_utils
таким образом, удовлетворяются не входящим в комплект CouchDB Fauxton, а автономным сервером Fauxton (с соответствующими исправлениями для хостинга подпути).
Вот несколько советов по шагам, необходимым для работы.
Конфигурация NGINX в /etc/nginx/conf.d/default.conf
:
upstream couchdb {
server app-couchdb:5984;
}
upstream fauxton {
server app-fauxton:8000;
}
server {
listen 80;
server_name localhost;
location /couchdb/_utils/ {
rewrite /couchdb/_utils/(.*) /$1 break;
proxy_pass http://fauxton/;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /couchdb {
rewrite /couchdb/(.*) /$1 break;
proxy_pass http://couchdb/;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
...
}
Конфигурация CouchDB в /opt/couchdb/etc/local.d/docker-1.ini
:
[chttpd]
bind_address = 0.0.0.0
[httpd]
enable_cors = true
bind_address = 0.0.0.0
Dockerfile для образа fauxton: alpine по адресу fauxton.dockerfile
:
FROM node:10-alpine
RUN npm install --silent -g fauxton
Конфигурация докера:
sudo docker build -t fauxton:alpine - < ./fauxton.dockerfile
sudo docker network create app-net
sudo docker create --name app-couchdb --network app-net --restart unless-stopped -v /opt/couchdb/etc/local.d/docker-1.ini:/opt/couchdb/etc/local.d/docker-1.ini -e COUCHDB_USER="$ADMIN_USER" -e COUCHDB_PASSWORD="$ADMIN_PASSWORD" couchdb:latest
sudo docker create --name app-fauxton --network app-net --restart unless-stopped fauxton:alpine fauxton --couchdb "http://app-couchdb:5984"
sudo docker create --name app-nginx --network app-net --restart unless-stopped --publish 8080:80 -v /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro nginx:alpine
sudo docker start app-couchdb
sudo docker start app-fauxton
sudo docker start app-nginx
Это должно более или менее дать вам установку с последней версией CouchDB и последней версией автономного Fauxton, все они работают внутри контейнеров Docker и доступны через путь, отличный от root, по адресу http://127.0.0.1:8080/couchdb/_utils/.
Это решение будет работать для людей, у которых есть следующие проблемы:
Я использовал Fauxton за Nginx во вложенной папке со следующей конфигурацией:
location ^~ /mycouch/ {
proxy_pass http://192.168.2.5:5984/;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Обратите внимание на несколько моментов:
proxy_pass http://...5984/;
. Обратите внимание на /
в конце. http://example.com/mycouch/_utils/
. Обратите внимание на /
в конце.Unexpected token < in JSON at position 0
ошибка), следуйте этот рецепт для сборки и установки последней версии Fauxton.