Статические файлы не загружаются для продукта Django в Digital Ocean

Я собираюсь опубликовать свой первый проект Django в дроплете Digital Ocean. Я следовал официальному руководству Digital Ocean по установке Django на дроплете (https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn). -on-ubuntu-22-04#creating-systemd-socket-and-service-files-for-gunicorn) и все работало нормально, но отдача статических файлов.

Вот ключевые части моих файлов:

settings.py

BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_ROOT = os.path.join(BASE_DIR,"static")

STATIC_URL = '/static/'

DEBUG = False

COMPRESS_ROOT = os.path.join(BASE_DIR,"static")

COMPRESS_ENABLED = True

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
]

urls.py

urlpatterns = [
    ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Вот моя структура папок в цифровом океане:

root/
    snap/
    gymtracker/
        gymenv/
        gymtracker/
            gymtrackerapp/
            static/

Я вижу в терминале в цифровом океане, что все статические файлы находятся в этом месте:

/ корень / спортзал / спортзал / статический /

но когда я загружаю страницу, я получаю 403 для статических файлов (в противном случае страница загружается нормально):

Метод запроса: ПОЛУЧИТЬ

Код состояния: 403 Запрещено

Большое спасибо за Вашу помощь!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение найдено.

Учебное пособие по цифровому океану (https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-22-04#creating -systemd-socket-and-service-files-for-gunicorn) пропустил одно важное изменение конфигурации Nginx в конце, чтобы ваши статические ресурсы отображались.

После того, как вы выполните руководство, вам нужно отредактировать /etc/nginx/nginx.conf и изменить пользователя с www-data на ваше имя пользователя (например, sammy), запустив

sudo nano /etc/nginx/nginx.conf

Другие вопросы по теме