DEV Community 👩‍💻👨‍💻

Cover image for Минимальная настройка CouchDB на Linux (Fedora Server 36) в домашней лаборатории с открытием доступа по сети
Timofey Chuchkanov
Timofey Chuchkanov

Posted on • Updated on

Минимальная настройка CouchDB на Linux (Fedora Server 36) в домашней лаборатории с открытием доступа по сети

ВАЖНО: Открывать подобным образом доступ к БД всему свету очень плохая практика. Не делайте в реальных проектах так ни в коем случае!

Студентам моей группы был предложен список из нескольких СУБД. Перед нами поставлена задача каждому выбрать себе одну из них и выполнить ее минимальную настройку. Затем необходимо сделать настроенную СУБД доступной удаленно в сети Интернет так, чтобы другие студенты могли осуществить подключение и выполнять различные манипуляции над БД.

Оглавление

Видео

Видео по настройке

Инструменты

Наименование Что использовано
ОС Сервера Fedora Server 36
ОС Маршрутизатора pfSense 2.6.0
ОС Обратного прокси FreeBSD 13.1
Обратный прокси NGINX 1.22.0
СУБД CouchDB 3.1.1 (snap)
Гипервизор Proxmox VE 7.2-7

Настройка обратного прокси, а также базовые настройки всех ОС не входят в данный туториал.

Ресурсы, выделенные для тестовой ВМ

Наименование Размер
Ядра ЦПУ 1
ОЗУ 2 ГБ

