Суть вопроса в заголовке. Устанавливать пробую на локальной машине с Ubuntu. Пока для выполнения задачи сделано по инструкции следующее:
Прописал в settings.py новую директорию для статики:
STATIC_ROOT = '/opt/mag/static/'
Но когда пытаюсь собрать статику:
python manage.py collectstatic
Появляется ошибка:
Copying '/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt'
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/core/management/base.py", line 305, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/core/management/base.py", line 356, in execute
output = self.handle(*args, **options)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 193, in handle
collected = self.collect()
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 124, in collect
handler(path, prefixed_path, storage)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 347, in copy_file
self.storage.save(prefixed_path, source_file)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/core/files/storage.py", line 54, in save
return self._save(name, content)
File "/home/anton/virtenvs/mag_env/lib/python3.5/site-packages/django/core/files/storage.py", line 321, in _save
os.makedirs(directory)
File "/home/anton/virtenvs/mag_env/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/home/anton/virtenvs/mag_env/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/home/anton/virtenvs/mag_env/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/home/anton/virtenvs/mag_env/lib/python3.5/os.py", line 241, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/opt/mag'
Выполнить ту же команду через sudo - кривое решение: а если бы у меня конкретно для этого проекта были особые версии пакетов?
Ладно, пропускаю этот этап, оставляю адрес прежним: /home/anton/Django-u/magazine_project/main_site/
В проекте статика (как и в любой папке внутри anton) распаковывается нормально.
Переходим в папку с настройками nginx:
cd /etc/nginx/sites-available/
Открываем файл default и вносим следующее:
server {
listen 8000;
server_name 192.168.10.5; #либо ip, либо доменное имя
access_log /var/log/nginx/example.log;
location /static/ {
root /home/anton/Django-u/magazine/main_site/;
expires 30d;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Далее:
sudo service nginx restart
Перехожу по адресу проекта (/home/anton/Django-u/magazine/) и загружаю через gunicorn:
gunicorn magazine_project.wsgi:application --bind 192.168.10.3:8000
Результат в консоли:
(mag_env) anton@anton-X451CA:~/Django-u/magazine$ gunicorn magazine_project.wsgi:application --bind 192.168.10.3:8000
[2017-08-13 15:25:05 +0700] [26544] [INFO] Starting gunicorn 19.7.1
[2017-08-13 15:25:05 +0700] [26544] [INFO] Listening at:
192.168.10.3:8000 (26544)
[2017-08-13 15:25:05 +0700] [26544] [INFO] Using worker: sync
[2017-08-13 15:25:05 +0700] [26547] [INFO] Booting worker with pid: 26547
Not Found: /static/styles.css
Как видите, статика все же не подгрузилась. При запуске проекта через
python manage.py runserver
проблемы со статикой нет.
Что надо сделать?