Nginx로 Django 정적 파일 제공
훌륭한 선택인 NGINX를 사용하고 있지만 Django 프로젝트에는 실제로 정적 파일에 대한 구성이 있습니다.
Django 애플리케이션이 NGINX를 통해 실행된다는 점을 감안할 때 NGINX를 통해 정적 파일을 구성하고 제공하는 것이 중요합니다.
Django 정적 파일 구성
Django 정적 파일에 익숙하지 않은 경우 내가 작성한 작은 기사를 읽을 수 있습니다.
다음은 간단한 프로젝트를 위한 Django 구성입니다.
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
배포 프로세스에서
python manage.py collectstatic
명령이 실행되었는지 확인하는 것이 중요합니다. 이 명령을 사용할 때 Django는 앱에서 모든 정적 파일을 찾아 STATIC_ROOT
경로에서 수집한 다음 staticfiles
에서 수집합니다.NGINX 웹서버 구성 파일
sudo nano /etc/nginx/sites-enabled/django-app.conf
django-app.conf
파일 내에서 Django 프로젝트의 정적 파일 위치를 추가해야 합니다.location /static/{
autoindex on;
alias /home/app/django-app/staticfiles/; // => the path to the static folder
}
그런 다음
NGINX
서버를 다시 로드하면 됩니다.이 솔루션은 약간 길며 자동화되지 않았습니다. 대부분의 경우
Docker
를 사용하고 다른 시스템에서 다른 시스템으로 코드를 이동하고 컨테이너를 시작합니다.NGINX 및 Docker로 정적 파일 제공
Django 애플리케이션의 동일한 설정을 사용하여 정적 파일을 제공하기 위해 동일한 구성을 포함하는 파일
docker-compose.yaml
을 작성해 보겠습니다.기본적으로 두 가지 서비스가 필요합니다.
다음은
Dockerfile
의 첫 번째 모습입니다. 이Dockerfile
는 Django 애플리케이션 서비스의 이미지로 빌드되어 사용될 것입니다.# pull official base image
FROM python:3.10-alpine
# set work directory
WORKDIR /app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN apk update \
&& apk add gcc python3-dev
# install python dependencies
COPY requirements.txt /app/requirements.txt
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# copy project
COPY . .
다음은 정적 파일의 예입니다.
version: '3.9'
services:
nginx:
container_name: core_web
restart: on-failure
image: nginx:stable
volumes:
- ./nginx/nginx.dev.conf:/etc/nginx/conf.d/default.conf
- static_volume:/staticfiles
ports:
- "80:80"
depends_on:
- api
api:
container_name: core_app
build: .
restart: always
env_file: .env
ports:
- "5000:5000"
command: >
sh -c " python manage.py migrate &&
gunicorn CoreRoot.wsgi:application --bind 0.0.0.0:5000"
volumes:
- .:/app
- static_volume:/staticfiles
volumes:
static_volume:
또한 정적 파일 요청을
staticfiles
폴더로 라우팅하도록 Nginx 구성 파일을 업데이트합니다.
upstream webapp {
server core_app:5000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webapp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static/ {
autoindex on;
alias /home/app/django-app/staticfiles/;
}
}
그리고 우리는 끝났습니다. :)
무언가를 추가하고 싶거나 의견이 있으십니까? 댓글 섹션에서 이에 대해 논의해 보겠습니다.
bloggu.io을(를) 사용하여 게시된 기사. 무료로 사용해 보세요.
Reference
이 문제에 관하여(Nginx로 Django 정적 파일 제공), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koladev/serving-djangos-static-files-with-nginx-3nc4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)