- java
- PYTHON
- ORM
- spring mvc
- hibernate
- @transactional
- DI
- 스프링
- 1차원 배열
- 프로그래머스
- 문자열
- sql
- Docker
- static
- Django
- select
- mysql
- AWS
- spring boot
- 자바
- spring security 6
- join
- jpa
- springboot
- SSL
- 데이터베이스
- nginx
- spring
- 스프링부트
- string
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
개발하는 자몽
[Django] 배포 환경에서 Nginx로 media file 제공하기 on Docker 본문
static file 관리
Django 프로젝트를 배포할 때
이미지가 저장된 경로로 API 요청하는 것에 대해서
static 파일 관리는
관련 내용은 여기를 참고하자.
media file 제공
nginx를 통해서 미디어 파일을 제공하는 방법은 매우 간단하다. (너무 간단해서 처음 알아봤을 때 좀 의심스러웠다..ㅎ)
nginx.conf
..
http {
...
server {
...
# media setting
location /media/ {
alias /media/;
}
...
}
}
클라이언트가 /media/temp.png 와 같은 파일을 요청할 경우, Nginx 컨테이너 내부의 /media/ 아래(alias 경로)에서 파일을 찾아 클라이언트에게 전송한다.
🔹location
- Nginx 웹 서버를 연결하는 경로를 설정하는 것
location 에서 경로를 설정할 때,root 와alias 가 자주 사용됨
🔹root
아래와 같이 root를 사용하는 경우, nginx 웹 서버는 /var/www/project/text의 경로에서 파일을 탐색한다.
```
location /test/ {
root /var/www/project/;
}
```
🔹alias
아래와 같이 alias를 사용하는 경우, nginx 웹 서버는 /var/www/project/의 경로에서 파일을 탐색한다. (/test/ 무시)
location /test/ {
alias /var/www/project/;
}
docker-compose.yml
기존에 Django 서버와 Nginx를 Docker 컨테이너로 실행하고 있었기 때문에 docker-compose.yml을 수정해 준다. 아래 파일은 지난번 로드밸런싱 포스팅의 코드에서 Nginx의 미디어 파일 관련된 코드가 추가된 버전이다.
version: "3.5"
services:
_build_image:
image: ...
build: .
server1:
image: ...
restart: always
command: python ... runserver 0.0.0.0:4100
ports:
- "4100"
depends_on:
- _build_image
volumes:
- media-vol:/server/server/media/ # nginx에서 media를 사용할 수 있도록 volume 지정
server2:
image: ...
restart: always
command: python ... runserver 0.0.0.0:4100
ports:
- "4100"
depends_on:
- _build_image
volumes:
- media-vol:/server/server/media/ # nginx에서 media를 사용할 수 있도록 volume 지정
nginx:
image: nginx
build: ./nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- media-vol:/media/ # django의 media를 사용할 수 있도록 volume 지정
depends_on:
- server1
- server2
ports:
- "4100:80"
volumes:
media-vol:
external: true
'Python > Django' 카테고리의 다른 글
[Django / TIL] ORM 쿼리 메서드 filter(), get() (0) | 2024.01.29 |
---|---|
[Django] Swagger를 이용한 API 문서화 (0) | 2024.01.20 |
[Django] 환경변수 관리 (django-environ) (1) | 2024.01.06 |
[Django] 개발 환경 분리 (1) | 2023.12.30 |
[Django / TIL] request와 requests (0) | 2023.10.30 |