Django 앱을 Apache2로 배포하면 정적 파일을 읽지 못할 때
이 슬라이드를 알기 쉽기 때문에 여기를 읽는 것이 좋습니다.
htps : // 펑크. 기주 b. 이오 / d 쟈고 곤g 렛 sjp2019 / # 43
1. Django의 정적 파일 처리
Django에서는 정적 파일의 취급이 개발중과 프로덕션 환경에서 다릅니다. 이것을 전환하는 것은 setting.py의 DEBUG = True/False입니다.
DEBUG = True일 때 /static/
django는 앱마다 폴더 나누어 개발하도록 만들어져 있기 때문에 정적 파일인 CSS나 이미지 파일도 앱의 폴더에 넣게 되어 있습니다. 그 때문에 개발중을 의미하는 DEBUG = True 사이는 setting.py에 쓴 STATIC_URL이나 STATICFILES_DIRS로 지정한 폴더 이하에 있는/static/라는 이름의 폴더를 모두/static/라는 Alias로 취급해 줍니다.
예를 들어 project/app1/static/base.css와 같은 파일이있는 경우,
h tp:// 이 m/s들 c/바세. cs 인 것으로 취급해 줍니다.
프로덕션 환경에서 django가 /static/을 전달하지 않는 이유
프로덕션 환경에서 이 기능을 사용해 버리면 메인 프로세스에 쓸데없이 부하가 걸려 버리고, 취약성의 원인이 될 수 있으므로 프로덕션 환경에서는 이 기능을 끊지 않으면 안됩니다. 이것을 강제하기 위해 Apache2 등으로 Django 앱을 배포하면 DEBUG = False로 하지 않으면 샘플 화면 밖에 표시되지 않습니다.
DEBUG = False일 때 /static/
DEBUG = True일 때는 Django가/static/라는 Alias에서 정적 파일을 제공하고 있었지만 DEBUG = False가 되면 제공하지 않으므로, 앞의 예에서 말하면 h tp:// 이 m/s들 c/바세. cs 은 존재하지 않는다는 것이 된다 합니다. 이것을 Apache등에서 제공해 주면 개발중과 같은 동작을 얻을 수 있습니다.
2. Apache2 설정 절차
python manage.py collectstatic을 사용하여 정적 파일을 한 곳에 모아서 아파치 2가/static/로 묶은 위치를 apahce2.conf에 씁니다. 장고 소녀 튜토리얼 에서하고있는 방법과 같습니다.
2-1. 정적 파일을 한 곳에 모으기
아래와 같이 프로젝트 바로 아래에 static이라는 폴더를 만들어 모아 줍니다.
/home/xxxx/django/proj1/
proj1
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── myvenv
│ └── ...
├── static 静的ファイルを集める場所
│ ├── hoge.jpg
│ └── base.css
└── requirements.txt
정적 파일을 수집할 위치(STATIC_ROOT)를 지정합니다.
아래에서는/home/xxxx/django/proj1/static/이 STATIC_ROOT입니다.
proj1/mysite/setting.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
collectstatics 명령을 실행하면 STATIC_ROOT의 PATH에 정적 파일을 수집합니다.
terminal
cd /home/xxxx/django/proj1
python manage.py collectstatics
2-2. 정적 파일의 위치를 apache2.conf에 추가
/home/xxxx/django/proj1/static/base.css 를 h tp:// 이 m/s들 c/바세. cs 로 취급하고 싶으므로 폴더에 Alias를 붙여 권한(Require all granted)합니다.
/etc/apache2/apache2.conf
Alias /static/ /home/xxxx/django/proj1/static/
<Directory /home/xxxx/django/proj1/static>
Require all granted
</Directory>
설정을 변경했으므로 Apache2를 다시 시작합니다.
terminal
sudo /etc/init.d/apache2 restart
2-3. 잘 되지 않는 경우
collectstatics는 단순히 파일을 복사하기 때문에 STATIC_ROOT에 파일이 복사되어 있는지 확인하면 동작을 확인할 수 있습니다.
Apache2의 등록이 잘 되어 있지 않은 경우는, Apache2의 에러 로그에 Django wsgi Apache2: 'AH01630: client denied by server configuration' 가 나올 것입니다. apache2.conf의 내용이 STATIC_ROOT와 동일한지 확인하십시오.
기본 설정을 그대로두면 Apache2 오류 로그는 다음과 같습니다.
terminal
tail -f /var/log/apache2/error.log
Reference
이 문제에 관하여(Django 앱을 Apache2로 배포하면 정적 파일을 읽지 못할 때), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/studio_haneya/items/701e5539f1dd4bb389ac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)