Django의 정적 파일이 정상적으로 동작하지 않는 경우 확인할 것
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 로그를 점검하여 추가 오류 확인
이제 다시 한 번 확인해 보고 정적 파일이 정상적으로 로드되는지 테스트해 보세요! 🚀