Развертывание приложения Flask с помощью UWSGI, Nginx, direnv и systemd - PullRequest
0 голосов
/ 11 октября 2018

Я создал API с помощью FLASK, который я пытаюсь развернуть на сервере Linux, создав службу systemd.

Я использовал direnv для настройки входных параметров приложения, таких как соединения с базой данных.Вот как выглядит файл: enter image description here

Конфигурация uwsgi выглядит следующим образом:

enter image description here

Файл systemd содержит следующие записи:

enter image description here

Я получаю следующую ошибку в своих журналах uwsgi всякий раз, когда пытаюсь обратиться к службе в своем браузере:

--- приложение python не найдено, проверьте журналы запуска на наличие ошибок --- [pid: 23791 | app: -1 | req: -1/3] 192.168.9.180 () {44переменные в 719 байтах} [Чт, 11 октября 14:35:09 2018] GET / => сгенерировал 21 байт по 0 мсек (HTTP / 1.1 500) 2 заголовка по 83 байта (1 переключатель на ядре 0)

Насколько я понимаю, команда ExecStart в файле systemd не может вызывать переменные набора direnv, поэтому я добавил запись ExecStartPre, но даже, похоже, не работает.

Любые советы / идеи приветствуются.

Примечание. Приложение доступно без ошибок, когда я запускаю uwsgi через командную строку из виртуальной среды python:

uwsgi --socket 0.0.0.0:5000 --protocol = http -w app: app

1 Ответ

0 голосов
/ 20 октября 2018

У меня есть несколько советов, которые могут вам помочь, вероятно, вам нужен только первый ...

1) Либо переместите всю вашу переменную env, определенную в direnv, в системный блок как Environment или переместите их в специальный файл (похожий на тот, который у вас уже есть) без строки «исходная активация» и экспорт, а затем передайте этот файл как EnvironmentFile, это документ для этого https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Environment

2) Ваш ExecStartPre на самом деле ничего не делает, даже если вы вводите «cd» в путь, который потерян и не является постоянным.Вы должны удалить его.

3) Установив в своем PATH только этот путь, вы ограничиваете себя, я бы порекомендовал посмотреть значение вашего текущего PATH, а затем установить его на это значение.но по крайней мере добавьте "/ usr / local / bin: / bin: / usr / bin: / usr / local / sbin: / usr / sbin".теперь спойлер, вам, вероятно, не нужно его устанавливать.

4) поместите сокет в каталог /run//socket.socket и позвольте systemd управлять вашим /run/<yourapp> с помощью директивы RuntimeDirectory.

удачи!

...