Назад | Перейти на главную страницу

Nginx + uwsgi не может найти приложение Bottle.py

У меня есть приложение Python 3 bottle.py, которое я устанавливаю в виртуальную среду (позволяя pip автоматически получать зависимости). Я пытаюсь заставить его работать под nginx и uwsgi на моем raspberry pi.

Когда у меня запущены nginx и uwsgi, посещение http://localhost/icecrate приводит к "uWSGI Error Python application not found". Я предполагаю, что это означает, что nginx правильно подключается к uwsgi, и именно uwsgi не может найти приложение.

Однако, если я запустил приложение с uwsgi --http 0.0.0.0:8080 /etc/uwsgi/apps-enabled/icecrate.ini затем http://localhost:8080 дает мне приложение, которое предполагает, что конфигурация uwsgi по крайней мере адекватна.

Я несколько часов искал в Google и документах решение. Я не знаю, что я здесь делаю не так.

/ и т.д. / Nginx / сайты-доступные / ледяной

server {
  listen      80;
  server_name raspberrypi;

  access_log  /home/icecrate/logs/access.log;
  error_log   /home/icecrate/logs/error.log;

  location /icecrate {
    uwsgi_pass unix:///tmp/icecrate.sock;
    include    uwsgi_params;
  }
}

/etc/uwsgi/apps-available/icecrate.ini

[uwsgi]
vhost = true
plugins = python3
socket = /tmp/icecrate.sock
master = true
enable-threads = false
processes = 1

# this just imports the app callable and renames it to application
wsgi-file = /home/icecrate/nginx.py

# I get the same results using this method
#module = icecrate.web
#callable = app

virtualenv = /home/icecrate/env
touch-reload = /home/icecrate/reload

Код приложения находится на GitHub.

Я закончил тем, что уничтожил попытку и все конфиги и начал все заново, но я думаю, что понял это. я честно уверен, что это проблема с разрешениями.

По умолчанию указан nginx.conf www-data как пользователь, от имени которого он работает, и предыдущая попытка не предприняла никаких усилий для решения этой проблемы. Все файлы принадлежали мне. Вместо того, чтобы менять пользователя по умолчанию, я создал домашнюю папку для www-data, который теперь содержит файл icecrate virtualenv. При настройке приложения я использовал sudo -s -u www-data для создания всего файла, чтобы у всех файлов был правильный владелец и разрешения.

Конфигурация Nginx практически такая же, за исключением того, что папка virtualenv теперь играет главную роль в сокете и регистрирует:

server {
  listen 80;
  server_name = raspberrypi;

  access_log /home/www-data/icecrate/logs/access.log;
  error_log /home/www-data/icecrate/logs/error.log;

  location /icecrate {
    uwsgi_pass unix:///home/www-data/icecrate/icecrate.sock;
    include uwsgi_params;
  }
}

Я пропустил некоторые вещи, которые казались не важными для проблемы при восстановлении ini приложения uwsgi, но это тоже по сути то же самое:

[uwsgi]
plugins = python3
socket  = /home/www-data/icecrate/icecrate.sock
module  = icecrate.web:app
virtualenv = /home/www-data/icecrate
touch-reload = /home/www-data/icecrate/reload

# like ngnix, uwsgi should be www-data.
uid = www-data
gid = www-data

# don't think this works, though
logto = /home/www-data/icecrate/logs/uwsgi.log

После помещения файлов конфигурации в sites-enabled и apps-enabled соответственно я начал nginx и uwsgi и указал в моем браузере на http://localhost/icecrate и получил ошибку 404 bottle.py. Не думаю, что когда-либо в жизни был так счастлив увидеть 404-ю.