Как развернуть приложение Python и управлять им с помощью SystemdLinux

Ответить
Anonymous
 Как развернуть приложение Python и управлять им с помощью Systemd

Сообщение Anonymous »

Что такое управление жизненным циклом развертывания и процесса с помощью Systemd?
Приложение Python — это исполняемый скрипт Python, который также может зависеть от некоторого общего кода Python, который существует в локальных модулях Python или Пакеты.
Чтобы развернуть приложение (любое приложение, не обязательно приложение Python), мы обычно запускаем какой-то процесс сборки, а затем копируем выходные данные сборки в заранее определенный каталог. местоположение на целевой машине. Целевой компьютер может быть тем же компьютером, который мы используем для разработки нашего приложения.
Если мы сделаем все вышеперечисленное, то нашими процессами будет легко управлять с помощью systemd. Мы можем написать служебный файл, который ссылается на исполняемый файл в известном месте.
Каков процесс разработки Python с помощью venv? по умолчанию поставляется с Python 3. Я использовал его для управления виртуальной средой Python в процессе разработки. Он выполняет две функции:
  • Изолирует установку библиотек, необходимых одному проекту, от всех остальных проектов и операционной системы
  • Это дает мне возможность создавать общие библиотеки Python, содержащие код Python, который должен использоваться несколькими исполняемыми процессами, входящими в один и тот же проект.
Это будет легче понять (2.), если я представлю структуру каталогов моего проекта:

Код: Выделить всё

my-python-project/
bin/
webscraper-processes/
webscraper.py
html_processor.py
feature_extractor.py
database_uploader.py
local_library/
__init__.py
... other files ...
cron-download-process/
pycron-download-trigger.py
downloader.py
data-processor.py
database_uploader_2.py
lib_cron_download/
__init__.py
... other files ...
src/
lib_database/
__init__.py
... other files ...
lib_kafka/
__init__.py
... other files ...
test/
... tests ...
.venv/
bin/activate
... other files ...
pyproject.toml
Прошу прощения за несколько глупые названия. Надеюсь, эта структура прояснит, почему я структурировал проект именно таким образом.
  • Существует несколько «групп» исполняемых файлов. Каждый исполняемый файл представляет собой микросервис, выполняющий некоторую функцию. Группа исполняемых файлов — это группа микросервисов. Каждая группа микросервисов выполняет набор связанных операций как часть последовательности или цепочки. Они работают вместе, чтобы выполнить какой-то процесс или операцию более высокого уровня. Исполняемые файлы в разных группах независимы.
  • Хотя групповые веб-процессы и cron-download-process независимы, они используют некоторый общий код. Этот общий код находится в одной или нескольких общих библиотеках в каталоге src.
  • Любой код, который используется группой, но не несколькими группами, помещается в «локальный» общий код. библиотека. (Я не совсем уверен, что это хорошая идея. Возможно, ее также следует добавить в src.)
используется для двух целей:
  • Для локального управления и установки внешних зависимостей. Сюда будут входить confluent-kafka, библиотека Python Kafka Confluent и sqlalchemy.
  • Чтобы обеспечить механизм, позволяющий исполняемым сценариям Python «видеть» код общей библиотеки, который находится в каталоге src. В противном случае интерпретатор сможет видеть код только в текущем рабочем каталоге, который включает «локальные» библиотеки, но не «общие» библиотеки, которые используются обеими группами.
Если есть лучший подход, чем тот, который я использую, пожалуйста, дайте мне знать.
Я также недавно экспериментировал с поэзией и если я правильно понимаю, он предоставляет более удобный интерфейс для управления виртуальными средами. Я готов использовать что-то другое, кроме venv, если это обеспечивает более простой способ управления развертыванием.
Как это развернуть?
Я не до конца понимаю, как это развернуть и управлять жизненным циклом процесса с помощью systemd.
  • Я знаю, что мне нужно выбрать какую-то цель для развертывания. Фиксированное местоположение, на которое systemd может ссылаться в служебных файлах, которые я напишу для использования systemd.
  • Давайте выберем /opt/my-python-project/, что выглядит так: разумное расположение.
Остались следующие вопросы:
  • Как мне «развернуть» код в это место?
  • Простой подход — скопировать cp -r my-python-project/bin /opt/my-python-project/
  • Но это не включает код общей библиотеки в src
  • Я подозреваю, что код общей библиотеки должен быть встроен в колесо, и это колесо должно скопировать в /opt/my-python-project/dist/, а затем установить в какой-нибудь venv в /opt/my-python-project/ ?
  • Должен ли код библиотеки в bin/webscraper-process и bin/cron-download-process быть также встроен в колесо?
  • Нужен ли мне другой venv или подходящая альтернатива в целевом расположении /opt/my-python-project?
  • Является ли мой подход фундаментально ошибочным, поскольку каталог проекта настройка структуры ошибочна? Есть ли лучший подход к использованию структуры каталогов и venv?


Подробнее здесь: https://stackoverflow.com/questions/782 ... th-systemd
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»