ВАЖНО: Открывать подобным образом доступ к БД всему свету очень плохая практика. Не делайте в реальных проектах так ни в коем случае!
Студентам моей группы был предложен список из нескольких СУБД. Перед нами поставлена задача каждому выбрать себе одну из них и выполнить ее минимальную настройку. Затем необходимо сделать настроенную СУБД доступной удаленно в сети Интернет так, чтобы другие студенты могли осуществить подключение и выполнять различные манипуляции над БД.
Оглавление
- Видео
- Инструменты
- Ресурсы, выделенные для тестовой ВМ
- Для самостоятельного ознакомления позднее
- Топология домашней лаборатории
- Настройка сервера БД
- Настройка маршрутизатора
- Результат
Видео
Инструменты
Наименование | Что использовано |
---|---|
ОС Сервера | 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 ГБ |
Ядра не два; без игровой видеокарты :(
Для самостоятельного ознакомления позднее
Топология домашней лаборатории
Имеется сервер с установленным гипервизором первого типа Proxmox VE. Один из двух физических сетевых адаптеров проброшен в виртуальную машину с pfSense и подключен в сеть Интернет-провайдера. Эта виртаульная машина выполняет роль маршрутизатора для всех клиентов.
Вдаваться в подробности нет смысла. Стоит лишь отметить, что для разных групп клиентов выполнено разграничение при помощи виртуальных и физических коммутаторов, а также различных правил безопасности. Серверы с публично открытыми сервисами находятся в DMZ.
Статический IP-адрес и доменное имя sufflain.icu
были арендованы ранее в личных целях.
Железо
Виртуальные машины
Настройка сервера БД
Для установки CouchDB в данном примере выбран вариант, распространяющийся как snap пакет. Сделано это по причине удобства установки без танцев с бубном и гарантированности свежести ПО.
Все действия в примере выполняются через root-аккаунт.
Установка snapd
dnf install snapd
После этого потребуется перелогиниться в системе или выполнить перезапуск!
Установка СУБД
-
Установка самого пакета
couchdb
snap install couchdb
-
Далее необходимо выполнить поиск расположения основного конфигурационного файла
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
Подготовка СУБД к первому запуску
Добавление административного пользователя
Для того чтобы CouchDB запускалась, требуется создать как минимум одного пользователя-администратора. Имя он может иметь отличное от admin или administrator.
В файле local.ini
, который найден ранее, найти секцию [admins]
и добавить туда запись, содержащую имя пользователя и его пароль, разделенные знаком равенства:
[admins]
uwuser = password1234
Не стоит переживать, после первого запуска пароль в данном текстовом файле будет заменен на зашифрованный!
Выбор адреса и порта для прослушивания
Дефолтная конфигурация слушает на 127.0.0.1:5984
. Если вас это устраивает - отлично. Если нет, все можно подстроить под личные нужды в разделе [chttpd]
.
Для демо строка с портом оставлена закомментированной, а адрес изменен на
0.0.0.0
. Последнее сделано для того чтобы клиенты могли стучаться к серверу БД по его адресу.
[chttpd]
;port = 5984
bind_address = 0.0.0.0
Запуск CouchDB
snap start couchdb
Разрешение доступа к snap-интерфейсам
На момент создания туториала я так до конца и не смог разобраться, зачем это надо и как работает, к сожалению. Самостоятельно вы можете ознакомиться с этим, прочитав доки по CouchDB snap, на которые есть ссылка в начале туториала, а также здесь (mount-observe) и здесь (process-control).
snap connect couchdb:mount-observe ; snap connect couchdb:process-control
Проверка портов, прослушиваемых CouchDB
Как упомянуто выше, обычно для взаимодействия с API используется порт 5984
, либо указанный в local.ini
в разделе [chttpd]
. Можно проверить свой конфиг.
Какие-то части диванчика (включая API) написаны на Erlang. VM этого языка программирования называется Beam, так что процесс легко находится по этому имени.
Активация CORS
Если вы имели дело с веб-разработкой, то скорее всего знаете о существовании порой коварной вещи под названием CORS. Чтобы у пользователей не было проблем с доступом к вашей БД, стоит активировать это (протестировано на личном опыте с веб-приложением, обращающимся к рассматриваемой СУБД).
Скажем спасибо команде PouchDB, сделавшей удобный инструмент add-cors-to-couchdb
. Устанавливается он через NPM и написан в основном на JavaScript, так что нам потребуется NodeJS и, собственно, пакетный менеджер NPM.
-
Установка NodeJS, NPM
dnf install nodejs npm
-
Установка
add-cors-to-couchdb
npm install -g add-cors-to-couchdb
-
Использование установленной утилиты
add-cors-to-couchdb <протокол://адрес_бд[:порт]> -u <имя_пользователя> -p <пароль>
Пример:
[root@uwudb etc]# add-cors-to-couchdb http://127.0.0.1:5984 -u uwuser -p password1234
success
Настройка фаерволла
По умолчанию в дистрибутивах Linux ветки Red Hat применяется межсетевой экран
firewalld
.
-
Откроем порт для нашей базы
firewall-cmd --add-port=<порт>/<протокол>
, где
<протокол>
- один из:tcp
,udp
. -
Сохраним конфигурацию
firewall-cmd --runtime-to-permanent
Проверка работоспособности CouchDB
Попробуем обратиться к API, но сначала придется поставить программу, которая поможет это сделать. Для простоты это будет curl
.
-
Установка
curl
dnf install curl
-
Курлыкаем на 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"}}
Проверка доступа с других устройств к серверу
При использовании PowerShell это выглядит примерно так:
Примите поздравления! Часть с настройкой CouchDB можно считать завершенной (если вы успешно подняли базу, конечно).
Настройка маршрутизатора
Для обеспечения доступа к нашей БД пользователям из внешних сетей осталось выполнить только пару несложных действий.
- Пробросить порты
80
,443
сWAN интерфейса
на обратный прокси - Пробросить порты
80
,443
сLAN интерфейса
на обратный прокси
Проброс портов на примере LAN HTTPS
Внизу страницы нажать на одну из кнопок добавления правила (вверх/вниз)
-
Отредактировать добавленное правило
Здесь вам нужно выбрать интерфейс, на котором будет работать преобразование адресов, семейство адресов - IPv4, IPv6 или оба, протокол - TCP, UDP и т. д., источник трафика, адрес и порт назначения, а также адрес и порт перенаправления.
Помимо описанного выше можно для удобства добавить описание правила ниже на этой же странице и поменять остальные параметры по нужде.
Подобным образом выполнить действия для LAN HTTP и для WAN HTTP, HTTPS.
Примерно так у вас может выглядеть конечный вариант
Результат
Как видно из скриншотов ниже, пользователи из локальной и внешних сетей одинаково успешно имеют доступ к развернутой нами БД. Причем, они это делают через защищенное соединение HTTPS, т. к. обратный прокси перенаправляет весь HTTP трафик на HTTPS.
Latest comments (0)