Найти - Пользователи
Полная версия: Apache2+Flask(WSGI): gpiozero or RPi.GPIO access
Начало » Web » Apache2+Flask(WSGI): gpiozero or RPi.GPIO access
1
mc-black
Здравствуйте! Изучил по курсам для новичков основы 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. Хотелось бы сделать грамотно, не выделяя сверх необходимых прав серверу. Помогите разобраться, пожалуйста!
FishHook
mc-black
Хотелось бы сделать грамотно
Чаще для питона рекомендуют nginx в связке с каким-нибудь wsgi-сервером, например, очень популярен стек nginx + uwsgi, апачи для питона по общему мнению подходит плохо
mc-black
Спасибо за совет в выборе стека, 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?
mc-black
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
источник
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB