Как правильно настроить хранение и доставку (обслуживание) статических и медиафайлов на хостинге?

На хостинге hoster.by основной сайт показывает все изображения и медиа, но административная часть вообще не подгружается — будто не видит папку со стилями (утилита unfold для кастомной админки). Есть папки: static по пути /www/kapron.by/var/www/мой_логин/rope_site/static/ и staticfiles по пути /www/kapron.by/var/www/мой_логин/rope_site/staticfiles/. В settings.py у меня указано: <br/> STATIC_URL = '/static/' <br/> STATIC_ROOT = '/www/kapron.by/var/www/мой_логин/rope_site/static/' <br/> STATICFILES_DIRS = [ <br/> "/www/kapron.by/var/www/мой_логин/rope_site/staticfiles/", <br/> ] <br/> <br/> MEDIA_URL = '/media/' <br/> MEDIA_ROOT = "/www/kapron.by/var/www/мой_логин/rope_site/media" <br/> Что нужно поменять в конфигурации путей или настройках хостинга, чтобы админка начала корректно загружать свои статические файлы?
  • 4 июня 2026 г. 15:01
Ответы на вопрос 1
Коротко — проблема не в admin или unfold, а в том, что ваши статические файлы (включая файлы админки Django) не оказываются в той папке, которую веб‑сервер отдаёт по URL /static/. Что с этим делать — пошагово.

1) Понять текущую структуру и что отдаёт веб‑сервер
- Откройте страницу админки в браузере, посмотрите в разметке URL CSS/JS (обычно /static/admin/...). Попробуйте открыть такой URL напрямую — возвращает 404 или 200?  
- Посмотрите, какая файловая папка у вас реально содержит собранные статические файлы (есть ли в ней папка admin, css, js и т.д.). У вас есть две папки:
  - /.../rope_site/static/  
  - /.../rope_site/staticfiles/  
  Нужно понять, какая из них ожидается веб‑сервером как корень для /static/.

2) Правильная логика настроек Django
- STATICFILES_DIRS — папки, где Django ищет исходные статические ресурсы вашего проекта (обычно ваш проектный static/).
- STATIC_ROOT — папка, куда команда collectstatic собирает все статические файлы (включая django.contrib.admin) для последующей отдачи веб‑сервером.
- STATIC_URL — URL префикс (обычно /static/).

Типичный вариант (рекомендуемый):
- STATIC_URL = '/static/'
- STATICFILES_DIRS = ['/www/.../rope_site/static/']  # ваши исходники
- STATIC_ROOT = '/www/.../rope_site/staticfiles/'   # папка, которую должен отдавать веб‑сервер

3) Выполните collectstatic
- На сервере выполните:
  python manage.py collectstatic
  Это скопирует файлы из STATICFILES_DIRS и из приложений (admin и другие) в STATIC_ROOT.

4) Настройте веб‑сервер (или панель хостинга) так, чтобы он раздавал /static/ из STATIC_ROOT
- Apache (пример):
  Alias /static/ /www/.../rope_site/staticfiles/
  <Directory /www/.../rope_site/staticfiles/>
    Require all granted
  </Directory>
- Nginx (пример):
  location /static/ { alias /www/.../rope_site/staticfiles/; }
- Если у хостера есть интерфейс «Статические файлы / Aliases», создайте правило: URL /static/ → /www/.../rope_site/staticfiles/

5) Проверки и права
- Убедитесь, что файлы в STATIC_ROOT действительно содержат папку admin (например staticfiles/admin/...).  
- Проверьте права: веб‑сервер должен иметь чтение (обычно 755 для каталогов, 644 для файлов).  
- Перезагрузите веб‑сервер / примените изменения в панели.

6) Альтернативы и временные решения
- Если вы не можете настраивать веб‑сервер, можно использовать WhiteNoise (включить в WSGI/ASGI) — он будет отдавать статические файлы из STATIC_ROOT сам (подходит для простых хостингов).
- Можно создать символьную ссылку, если хостер ожидает другую папку: ln -s /www/.../rope_site/staticfiles /www/.../rope_site/static (или наоборот), но это костыль — лучше корректно настроить STATIC_ROOT и веб‑сервер.

7) MEDIA (аналогично)
- MEDIA_URL = '/media/' и MEDIA_ROOT указывают, где лежат загруженные пользователями файлы. Веб‑сервер тоже должен отдавать /media/ из этой папки.

Резюме конкретно для вашего случая
- Самый быстрый способ: поменяйте местами значения (чтобы STATIC_ROOT указывал на ту папку, которую вы хотите отдавать), например:
  STATICFILES_DIRS = ['/www/.../rope_site/static/']
  STATIC_ROOT = '/www/.../rope_site/staticfiles/'
- Выполните python manage.py collectstatic
- В панели hoster.by (или в конфиге Apache/Nginx) укажите, чтобы URL /static/ указывал на /www/.../rope_site/staticfiles/
- Проверьте права и убедитесь, что в staticfiles/ есть admin CSS/JS

Если после этого админка всё ещё не подгружает CSS — пришлите:
- Пример URL, по которому в HTML ищется CSS (строку из <link href="...">),
- Результат запроса к этому URL (статус 200/404) и список файлов в /www/.../rope_site/staticfiles/ (ls -la),
и я подсскажу точную правку.
Похожие вопросы