Python/Django Framework (DRF)

Django의 정적 파일이 정상적으로 동작하지 않는 경우 확인할 것

4OurFuture 2025. 2. 25. 16:20
728x90
반응형

Rocky Linux에서 Django의 정적 파일이 정상적으로 서빙되지 않는다면 다음 항목들을 체크해 보세요.

1. STATIC 관련 Django 설정 확인 (settings.py)

먼저 settings.prod.py 또는 관련된 설정 파일에서 STATICFILES 관련 설정을 확인하세요.

STATIC_URL = '/static/'  # 정적 파일 요청 URL 경로  
STATIC_ROOT = '/opt/django-apps/static/'  # `collectstatic` 실행 후 정적 파일이 모이는 폴더  
STATICFILES_DIRS = [  # 개발 환경에서 사용하는 정적 파일 경로 (운영 환경에서는 사용하지 않아도 됨)
    os.path.join(BASE_DIR, "staticfiles"),
]

STATIC_ROOT가 올바른 경로인지 확인하세요. Django에서 collectstatic 실행 시 이 디렉터리로 정적 파일을 모읍니다.


2. 정적 파일 수집 (collectstatic)

Django는 운영 환경에서 직접 정적 파일을 제공하지 않으므로, collectstatic 명령어를 실행해야 합니다.

DJANGO_SETTINGS_MODULE=jira_to_okta.settings.prod python manage.py collectstatic --noinput
 

이후, STATIC_ROOT 경로(/opt/django-apps/static/)에 정적 파일들이 정상적으로 수집되었는지 확인하세요.

ls -l /opt/django-apps/static/
 

파일들이 없다면 settings.prod.py의 STATICFILES_DIRS가 올바르게 설정되었는지 확인하세요.


3. Gunicorn이 정적 파일을 서빙하지 않음

Gunicorn은 정적 파일을 직접 제공하지 않습니다. 따라서 Nginx가 정적 파일을 제공하도록 설정해야 합니다.

Nginx 설정 확인 (/etc/nginx/conf.d/django.conf)

Nginx가 STATIC_ROOT를 올바르게 서빙하고 있는지 확인하세요.

server {
    listen 80;
    server_name your_domain_or_ip;

    location /static/ {
        alias /opt/django-apps/static/;
        autoindex on;
    }

    location / {
        proxy_pass http://unix:/opt/django-apps/iis_jira_to_okta/gunicorn.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
 

이후 Nginx 설정을 다시 로드합니다.

sudo nginx -t  # 설정 테스트
sudo systemctl restart nginx  # Nginx 재시작

4. SELinux 확인 (SELinux 활성화 시 정적 파일 접근 문제 발생 가능)

SELinux가 활성화되어 있으면 Nginx가 STATIC_ROOT에 접근하지 못할 수도 있습니다. 아래 명령어로 확인하세요.

sestatus
 

만약 Enforcing으로 설정되어 있다면, SELinux의 보안 컨텍스트를 변경해야 합니다.

 
sudo chcon -R --type=httpd_sys_content_t /opt/django-apps/static/

또는 SELinux를 일시적으로 비활성화할 수도 있습니다.

sudo setenforce 0

5. 파일 및 디렉터리 권한 확인

Nginx가 정적 파일을 읽을 수 있도록 올바른 권한이 설정되어 있는지 확인하세요.

sudo chown -R deploy_user:deploy_user /opt/django-apps/static/
sudo chmod -R 755 /opt/django-apps/static/

6. Nginx & Gunicorn 로그 확인

문제가 지속된다면 로그를 확인하세요.

Nginx 에러 로그 (/var/log/nginx/error.log)

sudo tail -f /var/log/nginx/error.log
 

Gunicorn 로그 (journalctl -u gunicorn --no-pager)

sudo journalctl -u gunicorn --no-pager | tail -n 20

🔥 최종 점검 체크리스트

✅ STATIC_ROOT 설정이 올바른지 확인
✅ collectstatic 실행 후 정적 파일이 존재하는지 확인
✅ Gunicorn이 정적 파일을 서빙하지 않는다는 점을 이해하고 있는지 확인
✅ Nginx 설정에서 /static/ 요청이 STATIC_ROOT로 매핑되는지 확인
✅ SELinux가 문제를 일으키고 있는지 확인
✅ 파일 및 디렉터리 권한이 올바른지 확인
✅ Nginx 및 Gunicorn 로그를 점검하여 추가 오류 확인

이제 다시 한 번 확인해 보고 정적 파일이 정상적으로 로드되는지 테스트해 보세요! 🚀

728x90
반응형