728x90
반응형
Django를 운영하기 위해 로컬, 도커 환경을 분리하게 되었다.
먼저, settings.py를 분해해보자. 아직은 settings.py를 삭제하지 말고 먼저 settings 폴더 아래와 위와 같이 만들어준다.
각 파일은 아래와 같다. 각 환경 파일에서 base.py의 환경 파일을 import 받아 사용하는 구조이다.
- base.py: 기본 환경 파일
- docker.py: 도커 환경 파일
- local.py: 로컬 환경 파일
base.py를 아래와 같이 작성해준다. 시크릿 키에는 자신의 장고 프로젝트를 생성할 때 생성된 시크릿 키를 넣는다.
from .base import * # noqa: F403, F40
DEBUG = False
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "YOUR_KEY"
ALLOWED_HOSTS = ["*"]
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "admin",
"USER": "postgres",
"PASSWORD": "postgres",
"HOST": "172.17.0.1",
"PORT": "5432",
},
}
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://redis:6379/0",
}
}
RATELIMIT_USE_CACHE = "default"
local.py도 비슷하다. 로컬 환경에서 사용할 환경 값들을 넣어준다.
from .base import * # noqa: F403, F40
DEBUG = True
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "YOUR_KEY"
ALLOWED_HOSTS = ["*"]
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "admin",
"USER": "postgres",
"PASSWORD": "postgres",
"HOST": "localhost",
"PORT": "5432",
},
}
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://localhost:6379/0",
}
}
RATELIMIT_USE_CACHE = "default"
.gitignore에 아래와 같이 추가해준다. 해당 환경 설정 파일들엔 숨겨야 하는 환경 설정 값들도 모두 넣어준다. 나의 경우엔 시크릿 키와 디비 설정, 레디스 설정 등을 넣었다.
# settings
local.py
docker.py
완료 됐으면 이제 환경 설정 파일을 적용해준다. 아래와 같이 docker-compose 파일에 환경 전달 인자를 추가해준다.
version: '3.9'
services:
app:
container_name: app
restart: "no"
build:
context: .
args:
- DJANGO_SETTINGS_MODULE=app.settings.docker
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app:/app/
working_dir: /app
ports:
- "8000:8000"
networks:
- app-network
depends_on:
- db
- redis
db:
container_name: db
image: postgres:15.6-alpine
environment:
POSTGRES_DB: admin
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
volumes:
- ./postgres/data:/var/lib/postgresql/data/
networks:
- app-network
redis:
container_name: redis
image: redis:7.2.4-alpine
ports:
- "6379:6379"
networks:
- app-network
networks:
app-network:
driver: bridge
이제 로컬 설정을 해준다. app(django project의 이름) 폴더 하위 asgi.py 파일에서 아래와 같이 변경해준다.
"""
ASGI config for helloworld project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
# 장고 환경 모듈 경로 설정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings.local")
application = get_asgi_application()
app 폴더의 wsgi.py 파일도 동일하게 변경해준다.
"""
WSGI config for helloworld project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
# 장고 환경 모듈 경로 설정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings.local")
application = get_wsgi_application()
이제 로컬에서 장고를 실행 한다. 아래와 같이 설정 모듈이 변경 되었음을 알 수 있다.
이제 도커에서 실행해보자. 마찬가지로 역시 설정 모듈이 변경 된 것을 확인할 수 있다.
이제 위의 환경 분리를 응용하면 prod, test, dev 등의 환경을 만들 수 있다. 이를 통해 운영 및 개발 환경을 분리할 수 있게 된다.
728x90
반응형
'Backend > Django' 카테고리의 다른 글
Django restframework-simplejwt 로 jwt 인증 구현하기 (feat. Blacklist) (0) | 2024.03.17 |
---|---|
Django Abstract Model 사용 (0) | 2024.03.13 |
Django 멀티 디비 설정 (0) | 2024.03.13 |
Django order_by와 annotate, extra 활용 (0) | 2024.03.13 |
Django queryset 파보기 (0) | 2024.03.12 |