8. DataExpress Web Server

DataExpress Web Server (далее веб-сервер) позволяет работать с базой данных через браузер на любом устройстве. Веб-сервер может работать с несколькими базами данных одновременно, обрабатывая запросы множества удаленных пользователей.

В настоящее время доступны версии для Windows 32-bit и Linux 64-bit, которые можно использовать в том числе в коммерческих целях. Проект находится в стадии активного развития и некоторые вещи еще не реализованы, например диаграммы и деревья.

Для корректной работы на устройствах требуется современный браузер на основе Chromium (Google Chrome, Yandex, Microsoft Edge и т. д.). Веб-интерфейс адаптируется под экран устройства, что обеспечивает удобную работу как на компьютере, так и на смартфоне.

Веб-сервер поддерживает два режима запуска: консольное приложение и сервис (поддерживается только Linux). В первом случае достаточно просто запустить файл dxwebsrv. Но для постоянной работы лучше запускать программу, как сервис (будет рассказано ниже).

Для более быстрой работы рекомендуется устанавливать веб-сервер на тот же компьютер (виртуальный сервер), где и база данных. В системе Windows даже необязательно устанавливать СУБД Firebird 2.5, если планируется работать исключительно с веб-сервером. В Linux установка Firebird обязательна (статьи по теме: База данных в облаке. Установка Firebird на VDS., Установка Firebird 2.5 в линукс).

Установка в Windows

Программа будет работать во всех версиях Windows, начиная с Windows XP. Распакуйте архив с программой в любую папку. Для запуска веб-сервера просто запустите файл dxwebsrv.exe из проводника.

На локальной машине вы можете проверить работу сервера следующим образом. Запустите браузер и введите в адресной строке: http://127.0.0.1/demodb/.

Установка в Linux

Настройка веб-сервера

Для настройки веб-сервера нужно отредактировать файл dxwebserv.cfg. Файл имеет формат ini-файла и состоит из секции «Server» и секций с произвольными именами, описывающих параметры подключения к базам данных. В секции Server могут быть следующие параметры:

  • Language - язык интерфейса, может принимать значения en, ru. Возможны и другие значения, например by, ua, если есть соответствующий файл языка languages\dxwebserv.XX.po.
  • Port - порт сервера. По умолчанию - 80. Если порт отличается от 80, то его всегда нужно указывать в адресной строке браузера, например http://192.168.1.10:8080.
  • Firebird - определяет версию клиента Firebird, используемого для работы с базами данных. Допустимые значения: 2.5 и 5.
  • UseSSL - определяет использовать ли защищенный протокол https, 1 - да, 0 - нет (используется http).
  • PrivateKey - путь к файлу закрытого ключа. Указывается, когда UseSSL = 1.
  • Certificate - пукть к файлу сертификата. Указывается, когда UseSSL = 1.

Пример 1 (стандартный порт http):

[Server]
Language=ru
Port=80
Firebird=2.5

Пример 2 (использование протокола https):

[Server]
Language=ru
Port=443
Firebird=5
UseSSL=1
PrivateKey=c:\openssl\ssl\rootca.key
Certificate=c:\openssl\ssl\rootca.pem

В этом же файле хранятся параметры подключения к базам данных. Для каждой базы данных создается своя секция. В названии секции можно использовать только символы латинского алфавита, цифры и символ _, регистр не имеет значения. Для примера пропишем параметры подключения к базе данных MyDB:

[MyDB]
Database=127.0.0.1:/home/user/bases/MyDB.FDB
Templates=templates
SessionTime=30
DBPwd=anypassword

В параметре Database пропишите путь к файлу базы данных, в формате IP-адрес сервера БД:полный путь к файлу базы данных. Так как обычно веб-сервер будет устанавливаться вместе с СУБД Firebird, IP-адресом обычно будет петлевой IP-адрес компьютера 127.0.0.1, как в примере выше. Обратите внимание, что в Linux регистр имеет значение. В параметре Templates пропишите путь к папке шаблонов. Путь может быть задан относительно папки программы. Параметр SessionTime задает время простоя сессии. Если пользователь указанное время был неактивен, то ему нужно будет повторно подключаться к базе данных. Параметр DBPwd задает пароль пользователя SYSDBA. Если вы не меняли пароль SYSDBA для СУБД Firebird, то параметр можно не задавать.

