Следующийэтот урок, мне удалось настроить Django, Gunicorn и nginxвнутри виртуального окруженияна экземпляре AWS EC2 (работающий под управлением Ubuntu 16.04), а затем приступаем к созданию файла Upstart, чтобы «демонизировать» все это.
После активации virtualenv я проверил, что:
- Джанго работает- Мне удалось получить доступ к моему проекту Django через порт 8000, выполнив следующее:
./manage.py runserver 0.0.0.0:8000
При посещении mydomain.com:8000
меня встретила стандартная страница Django.
- Gunicorn работает и может обслуживать приложение Django- Мне удалось получить доступ к моему приложению Django, запустив это из папки моего проекта (замените
projectname
на фактическое имя моего проекта):
gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application
При посещении mydomain.com:8000
в этот раз меня снова встретила страница приветствия, а при добавлении /admin
в конец URL-адреса я смог увидеть экран входа в систему.минусCSS (потому что Gunicorn не знает о статических файлах CSS, что, согласно руководству, на данный момент нормально).
Отсюда я приступил к созданию следующего файла systemd (когда masterfolder
используется для отображения папки, в которой происходят все действия, myuser
это мой системный пользователь ( ubuntu
, так как это экземпляр Ubuntu):
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/myuser/masterfolder
ExecStart=/home/myuser/masterfolder/myvirtualenv/bin/gunicorn --workers 3 --bind unix:/home/myuser/masterfolder/projectname.sock$
[Install]
WantedBy=multi-user.target`
Я столкнулся с двумя проблемами:
- Сокет не создается.- при проверке лог-файлов nginxснаружи и внутриvirtualenv (кстати, не совсем уверен, почему они одинаковы) Я увидел ту же ошибку:
2017/01/17 15:12:43 [crit] 12403#12403: *3 connect() to unix:/home/myuser/masterfolder/projectname.sock failed (2: No such file or directory) while connecting to upstream
Теперь обратите внимание, что это masterfolder
соответствует иерархии папок django-admin
, создаваемой при запуске startproject
:
masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
Если заглянуть внутрь, masterfolder
то там действительно естьвообще нет файла .sock, не говоря уже о том, что называется projectname.sock
.
- Поэтому, несмотря на то, что nginx работает, он выдает 502-
Вот как etc/nginx/sites-availabe/projectname
выглядит мой файл:
server {
listen 80;
server_name www.mydomain.com mydomain.com MYIPADDRESS;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/masterfolder/projectname;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/myuser/mastefolder/projectname.sock;
}
}
Конечно, он правильно связан симлинком, и после каждого изменения, которое я вношу, чтобы попытаться это исправить, я запускаю:
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx
Я чувствую, что мне не хватает чего-то элементарного в понимании того, как вся эта инфраструктура работает вместе. Не стесняйтесь указывать на ошибки в моем понимании процесса, конечно.
решение1
Вы проверили права доступа к masterfolder
каталогу?
Разрешения должны быть myuser:www-data
.
Также в вашем конфигурационном файле nginx есть орфографическая ошибка. Надеюсь, это опечатка:)