Ядра не два; без игровой видеокарты :(

System info screenshot

Для самостоятельного ознакомления позднее

Топология домашней лаборатории

Имеется сервер с установленным гипервизором первого типа Proxmox VE. Один из двух физических сетевых адаптеров проброшен в виртуальную машину с pfSense и подключен в сеть Интернет-провайдера. Эта виртаульная машина выполняет роль маршрутизатора для всех клиентов.

Вдаваться в подробности нет смысла. Стоит лишь отметить, что для разных групп клиентов выполнено разграничение при помощи виртуальных и физических коммутаторов, а также различных правил безопасности. Серверы с публично открытыми сервисами находятся в DMZ.

Статический IP-адрес и доменное имя sufflain.icu были арендованы ранее в личных целях.

Железо

Hardware topology

Виртуальные машины

VM topology

Настройка сервера БД

Для установки CouchDB в данном примере выбран вариант, распространяющийся как snap пакет. Сделано это по причине удобства установки без танцев с бубном и гарантированности свежести ПО.

Все действия в примере выполняются через root-аккаунт.

Установка snapd

dnf install snapd
Enter fullscreen mode Exit fullscreen mode

После этого потребуется перелогиниться в системе или выполнить перезапуск!

Установка СУБД

  1. Установка самого пакета couchdb

    snap install couchdb
    
  2. Далее необходимо выполнить поиск расположения основного конфигурационного файла

    find / -name local.ini
    

    Пример вывода:

    [root@uwudb ~]# find / -name local.ini
    /var/snap/couchdb/9/etc/local.ini
    

Как раз на второй строке файл, который понадобится. В вашем случае путь может отличаться.

Сделать это нужно по той причине, что другая директория с конфигурационными файлами, которую вы можете найти вручную, является частью файловой системы SquashFS, что делает ее read-only. Соответственно, попытки создать файл local.ini или изменить/удалить любой другой закончатся безуспешно.

[root@uwudb etc]# pwd
/var/lib/snapd/snap/couchdb/current/opt/couchdb/etc
[root@uwudb etc]# df -T .
Filesystem     Type     1K-blocks  Used Available Use% Mounted on
/dev/loop1     squashfs     53376 53376         0 100% /var/lib/snapd/snap/couchdb/9
Enter fullscreen mode Exit fullscreen mode

Подготовка СУБД к первому запуску

Добавление административного пользователя

Для того чтобы CouchDB запускалась, требуется создать как минимум одного пользователя-администратора. Имя он может иметь отличное от admin или administrator.

В файле local.ini, который найден ранее, найти секцию [admins] и добавить туда запись, содержащую имя пользователя и его пароль, разделенные знаком равенства:

[admins]
uwuser = password1234
Enter fullscreen mode Exit fullscreen mode

Не стоит переживать, после первого запуска пароль в данном текстовом файле будет заменен на зашифрованный!

Выбор адреса и порта для прослушивания

Дефолтная конфигурация слушает на 127.0.0.1:5984. Если вас это устраивает - отлично. Если нет, все можно подстроить под личные нужды в разделе [chttpd].

Для демо строка с портом оставлена закомментированной, а адрес изменен на 0.0.0.0. Последнее сделано для того чтобы клиенты могли стучаться к серверу БД по его адресу.

[chttpd]
;port = 5984
bind_address = 0.0.0.0
Enter fullscreen mode Exit fullscreen mode

Запуск CouchDB

snap start couchdb
Enter fullscreen mode Exit fullscreen mode

Разрешение доступа к snap-интерфейсам

На момент создания туториала я так до конца и не смог разобраться, зачем это надо и как работает, к сожалению. Самостоятельно вы можете ознакомиться с этим, прочитав доки по CouchDB snap, на которые есть ссылка в начале туториала, а также здесь (mount-observe) и здесь (process-control).

snap connect couchdb:mount-observe ; snap connect couchdb:process-control
Enter fullscreen mode Exit fullscreen mode

Проверка портов, прослушиваемых CouchDB

Как упомянуто выше, обычно для взаимодействия с API используется порт 5984, либо указанный в local.ini в разделе [chttpd]. Можно проверить свой конфиг.

Какие-то части диванчика (включая API) написаны на Erlang. VM этого языка программирования называется Beam, так что процесс легко находится по этому имени.
Searching for the CouchDB port

Активация CORS

Если вы имели дело с веб-разработкой, то скорее всего знаете о существовании порой коварной вещи под названием CORS. Чтобы у пользователей не было проблем с доступом к вашей БД, стоит активировать это (протестировано на личном опыте с веб-приложением, обращающимся к рассматриваемой СУБД).

Скажем спасибо команде PouchDB, сделавшей удобный инструмент add-cors-to-couchdb. Устанавливается он через NPM и написан в основном на JavaScript, так что нам потребуется NodeJS и, собственно, пакетный менеджер NPM.

  1. Установка NodeJS, NPM

    dnf install nodejs npm
    
  2. Установка add-cors-to-couchdb

    npm install -g add-cors-to-couchdb
    
  3. Использование установленной утилиты

    add-cors-to-couchdb <протокол://адрес_бд[:порт]> -u <имя_пользователя> -p <пароль>
    

Пример:

[root@uwudb etc]# add-cors-to-couchdb http://127.0.0.1:5984 -u uwuser -p password1234
success
Enter fullscreen mode Exit fullscreen mode

Настройка фаерволла

По умолчанию в дистрибутивах Linux ветки Red Hat применяется межсетевой экран firewalld.

  1. Откроем порт для нашей базы

    firewall-cmd --add-port=<порт>/<протокол>
    

    , где <протокол> - один из: tcp, udp.

  2. Сохраним конфигурацию

    firewall-cmd --runtime-to-permanent
    

Проверка работоспособности CouchDB

Попробуем обратиться к API, но сначала придется поставить программу, которая поможет это сделать. Для простоты это будет curl.

  1. Установка curl

    dnf install curl
    
  2. Курлыкаем на CouchDB

    curl http://localhost:5984
    

В случае успеха вывод будет похож на этот:

{"couchdb":"Welcome","version":"3.1.1","git_sha":"ce596c65d","uuid":"831adf3d6515074d50ff52f03d478864","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
Enter fullscreen mode Exit fullscreen mode

Проверка доступа с других устройств к серверу

При использовании PowerShell это выглядит примерно так:
Test DB external connection from PowerShell

Примите поздравления! Часть с настройкой CouchDB можно считать завершенной (если вы успешно подняли базу, конечно).

Настройка маршрутизатора

Для обеспечения доступа к нашей БД пользователям из внешних сетей осталось выполнить только пару несложных действий.

  1. Пробросить порты 80, 443 с WAN интерфейса на обратный прокси
  2. Пробросить порты 80, 443 с LAN интерфейса на обратный прокси

Проброс портов на примере LAN HTTPS

  1. Перейти на страницу настройки NAT
    pfSense find nat menu

  2. Внизу страницы нажать на одну из кнопок добавления правила (вверх/вниз)
    pfSense add nat rule

  3. Отредактировать добавленное правило

    Здесь вам нужно выбрать интерфейс, на котором будет работать преобразование адресов, семейство адресов - IPv4, IPv6 или оба, протокол - TCP, UDP и т. д., источник трафика, адрес и порт назначения, а также адрес и порт перенаправления.

Помимо описанного выше можно для удобства добавить описание правила ниже на этой же странице и поменять остальные параметры по нужде.

Подобным образом выполнить действия для LAN HTTP и для WAN HTTP, HTTPS.
pfSense edit added nat rule

pfSense edit added nat rule

Не забудьте применить изменения
pfSense apply changes

Примерно так у вас может выглядеть конечный вариант

pfSense port forwarding

Результат

Как видно из скриншотов ниже, пользователи из локальной и внешних сетей одинаково успешно имеют доступ к развернутой нами БД. Причем, они это делают через защищенное соединение HTTPS, т. к. обратный прокси перенаправляет весь HTTP трафик на HTTPS.

Подключение по LAN

DB LAN network connection

Подключение из внешней сети

DB external network connection

Top comments (0)

Dream Big


Use any Linode offering to create something unique or silly in the DEV x Linode Hackathon 2022 and win the Wacky Wildcard category.

Join the Hackathon <-