В примере выше для подключения к базе данных используется порт Firebird по умолчанию 3050. Если порт отличается, то его можно задать следующим образом:

Database=127.0.0.1/3055:/home/user/bases/MyDB.FDB

Чтобы изменения в cfg-файле вступили в силу, надо перезапустить веб-сервер. В линукс это делается следующей командой:

sudo systemctl restart dxwebsrv

Теперь, чтобы подключится к базе MyDB, введите в адресной строке браузера: http://192.168.0.10/mydb/, где 192.168.0.10 - IP-адрес компьютера, с установленным веб-сервером.

Режим сервиса

Веб-сервер может автоматически обрабатывать любые запросы без авторизации пользователя в режиме сервиса. Для этого необходимо в настройки подключения добавить параметр ServiceId. Например:

...
[DemoDB]
Database=127.0.0.1:/opt/bases/work.dxdb
Templates=templates
SessionTime=30
ServiceId=73a90acaae2b1ccc0e969709665bc62f
KeepMetadata=1
...

Значение параметра - произвольный набор символов. Рекомендуется, чтобы этот набор символов был достаточно длинный, чтобы его трудно было подобрать.

Если веб-сервер видит первым параметром serviceid=73a90acaae2b1ccc0e969709665bc62f, то он обрабатывает запрос в режиме сервиса. Веб-сервер подключается к базе данных без пользователя с максимальными правами, обрабатывает запрос и отключается от базы данных. В режиме сервиса время жизни сессии равняется одному запросу.

Параметр KeepMetadata позволяет сохранять метаданные в памяти для быстрой обработки запросов к серверу, даже если нет ни одной сессии. Если же метаданные еще не были загружены, все же потребуется некоторое время для их загрузки.

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

Наличие только лишь одного параметра serviceid приведет к ответу сервера «I am ready». Вам необходимо передавать еще что-нибудь (методами GET или POST), чтобы веб-сервер мог ответить в режиме сервиса. Пример запроса:

https://base.myserver.ru/mybase/?serviceid=73a90acaae2b1ccc0e969709665bc62f&param1=23&param2=67

Особенности работы

  1. Сервер всегда запрашивает логин и пароль к базе данных. Если в базе нет пользователей, просто нажмите кнопку «Вход».
  2. Сервер позволяет заходить пользователям под одним и тем же логином, несмотря на запрет в настройках доступа.
  3. Монитор пользователей можно назначить на кнопку, а можно ввести адрес вручную. Например: 192.168.0.10/demodb/?usermon. Монитор пользователей показывает подключенных пользователей как веб, так и десктопных.
  4. Данные формы отображаются в представлении «только таблица».
  5. Вывод данных формы осуществляется постранично: по 20 записей.
  6. Записи редактируются на отдельной странице. Вы можете редактировать одновременно несколько записей, каждая в отдельной вкладке.
  7. Сервер игнорирует блокировку записей от редактирования. Вы всегда можете отредактировать запись, даже если кто-то другой в этот момент ее редактирует или просматривает. При этом если пользователи редактировали разные поля, будут сохранены изменения обоих пользователей.
  8. Нельзя загрузить изображение/файл, если указан способ хранения «Ссылка».
  9. Сервер запоминает 10 последних редактируемых записей (для каждой формы).
  10. Возможность создавать закладки на формы, отчеты, записи (средствами браузера).
  11. Некоторые элементы интерфейса имеет имеют фиксированное оформление и не зависят от свойств компонентов, например шрифт и фон таблицы на странице просмотра списка записей формы (табличная часть формы) задается в файле form.css.
  12. В списках, как и в объектах, можно фильтровать по фрагментам текста. Содержимое списков подгружается частями, по 100 элементов.
  13. Старайтесь минимизировать количество записей, выводимых в запросах на формах, т. к. сервер может потреблять много оперативной памяти при формировании ответа клиенту.