Следующий этот учебник, Мне удалось установить Django, Gunicorn и nginx внутри виртуального на экземпляре AWS EC2 (под управлением Ubuntu 16.04), а затем приступить к созданию файла Upstart для «демонизации» всего этого.
После активации virtualenv я проверил, что:
./manage.py runserver 0.0.0.0:8000
При посещении mydomain.com:8000
Меня приветствовала страница 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`
Я столкнулся с двумя проблемами:
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
.
Вот как мой 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
Я чувствую, что мне здесь не хватает чего-то базового в понимании того, как вся эта инфраструктура работает вместе. Конечно, не стесняйтесь указывать на ошибки в моем понимании этого процесса.
Вы проверили разрешения masterfolder
каталог?
Разрешения должны быть myuser:www-data
.
Также в вашем файле конфигурации nginx есть орфографическая ошибка. Надеюсь, это опечатка :)