Gunicorn как служба systemd

Вопрос или проблема

Я хотел бы настроить веб-сайт на базе Python Flask на сервере NixOS.

Поскольку я совсем новичок как в NixOS, так и в настройке сервера, я застрял на gunicorn.

Я следую этому руководству от Digital Ocean:

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-22-04

Я пытался настроить службу systemd для своего проекта в configuration.nix. Вот часть, связанная с gunicorn:

# Gunicorn versike_project
systemd.services.versike_project = {    
enable = true;
description = "Экземпляр Gunicorn для обслуживания versike_project";
after = ["network.target"];

serviceConfig = {
User = "picibucor";
workingDirectory = "/home/picibucor/versike_project";
ExecStart = "/home/picibucor/versike_project/versike_projectenv/bin/gunicorn --workers 3 --bind unix:/home/picibucor/versike_project/versike_project.sock -m 007 wsgi:app";
};
environment = {
  PATH = lib.mkForce "/home/picibucor/versike_project/versike_projectenv/bin";
};
wantedBy = ["multi-user.target"];
};

sudo systemctl status versike_project

× versike_project.service – Экземпляр Gunicorn для обслуживания versike_project
Загружено: загружено (/etc/systemd/system/versike_project.service; включено; предустановлено: включено)
Активно: не удалось (Результат: код выхода) с Вс 2024-09-29 23:19:04 CEST; 1ч 42мин назад
Длительность: 597мс
Процесс: 22777 ExecStart=/home/picibucor/versike_project/versike_projectenv/bin/gunicorn –workers 3 –bind unix:/home/picibucor/versike_project/versike_p>
Основной PID: 22777 (код=выход, статус=3)
IP: 0B вход, 0B выход
ЦП: 373мс

29 сент. 23:19:03 nixos gunicorn[22871]: Файл “”, строка 1360, в _find_and_load
29 сент. 23:19:03 nixos gunicorn[22871]: Файл “”, строка 1324, в _find_and_load_unlocked
29 сент. 23:19:03 nixos gunicorn[22871]: ModuleNotFoundError: Нет модуля с именем ‘wsgi’
29 сент. 23:19:03 nixos gunicorn[22871]: [2024-09-29 23:19:03 +0200] [22871] [INFO] Рабочий выходит (pid: 22871)
29 сент. 23:19:03 nixos gunicorn[22777]: [2024-09-29 23:19:03 +0200] [22777] [ERROR] Рабочий (pid:22867) вышел с кодом 3
29 сент. 23:19:03 nixos gunicorn[22777]: [2024-09-29 23:19:03 +0200] [22777] [ERROR] Рабочий (pid:22871) получил SIGTERM!
29 сент. 23:19:03 nixos gunicorn[22777]: [2024-09-29 23:19:03 +0200] [22777] [ERROR] Завершение работы: Мастер
29 сент. 23:19:03 nixos gunicorn[22777]: [2024-09-29 23:19:03 +0200] [22777] [ERROR] Причина: Рабочий не смог запуститься.
29 сент. 23:19:04 nixos systemd[1]: versike_project.service: Основной процесс вышел, код=выход, статус=3/NOTIMPLEMENTED
29 сент. 23:19:04 nixos systemd[1]: versike_project.service: Не удалось с результатом ‘код выхода’.

Можете помочь мне разобраться с сообщением об ошибке выше? Спасибо за заранее.

Ответ или решение

Для решения проблемы с запуском Gunicorn как службы systemd для вашего проекта на Flask, давайте разберем ошибку и предложим шаги для исправления.

Ошибка

Вы получили ошибку:

ModuleNotFoundError: No module named 'wsgi'

Это означает, что Gunicorn не может найти модуль wsgi, который вы указали в строке:

ExecStart = "/home/picibucor/versike_project/versike_projectenv/bin/gunicorn --workers 3 --bind unix:/home/picibucor/versike_project/versike_project.sock -m 007 wsgi:app";

1. Проверьте структуру проекта

Убедитесь, что у вас есть файл wsgi.py в корневом каталоге вашего проекта (/home/picibucor/versike_project/). Этот файл должен содержать объект app, который является экземпляром вашего Flask-приложения.

Пример содержимого wsgi.py:

from your_flask_app import create_app  # Импортируйте функцию, создающую ваше приложение

app = create_app()  # Создайте объект приложения

Замените your_flask_app на фактическое имя вашего модуля Flask, если необходимо.

2. Измените команду exec

Если ваш файл wsgi.py находится в подкаталоге, убедитесь, что вы указали полный путь к нему. Например, если он находится в каталоге app, команда должна выглядеть так:

ExecStart = "/home/picibucor/versike_project/versike_projectenv/bin/gunicorn --workers 3 --bind unix:/home/picibucor/versike_project/versike_project.sock -m 007 app.wsgi:app";

3. Проверьте виртуальное окружение

Убедитесь, что ваше виртуальное окружение настроено правильно, и все зависимости (включая Flask) установлены внутри него. Вы можете активировать виртуальное окружение и установить необходимые зависимости:

cd /home/picibucor/versike_project
source versike_projectenv/bin/activate
pip install -r requirements.txt  # Убедитесь, что у вас есть requirements.txt с нужными зависимостями

4. Перезагрузите службу

После внесения изменений в конфигурацию и проверок, не забудьте перезагрузить службу systemd:

sudo systemctl daemon-reload
sudo systemctl start versike_project

5. Проверка статуса

Проверьте статус службы на наличие ошибок:

sudo systemctl status versike_project

6. Логи

Если служба по-прежнему не запускается, проверьте логи для более подробной информации:

journalctl -u versike_project

Это поможет вам определить, если есть другие ошибки или проблемы, которые требуют внимания.

Заключение

Пройдя через эти шаги, вы должны устранить ошибку и успешно запустить Gunicorn как службу systemd для вашего Flask-приложения на NixOS. Если возникнут другие проблемы, не стесняйтесь задавать дополнительные вопросы!

Оцените материал
Добавить комментарий

Капча загружается...