Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 20, 2021 22:55:05

mc-black
От: Нижний Новгород
Зарегистрирован: 2019-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Адрес электронной почты  

Apache2+Flask(WSGI): gpiozero or RPi.GPIO access

Здравствуйте! Изучил по курсам для новичков основы Flask. Размещаю wsgi-приложение в Apache2 на домашнем Raspberry Pi 4. У провайдера взял статический IP, пробросил порт на сервер - выглядит рабочим (POST/GET запросы, SQLite3).

Хотел поиграться с портами ввода-вывода GPIO через Python-код сервера Flask. Столкнулся с тем, что пользователь Apache www-data (группа www-data) не имеет прав доступа на выполнение кода библиотеки gpiozero. Гуглил, читал разное про это. Выяснил, что рабочие примеры web-серверов, работающие с gpio-портами, приводимые в частых примерах, запускаются через sudo, без полноценных production серверов. А также узнал, что apache2 webserver и даже flask в production-режиме отказываются запускаться от суперпользователя. Предполагаю, что решение находится в части правильного выставления пользователей и групп для web-сервера. Нормального результата получить пока не смог.

Для проверки по ssh запускал python-скрипт от пользователя по умолчанию (пользователь pi) - он работает. Управляю кулером через bcm pin 17 на транзисторе. Этот же код в apache2 перестает переключать вывод на pin. Хотелось бы сделать грамотно, не выделяя сверх необходимых прав серверу. Помогите разобраться, пожалуйста!

Офлайн

#2 Фев. 21, 2021 12:53:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Apache2+Flask(WSGI): gpiozero or RPi.GPIO access

mc-black
Хотелось бы сделать грамотно
Чаще для питона рекомендуют nginx в связке с каким-нибудь wsgi-сервером, например, очень популярен стек nginx + uwsgi, апачи для питона по общему мнению подходит плохо



Офлайн

#3 Фев. 23, 2021 17:53:46

mc-black
От: Нижний Новгород
Зарегистрирован: 2019-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Адрес электронной почты  

Apache2+Flask(WSGI): gpiozero or RPi.GPIO access

Спасибо за совет в выборе стека, FishHook. Я последовал ему - запускаю приложение flask - uwsgi - nginx. Виртуальное окружение venv не использую. Работает на RPi 4B+, проброс порта 80 со статического IP провайдера. Приложение работает под user www-data, group www-data, находится в /var/www/html.

Как разрешить flask-приложению исполнять код библиотек gpiozero или rpi.gpio? Читал, что rpi.gpio выполняется пользователем, состоящим в группе gpio. Допустим я добавлю пользователя www-data в группу gpio. Как я укажу серверу (nginx и/или uwsgi), чтобы он запускался от обеих групп www-data и gpio?

Офлайн

#4 Фев. 23, 2021 18:47:57

mc-black
От: Нижний Новгород
Зарегистрирован: 2019-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Адрес электронной почты  

Apache2+Flask(WSGI): gpiozero or RPi.GPIO access

P.S. Ура, я добился желаемого! Странно, те же действия не дали результата в связке apache+wsgi+flask. Помогло:

In order to use the GPIO ports your user must be a member of the gpio group. The pi user is a member by default, other users need to be added manually.
 sudo usermod -a -G gpio www-data
источник

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version