Ошибка конфигурации uWSGI «core/socket.c» — с Django и NGINX

Я настраиваю сайт Django на Ubuntu 14.04 (Digital Ocean Droplet) с использованием NGINX и uWSGI (следуя этому tutorial без создания второго проекта). Я могу запустить свой сайт Django с помощью manage.py. Я также могу запустить uwsgi --http :8080 --home /home/andrew/Env/personalsitevenv --chdir /home/andrew/andrew-django-personal-site/personalsite -w personalsite.wsgi без каких-либо проблем. Я вижу, что мой сайт работает на моем IP:Порт. Я также могу запустить uwsgi --http :8000 --module personalsite.wsgi --virtualenv /home/andrew/Env/personalsitevenv без проблем.

Когда я перехожу к IP-адресу своего сервера, все, что я вижу, это страница Welcome to nginx!. В журнале NGINX нет ошибок, и sudo service nginx configtest чист. Единственная информация, которую я получаю, находится в моем файле журнала, который я настроил для uWSGI, который содержит:

*** Starting uWSGI 2.0.12 (64bit) on [Fri Jul  8 00:41:22 2016] ***
compiled with version: 4.8.4 on 05 July 2016 17:45:39
os: Linux-4.4.0-28-generic #47~14.04.1-Ubuntu SMP Fri Jun 24 16:30:35 UTC 2016
nodename: **********
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /etc/uwsgi/sites
detected binary path: /usr/local/bin/uwsgi
chdir() to /home/andrew/andrew-django-personal-site/personalsite
your processes number limit is 1832
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
bind(): No such file or directory [core/socket.c line 230]

Может ли кто-нибудь обнаружить какие-либо проблемы с конфигурацией или что-то еще, что может быть здесь не так?


/etc/uwsgi/сайты/personalsite.ini

[uwsgi]
logto = /var/log/uwsgi/log.txt

project = personalsite
base = /home/andrew
repo = andrew-django-personal-site

chdir = %(base)/%(repo)/%(project)
home = %(base)/Env/personalsitevenv
module = %(project).wsgi:application

master = true
processes = 5

socket = $(base)/%(repo)/%(project)/%(project).sock
chmod-socket = 664
chown-socket = www-data
vacuum = true

/etc/init/uwsgi.conf

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

setuid andrew
setgid www-data

exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

/etc/nginx/доступные сайты/персональный сайт

server {
    listen 80;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/andrew/andrew-django-personal-site/personalsite;
    }

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/home/andrew/andrew-django-personal-site/personalsite/personalsite.sock;
    }
}

person Andrew_CS    schedule 08.07.2016    source источник
comment
Ваш включает uwsgi_params должен быть абсолютным путем, например, /home/andrew/conf/uwsgi_params или любым другим узнаваемым местоположением.   -  person dmitryro    schedule 08.07.2016


Ответы (1)


Похоже, что файл personalsite.ini содержит путь к сокету в качестве шаблона, который может иметь 0 или более совпадений, которые могут не совпадать с реальным путем, поэтому обновление его до абсолютного пути решит проблему.

в вашем личном сайте.ini: если вы замените

socket = $(base)/%(repo)/%(project)/%(project).sock

с абсолютным путем к местоположению вашего сокета

socket = /home/andrew/andrew-django-personal-site/personalsite/personalsite.sock

это решит проблему.

Как только вы узнаете расположение сокета, вы можете разработать шаблон, который будет ему соответствовать.

Пример расположения в конфигурации nginx:

    location / {
         uwsgi_pass unix:/home/andrew/andrew-django-personal-site/personalsite/personalsite.sock;
         include /your_location/conf/uwsgi_params; // or your own
         uwsgi_modifier1 30;          // ignore extra if not used
         proxy_set_header HTTP_AUTHORIZATION $http_authorization; // only use if needed
         proxy_set_header  X-Real-IP  $remote_addr; // only use if needed
         proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;// only if needed
         proxy_set_header  Host $http_host; // only use if needed
         proxy_redirect  off;  // only use if needed
    }
person dmitryro    schedule 08.07.2016
comment
Привет, заканчивая ваш комментарий к include uwsgi_params, учебнику, который я использовал, этому другому tutorial, и все другие, которые я видел, говорят, что include uwsgi_params подходит для простых настроек. Я создал еще один сайт, используя это. У меня нет специальной конфигурации параметров uwsgi, поэтому используется значение по умолчанию /etc/nginx/uwsgi_params. - person Andrew_CS; 08.07.2016
comment
Все эти другие переменные конфигурации кажутся дополнительными для более сложной настройки. Можете ли вы указать одну из них, которая может вызвать мою ошибку в файле журнала uwsgi? - person Andrew_CS; 08.07.2016
comment
Похоже, что местоположение сокета, указанное вами в файле personalsite.ini, не существует, поэтому его необходимо указать явно, например socket = /var/run/uwsgi/mysocket.sock, или подтвердить его наличие в соответствии с форматом. - person dmitryro; 08.07.2016
comment
Я изменил /etc/uwsgi/sites/personalsite.ini строку socket = /var/run/uwsgi/personalsite.sock и /etc/nginx/sites-available/personalsite строку uwsgi_pass unix:/var/run/uwsgi/personalsite.sock;, что избавило от ошибки. Я не понимаю, почему мое предыдущее определение сокета было неправильным - можете ли вы объяснить, почему? - person Andrew_CS; 08.07.2016
comment
Если вы обновите свой ответ этим решением из комментариев, я приму его, спасибо за помощь. - person Andrew_CS; 08.07.2016
comment
К вашему сведению для тех, кто будет читать это в будущем: мне также пришлось добавить строку server_name <IP Address Here>; в /etc/nginx/sites-available/personalsite, чтобы иметь доступ к моему сайту по IP-адресу в веб-браузере. - person Andrew_CS; 08.07.2016
comment
Ваше предыдущее объявление было выражением формата, которое потенциально может соответствовать нулю или большему количеству результатов, поэтому реальное местоположение вашего файла сокета не соответствовало указанному шаблону, и поэтому либо шаблон должен был измениться, чтобы работать для местоположения, либо местоположение должно быть указано явно. Теперь, когда вы знаете свое местоположение, вы можете построить шаблон таким образом, который будет соответствовать местоположению, и после того, как вы его протестируете, вы можете вернуть его в выражение. - person dmitryro; 08.07.2016
comment
Короче говоря, шаблон, который вы использовали, не идентифицировал реальное местоположение. - person dmitryro; 08.07.2016
comment
Если вы обновите свой ответ, чтобы объяснить изменение путей к сокетам, я приму его (чтобы будущие пользователи могли легко извлечь выгоду, прочитав ответ, а не комментарии). - person Andrew_CS; 08.07.2016