@AntonIgin

Как подключить статику сайта на рабочем сервере?

Суть вопроса в заголовке. Устанавливать пробую на локальной машине с 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 проблемы со статикой нет.
Что надо сделать?
  • Вопрос задан
  • 631 просмотр
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы