Debian 11 + uWSGI

Ставим uWSGI из пакетов

apt install uwsgi uwsgi-plugin-python3

Компилируем uWSGI из pip2.7

apt install curl -y
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py
pip2.7 install uwsgi
/etc/uwsgi/uwsgi.ini
[uwsgi]
uid = www-data
gid = www-data
pidfile = /run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi/apps-enabled
stats = /run/uwsgi/stats.sock
chmod-socket = 660
emperor-tyrant = true #только для множества пользователей (у меня true не работает)
cap = setgid,setuid

plugin = python39,logfile

Права на папку в run

/etc/tmpfiles.d/uwsgi.conf
d /run/uwsgi 0775 www-data www-data
/etc/systemd/system/uwsgi.service
[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini
#или так ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini

# не нужно, иначе папка /run/uwsgi будет создана с правами root
#RuntimeDirectory=uwsgi

Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Для логов организуем папку c подходящими правами

mkdir /var/log/uwsgi
chown www-data:root /var/log/uwsgi
chmod 770 /var/log/uwsgi

Ротация логов с помощью logrotate. По умолчанию логи хранятся в /var/log/uwsgi/app. Мы делаем без /app

/etc/logrotate.d/uwsgi
"/var/log/uwsgi/*log" {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload uwsgi.service > /dev/null 2>/dev/null || true
    endscript
}

Папка для конфигов: /etc/uwsgi/apps-enabled