Назад | Перейти на главную страницу

Как разместить CouchDB с Fauxton в некорневом расположении, используя Nginx в качестве обратного прокси

CouchDB поставляется в комплекте с версией Fauxton, в которой есть критическая ошибка, препятствующая работе Fauxton, если CouchDB размещен в некорневом расположении. Итак, если вы хотите разместить CouchDB в /couchdb, то объединенный Фокстон в /couchdb/_utils попытается получить доступ к CouchDB из корневого каталога / вместо места /couchdb, что приведет к нарушению функциональности Fauxton.

Проблема объясняется более подробно следующими проблемами на GitHub:

  1. https://github.com/apache/couchdb-fauxton/issues/1199
  2. https://github.com/apache/couchdb-fauxton/issues/944
  3. https://github.com/apache/couchdb-fauxton/issues/1188

Можно ли разместить 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/.

Это решение будет работать для людей, у которых есть следующие проблемы:

  1. https://github.com/apache/couchdb-fauxton/issues/1199
  2. https://github.com/apache/couchdb-fauxton/issues/944
  3. https://github.com/apache/couchdb-fauxton/issues/1188

Я использовал 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;
    }

Обратите внимание на несколько моментов:

  1. Это proxy_pass http://...5984/;. Обратите внимание на / в конце.
  2. Вы должны ввести http://example.com/mycouch/_utils/. Обратите внимание на / в конце.
  3. Проблема с самим Фокстоном (Unexpected token < in JSON at position 0 ошибка), следуйте этот рецепт для сборки и установки последней версии Fauxton.