Docker로 Django 프로젝트 설정
🐍
우리 모두는 원하더라도 Django가 응용 프로그램에 적합하다는 것을 알고 있습니다. Docker를 사용하면 대화가 더 좋아집니다!
개발 속도를 높일 수 있을 뿐만 아니라 응용 프로그램을 위한 환경을 개선하고 완성할 수 있는 프로젝트의 초기 설정을 보여 드리는 것은 어떻습니까?
관심 있는? 그러니 계속 읽고 나머지는 저에게 맡기세요.
요구 사항
✅시작
테스트 애플리케이션을 사용하여 개발 환경을 만들 예정이지만 이 설정은 모든 프로젝트에 적용됩니다.
변경 사항에 유의하십시오.
1 - 먼저 venv 환경을 시작합니다.
python -m venv venv && source ./venv/bin/activate
2 - 이제 종속 항목을 설치합니다(걱정하지 마세요. 각각 수행할 작업을 알려드리겠습니다).
pip install django black python-dotenv psycopg2-binary
종속성 파일을 만드는 것을 잊지 마십시오.
pip freeze > requirements.txt
Django --> 주요 프레임워크
black --> Python 코드 포맷터
python-dotenv --> Python-dotenv는
.env
파일에서 키-값 쌍을 읽고 환경 변수로 설정할 수 있습니다. psycopg2-binary --> Python용으로 가장 많이 사용되는 PostgreSQL 데이터베이스 어댑터
팁:
mysqlclient
사용3 - 앱을 초기화해 보겠습니다.
django-admin startproject your_fantastic_name .
4 -
.env
파일 생성:작업 공간의 루트로 이동하여 다음 값으로
.env
파일을 생성합니다.# App
SECRET_KEY=your_ultra_secret_key
# 1 = True or 0 = False
DEBUG=
# localhost 127.0.0.1 0.0.0.0 ...
HOSTS=
# POSTGRES
POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=
# PGADMIN
PGADMIN_DEFAULT_EMAIL=
PGADMIN_DEFAULT_PASSWORD=
나중에 이 값이 유용할 것입니다.
5 - 애플리케이션 구성:
먼저
settings.py
파일에 있는 애플리케이션의 핵심으로 이동하고 일부 가져오기를 추가하겠습니다.기본적으로 경로는 이미 가져왔지만
python-dotenv
패키지를 사용하기 위해 가져오기를 두 개 더 추가해 보겠습니다.# settings.py
from pathlib import Path
from dotenv import load_dotenv
import os
그리고 바로 아래에서
os
를 사용하여 프로젝트를 구성합니다.# settings.py
load_dotenv()
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = int(os.getenv("DEBUG", default=0))
ALLOWED_HOSTS = os.getenv("HOSTS").split(" ")
팁 2:
# settings.py
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [os.path.join(BASE_DIR, "templates")],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
]
},
}
]
# settings.py
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
"PAGE_SIZE": 5,
"DEFAULT_RENDERER_CLASSES": ["rest_framework.renderers.JSONRenderer"],
"DEFAULT_PARSER_CLASSES": [
"rest_framework.parsers.JSONParser",
"rest_framework.parsers.FormParser",
],
"DEFAULT_THROTTLE_CLASSES": [
"rest_framework.throttling.AnonRateThrottle",
"rest_framework.throttling.UserRateThrottle",
],
"DEFAULT_THROTTLE_RATES": {"anon": "15/min", "user": "20/min"},
}
6 - Django에서 데이터베이스 설정:
이 맥락에서 저는 postgres를 독점적으로 사용하여 연결을 구성하기 위해 다음 값으로 DATABASE 객체를 수정하기만 하면 됩니다.
# settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("POSTGRES_DB"),
"USER": os.getenv("POSTGRES_USER"),
"PASSWORD": os.getenv("POSTGRES_PASSWORD"),
"HOST": "db",
"PORT": 5432,
}
}
더 많은 팁:
# settings.py
LANGUAGE_CODE = "pt-BR"
TIME_ZONE = "America/Sao_Paulo"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
STATICFILES_DIRS = (os.path.join(BASE_DIR, "templates/static"),)
STATIC_ROOT = os.path.join("static")
MEDIA_URL = "media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
도커 설정 🌊
먼저 앱용 빌드가 필요합니다. 빌드해 보겠습니다.
# Image of python with Debian
FROM python:3.9-bullseye
# Set Workdir
WORKDIR /usr/src/app
# Envs for don't generate pycache
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Some important libs
RUN apt update && apt upgrade -y \
&& apt install gcc python3-dev musl-dev bash build-essential libssl-dev libffi-dev -y
# Upgrade pip, copy requirements and install all the project dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# Entrypoint gonna be useful when we up the container
COPY entrypoint.sh .
RUN sed -i 's/\r$//g' /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh
# Copy all the files for the root dir
COPY . .
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
이제 모든 도구와 앱을 구성하려면 작성 파일이 필요합니다.
version: "3"
services:
web:
build: .
container_name: "web-app-server"
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app/
ports:
- 8000:8000
networks:
- postgres
env_file:
- ./.env
depends_on:
- db
db:
image: postgres:13.0-alpine
container_name: "postgres-db-server"
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
networks:
- postgres
env_file:
- ./.env
pgadmin:
container_name: "pgadmin-django-server"
image: dpage/pgadmin4
environment:
- PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
- PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
volumes:
- pgadmin:/root/.pgadmin
ports:
- "5050:80"
networks:
- postgres
env_file:
- ./.env
depends_on:
- db
volumes:
postgres_data:
pgadmin:
networks:
postgres:
driver: bridge
알고 계시다면 Compose는 데이터베이스 이름, 사용자 이름, 비밀번호 등과 같이 .env 파일에 정의한 값을 읽습니다.
파일에 어떤 값이 정의되어 있는지 확실하지 않은 경우 터미널에서 명령
docker-compose config
을 실행하면 모든 값으로 구성이 표시됩니다.마지막으로 진입점 파일
#!/bin/sh
# entrypoint.sh
# Verify if the database is connected
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
# Delete all the tables
python manage.py flush --no-input
# Do a new migrate
python manage.py migrate
exec "$@"
예, 더 많은 팁 😄:
.dockerignore
을 추가합니다.venv
이제 앱을 시작하겠습니다 🎯
약간의 명령만 내리면 됩니다.
docker-compose up
이것으로 3개의 컨테이너, 데이터베이스, pgAdmin 및 자체 애플리케이션을 모두 쉽게 사용자 정의하고 새로운 도구를 구현할 수 있는 설정으로 업로드하게 됩니다.
의심스러운 경우 "도커로 내 애플리케이션에 어떻게 액세스할 수 있습니까?", 간단합니다. 도커를 사용하면 모든 것을 할 수 있습니다!
첫 번째 유형:
docker ps
컨테이너의 ID를 가져오고 다음을 수행합니다.
docker exec -it id_of_container bash
이제 간단한 방법으로 애플리케이션을 개발할 수 있습니다. :)
이제 결과를 볼 수 있습니다!
이 튜토리얼을 통해 특별한 터치로 Django 애플리케이션을 만드는 데 도움이 되었기를 바랍니다.
다음에 만나요!
Reference
이 문제에 관하여(Docker로 Django 프로젝트 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/drack112/setup-a-django-project-with-docker-128f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)