نحوه Dockerize کردن Django و Postgre - برای محیط development
در این پست به نحوه داکرایز کردن پروژه های جنگو خواهیم پرداخت و در ادامه به راه کار های موجود و یک قالب آماده برای پیاده سازی پروژه های جنگو را به شما معرفی خواهیم کرد. در نظر داشته باشید که برای درک این موضوع نیاز به یادگیری داکر خواهید داشت و می بایست تا حد خیلی خوبی به ساختار ایجاد Dockerfile و همچنین استفاده از docker-compose اشراف داشته باشید
پیاده سازی پروژه های جنگو با قالب آماده من
فاز های توسعه نرم افزار
فرایند توسعه، تست و اجرای یک نرمافزار به طور کلی شامل سه فاز اصلی است: توسعه، استیج و پروداکشن. در ادامه به توضیح هر یک از این فازها میپردازیم:
۱. فاز توسعه: در این فاز، توسعهدهندگان به طور مداوم کد نویسی میکنند و قابلیتهای جدیدی را به نرمافزار اضافه میکنند. در این فاز، اکثر کارها در محیط توسعهیافته و در دسترس توسعهدهندگان صورت میگیرد. در این فاز، توسعهدهندگان باید به طور مداوم کد نویسی و تست واحدهای خود را انجام دهند تا از عملکرد درست و پایدار نرمافزار اطمینان حاصل کنند.
۲. فاز استیج: در این فاز، نرمافزار به صورت کامل تست میشود و همه قابلیتها و خصوصیات آن مورد بررسی قرار میگیرد. در این فاز، تستهای عملکردی، تستهای واحد، تستهای انتقال و تستهای سیستمی انجام میشود. برای اطمینان از کیفیت نرمافزار، تستهای مختلف در این فاز اجرا میشود و هر گونه مشکل و ایراد در نرمافزار شناسایی و رفع میشود.
۳. فاز پروداکشن: در این فاز، نرمافزار به صورت کامل آماده ارائه به مشتریان و کاربران است. در این فاز، نرمافزار در محیط واقعی کاربران اجرا میشود و هر گونه مشکل و ایراد در عملکرد آن باید به سرعت رفع شود. در این فاز، نگهداری و پشتیبانی از نرمافزار نیز بسیار مهم است.
به طور کلی، هر یک از این فازها به منظور اطمینان از کیفیت و عملکرد درست نرمافزار بسیار مهم است. همچنین، این فازها باید به صورت مداوم و بهبود یافته تکرار شوند تا بتوان نرمافزار را به صورت مداوم بهبود داد و به عملکرد بهتری دست یافت.
نکته: فرض بر این است که شما در حال حاضر یک پروژه جنگو آماده دارید و می خواهید ساختارش را با docker ادغام نمایید. با این حال ساختار پروژه را بسیار ساده در نظر میگیریم.
نکته: در این پست به پیاده سازی بخش فاز توسعه خواهیم پرداخت.
│ .gitattributes
│ LICENSE
│ README.md
│ .gitignore
└───core
│ manage.py
│
└───core
│ asgi.py
│ error_views.py
│ settings.py
│ urls.py
│ wsgi.py
└─── __init__.py
فاز توسعه و یا Dev
در این مرحله می خواهیم که پروژه جنگو ما در مرحله debug قرار بگیرد و بتوان تست های لازم را در کنار عملکرد های پایه انجام داد. از جمله عمکلرد ها راه اندازی خود پروژه جنگو است که نیازمند 3 بخش اصلی برای راه اندازی است:
- ساخت Dockerfile مربوطه
- ساخت docker-compose
- ساخت requirements
ساخت requirements
در این مرحله تمام کتابخانه هایی که در پروژه خود قرار است استفاده نمایید را درج می کنید. نکته مهم در بعضی موارد بهتر است کتابخانه را با ورژن دقیق ذکر کنین و یا بازه در نظر بگیرید.
# requirements.txt
# general modules
django >3.2,<3.3
# env controls
python-decouple
# database client
psycopg2-binary
ساخت Dockerfile
برای ساخت dockefile مربوط به ایجاد django/python می بایست به شکل زیر عمل کنین:
# dockerfiles/dev/django/Dockerfile
FROM python:3.10-slim-buster
LABEL maintainer="bigdeli.ali3@gmail.com"
ENV PYTHONUNBUFFERED=1
WORKDIR /src/usr/app
COPY requirements.txt .
RUN pip3 install --upgrade pip && pip3 install -r requirements.txt
COPY ./core .
در فایل بالا ابتدا image مربوطه را تعریف خواهید کرد که کدام نسخه را می خواهید استفاده نمایید. سپس دایرکتوری پیاده سازی پروژه و در مرحله بعد نصب ماژول های پایتون و در آخر کپی کردن پوشه پروژه رو انجام خواهید داد.
ساخت docker-compose
در نهایت برای به اجرا در آوردن سرویس های مورد نیاز می بایست آنها را در فایلی مجتمع تعریف نمایید که پیاده سازی آن به شکل زیر خواهد بود:
# docker-compose.yml
version: "3.9"
services:
db:
container_name: db
image: postgres:alpine
volumes:
- ./postgre/data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
restart: always
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 10s
timeout: 5s
retries: 5
backend:
build:
context: .
dockerfile: dockerfiles/dev/django/Dockerfile
container_name: backend
command: sh -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
volumes:
- ./core:/usr/src/app
ports:
- "8000:8000"
environment:
- SECRET_KEY=test
- DEBUG=True
restart: always
depends_on:
- db
در فایل مربوطه ابتدا 2 سرویس برای عملکرد خواهیم داشت، یکی برای راه اندازی دیتابیس مربوط به Postgres و دیگری برای راه اندازی پروژه جنگو.
برای راه اندازی postgres کافیست که ابتدا نسخه دیتابیس را در قسمت image تعریف نماییم، سپس یک دایرکتوری از local را به نگهداری persistent دیتا تخصیص می دهیم تا هر بار که سرویس خاموش و روشن و یا غیر فعال می شود دیتای ما در محیط لوکال وجود داشته باشد. سپس متغیر های محیطی یا env ها را تعریف می کنیم که رد اینجا نام دیتابیس و نام کاربری و پسورد خواهند بود که برای اتصال به سرویس مربوطه نیاز خواهیم داشت.سرویس را در حالت Restart قرار یم دهیم تا در صورت شکست و اتفاق دیگر مجدد به حالت فعال برگردد و در نهایت برای اطمینان از به اجرا در آمدن آن قبل از جنگو healthcheck را به سرویس مربوطه اضافه می کنیم.
در بخش سرویس backend ابتدا به فایل Dockerfile مربوطه آدرس دهی می کنیم و سپس تعریف می کنیم که قرار است نقطه آغازین شروع کار کدام پوشه خواهد بود که نقطه منظور پوشه root است. سپس نام کانتینر را مشخص کرده و در قدم بعد دستور اجرایی که با بالا آمدن سرویس لازم به اجرا است را می نویسیم. سپس پوشه مربوط با پروژه را با پوشه مربوط به داخل کانتینر لینک می کنیم تا در صورت تغییر به صورت هماهنگ تغییرکنند. پورت خروجی کانتینر را به لوکال متصل و قابل دسترس می کنیم. و سپس متغیر های محیطی مورد نیاز پروژه و در نهایت در مد Restart قرار می دهیم تا در صورت خطا مجدد راه اندازی شود. برای اطمینان از وابستگی سرویس به دیتابیس وابستش می کنم.
دسترسی به environment ها
برای دسترسی به enviornment ها تعریف شده در داخل docker-compose کافیست که با استفاده از کتابخانه os.environ و یا python decouple و یا هر ماژول دیگری که برای استفاده از آن راحت ترید اقدام به گرفتن متغیر ها در بخش settings.py برنامه خود کنید. به نمونه درج شده دقت نمایید. بنده شخصا از کتابخانه decouple برای این کار استفاده می کنیم چرا که نحوه عملکرد راحتی تری دارد.
# core/core/settings.py
SECRET_KEY = config("SECRET_KEY", default="test")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = config("DEBUG", cast=bool, default=True)
ALLOWED_HOSTS = config(
"ALLOWED_HOSTS",
cast=lambda v: [s.strip() for s in v.split(",")],
default="*",
)
DATABASES = {
"default": {
"ENGINE": config("DB_ENGINE", default="django.db.backends.postgresql"),
"NAME": config("DB_NAME", default="postgres"),
"USER": config("DB_USER", default="postgres"),
"PASSWORD": config("DB_PASS", default="postgres"),
"HOST": config("DB_HOST", default="db"),
"PORT": config("DB_PORT", cast=int, default=5432),
}
}
چینش دایرکتوری و فایل ها
در نهایت پوشه ها به شکل زیر خواهند بود.
│ .gitattributes
│ LICENSE
│ README.md
│ .gitignore
│ docker-compose.yml
│ requirements.txt
├───core
│ │ manage.py
│ │
│ └───core
│ │ asgi.py
│ │ error_views.py
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ └─── __init__.py
│
└───dockerfiles
└───dev
└───django
Dockerfile
در اینجا برای اینکه بتوانید پروژه خود را اجرا کنید لازم است تا دستور docker-compose برای build و به اجرا در آوردن سرویس ها را در محل قرار گیری فایل docker-compose.yml اجرا کنید که به شکل زیر خواهد بود.
docker-compose up --build
در صورتی که بخواهید پروژه را متوقف و یا به صورا کامل از بین ببرید می بایست از دستورات زیر استفاده نمایید.
docker-compose stop # برای توقف
docker-compose down # برای از بین بردن سرویس ها
در نهایت اگر به درستی تغییرات را اعمال کرده باشید می بایست با باز کردن آدرس http://127.0.0.1:8000 و یا http://localhost:800 سرویس جنگو شما ران شده و قابل دسترس باشد.
برای پیاده سازی دو فاز stage و prod در پست بعد ادامه خواهیم داد.
ثبت دیدگاه
دیدگاه کاربران (0)
دوره های من در مکتبخونه
آموزش طراحی فروشگاه با جنگو
- سطح: پیشرفته 5
آموزش جنگو پیشرفته
- سطح: پیشرفته 4.9
آموزش جنگو Django
- سطح: مقدماتی 4.6
آموزش شیءگرایی در پایتون
- سطح: متوسط 4.3
آموزش میکروپایتون در اینترنت اشیا
- سطح: متوسط 3.8
آخرین پست ها
انتقال پروژه Django از پلتفرم Liara به پلتفرم Hamravesh
- خوب رسیدیم به بخش ترسناکی که برای خیلی ها می تونه کابوس باشه اونم انتقال پروژه از یک پلتفرم به پلتفرم دیگه، اما با این ویدئو مسائل رو براتون خیلی…
- django 1403/05/28
پیاده سازی پروژه Django Channels (ASGI/Websocket) بر روی پلتفرم Hamravesh
- توی این ویدئو درباره نحوه پیاده سازی پروژه های ASGI در جنگو با استفاده از ماژول Channels و Daphne صحبت خواهم کرد و یک نمونه پروژه برای تست رو در…
- django 1403/05/19
پیاده سازی پروژه django بر روی پلتفرم Caprover به همراه Media
- توی این ویدئو نحوه پیاده سازی پروژه جنگو رو به صورت کامل بر روی پلتفرم caprover شرح دادم به طوری که یک پروژه قالب رو آماده سازی کردم و در…
- django 1403/05/15
آخرین دوره ها
آموزش برنامه نویسی Async در پایتون
- 0 30 دانشجو
آموزش ساخت ربات تلگرام با پایتون
- 500000 20 دانشجو
آموزش Arduino
- 0 122 دانشجو