Nginx와 Staticfile 설정

앞 서 본 nginx/static/의 셋팅은 자신의 app 내에서만 Nginx로 처리가 가능하다. django.contrib.admin 라는 앱에도 정적 파일이 존재 하지만 접근 해당 셋팅으로는 접근 할 수가 없다.

모든 설치된 애플리케이션의 정적 파일을 Nginx가 서빙하기 위해서는 ./manage.py collectstatic 를 사용하여야 한다. collectstaticSTATIC_ROOT라고 지정한 폴더에 모든 애플리케이션이 가진 static folder의 내용과 STATICFILES_DIRS에 지정 한 내용의 모든파일을 복사 한다. 기존에 있던 파일은 덮어 쓴다. 자동으로 만들어 지는것이 아니라 해당 앱의 폴더의 내용을 그냥 복사 하는것이므로 static 파일의 이름이나 경로가 겹치지 않게 주의 하자. .gitingnore에 해당 폴더를 넣어 주자.

/.media
/.static
./manage.py collectstatic

그리고 나서 /static/ 요청을 Nginx가 서빙하게 하자

# nginx-app.conf
location /static/ {
    alias /src/ec2/deploy/.static/;
}

그리고 서버에서 ./manage.py collectstatic을 실행 시키기 위해 deploy.sh를 수정 해보자

# deploy.sh
# collectstatic을 위한 과정
cd /srv/ec2-deploy/app
# ubuntu유저로 collectstatic명령어를 실행 (deploy스크립트가 root권한으로 실행되므로)
/bin/bash -c \
'/home/ubuntu/.pyenv/versions/fc-ec2-deploy/bin/python \
/srv/ec2-deploy/app/manage.py collectstatic --noinput' ubuntu

# 서버 재시작 전

하지만 정적파일이 서버에 없는 경우 결국 Django까지 접근 해야 한다. AWS 의 S3에 데이터를 넣었을 경우 어쩔수 없이 밖에서 꺼내 와야 한다. Nginx를 사용할 수도 있긴하다…

Comments