Переносимые двоичные файлы MongoDB и MySQL / PostgreSQL

#mysql #linux #mongodb #postgresql #binary

#mysql #linux #mongodb #postgresql #двоичный

Вопрос:

В настоящее время я разрабатываю приложение на Python, и я хотел бы знать, есть ли какие-либо способы упаковки MongoDB и MySQL (или Postgresql) в приложение. Под упаковкой я подразумеваю использование этих двоичных файлов приложений и распространение их вместе с файлами приложения.

Например, в Metasploit PRO есть некоторые приложения, такие как nginx, postgresql, java, ruby и т. Д. В /opt/metasploit (они поставляются с настройкой приложения), и я хотел бы знать, можно ли это сделать с любым приложением Linux. И если да, то как я могу «выбрать», какие двоичные файлы необходимы? Будут ли они работать для любого дистрибутива Debian? Может ли какое-либо приложение следовать этой процедуре? Можно ли это сделать с помощью MySQL и MongoDB?

P.D: Я хотел бы сделать это для распространения одного уникального приложения вместо того, чтобы «обязывать» пользователя самостоятельно настраивать базы данных и из чистого любопытства.

Заранее большое вам спасибо!

Комментарии:

1. Будет ли что-то вроде SQLite вариантом?

2. Нет, мне нужно, чтобы это был MySQL или Postgres

3. ? Не MongoDB? Как вы распространяете файлы приложения? Если zip или tar или аналогичный, движок mongod представляет собой один исполняемый файл размером ~ 73 МБ.

4. Да, конечно, мне нужен MongoDB, я имел в виду, что я хотел MySQL / Postgres вместо SQLite. mongod — это один исполняемый файл, но он отлично работает в установленной системе, потому что остальные папки и файлы конфигурации находятся на месте (он использует каталоги, расположенные в /var, он ожидает файл конфигурации внутри /etc/ mongo и т. Д.), Но я хотел, Чтобы все файлы были внутри /opt/<my-app>/mongo, следовательно, не требует установки

5. Вы хотите подключить эти базы данных только внутри контейнера или извне?

Ответ №1:

MongoDB уже распространяет свои двоичные файлы как автономные двоичные файлы в том смысле, что все необходимое для запуска базы данных (или инструментов оболочки) включено в соответствующий двоичный файл (mongo / mongos / mongod).

Однако эти двоичные файлы зависят от операционной системы (дистрибутив Linux). Это означает, например, что они динамически связываются с libssl и libcurl и вам нужно иметь правильные версии этих библиотек в хост-системе. Так, например, двоичный файл MongoDB для Ubuntu 14.04, скорее всего, не будет работать в Ubuntu 16.04.

Насколько я знаю, MongoDB не поддерживает сборку для «общего Linux». Поддерживаются только определенные операционные системы, такие как Ubuntu 16.04.

С учетом сказанного, вы могли бы самостоятельно создать «переносимый» MongoDB, если примете некоторые ограничения, поскольку его исходный код доступен:

  • Вам нужно выяснить, как создать MongoDB в каком-либо дистрибутиве Linux, который дает вам базовый glibc, который был бы совместим со всеми вашими целями.
  • Возможно, вам придется отказаться от таких функций, как TLS-соединения, или выяснить, как статически связать openssl (возможно, нетривиально).
  • Это было бы проще с более старыми версиями MongoDB (4.0, 3.6), поскольку у них меньше системных зависимостей.

Комментарии:

1. Спасибо, на самом деле действительно интересно, спасибо! Что вы думаете о MySQL / Postgresql?

2. У меня нет эквивалентного опыта создания этих баз данных, чтобы комментировать их.

Ответ №2:

Я думаю, вы можете упаковать необходимые службы и ваше приложение в виде образа Docker или окна виртуальной машины.

По моему опыту, я обычно упаковывал MongoDB и другие инструменты командной строки Linux с моим веб-приложением NodeJS в виртуальную машину с помощью Vagrant. Или вы можете использовать Docker, если предпочитаете приложение на основе контейнеров.

Если вы используете Vagrant, функция подготовки может помочь вам настроить базу данных перед запуском приложения. Проверьте https://www.vagrantup.com/docs/provisioning

Комментарии:

1. Здравствуйте, спасибо за ответ. У меня уже есть приложение, упакованное внутри Docker, но я хотел, чтобы этот подход сделал его автономным и позволил избежать виртуального контейнера любого типа.