mc-black
Фев. 20, 2021 22:55:05
Здравствуйте! Изучил по курсам для новичков основы 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
Фев. 21, 2021 12:53:45
mc-black
Хотелось бы сделать грамотно
Чаще для питона рекомендуют nginx в связке с каким-нибудь wsgi-сервером, например, очень популярен стек nginx + uwsgi, апачи для питона по общему мнению подходит плохо
mc-black
Фев. 23, 2021 17:53:46
Спасибо за совет в выборе стека, 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
Фев. 23, 2021 18:47:57
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
источник