Skip to main content

اپ جنگو

در این مستند نحوه راه‌اندازی یک اپ جنگو با استفاده از دارکوب را به شما آموزش می‌دهیم.

می‌توانید به جای مطالعه مستند ساخت این اپ، از ویدیو تهیه شده نیز استفاده نمایید.

ساخت virtual environment

محیط مجازی یا virtual environment و یا venv محیطی است که به شما این امکان را می‌دهد که کد پایتون خود را در محیطی ایزوله و مستقل اجرا کنید و پکیج‌های مورد نظر خود را در آن نصب کنید.

برای ساخت یک virtual environment ابتدا با استفاده از دستور زیر پکیج virtualenv را نصب می‌کنیم.

sudo apt install python3-virtualenv

سپس با دستور زیر یک venv جدید با نام دلخواه django-app می‌سازیم:

virtualenv django-app

حال با دستور زیر تعیین می‌کنیم که pip پکیج‌ها را در محیط مجازی django-app نصب کند.

source django-app/bin/activate

ساخت پروژه جنگو

با استفاده از دستور زیر پکیج جنگو را در venv خود نصب می‌کنیم:

pip install django

اکنون زمان آن فرا رسیده تا پروژه جنگو خود را بسازیم:

django-admin startproject django_app

در قدم بعد یک اپ با نام app می‌سازیم:

cd django_app
django-admin startapp app

اگر محتویات داخل پوشه django_app را مشاهده کنیم بدین صورت خواهد بود:

django_app
├── app
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── django_app
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

نصب gunicorn

gunicorn پکیجی‌ است که کاری مشابه دستور runserver را برای ما انجام می‌دهد. اما runserver از چند جهت (امنیت، سرعت و ...) برای محیط عملیاتی مناسب نیست. در نتیجه ما از gunicorn که برای محیط عملیاتی مناسب تر‌است استفاده خواهیم کرد.

ابتدا با دستور زیر gunicorn را نصب می‌کنیم.

pip install gunicorn

حال می‌توانیم برای تست، با استفاده از دستور زیر پروژه خود را روی پورت ۸۰۰۰ بالا بیاوریم:

gunicorn --bind 0.0.0.0:8000 django_app.wsgi

برای افزایش throughput سیستم می‌توانید نوع worker را به انواع async تغییر بدهید. مثلا برای استفاده از تکنولوژی gevent کانفیگ زیر را به gunicorn معرفی کنید و کتابخانه‌های مربوط به gevent را نصب کنید:

# for patching postgresql_psycopg2 driver
def post_fork_fn(server, worker):
from psycogreen.gevent import patch_psycopg
patch_psycopg()
worker_class = "gevent"

قبل از اعمال این تغییر در محیط عملیاتی، ابتدا در محیط توسعه/تست عملکرد سیستم جدید و تطابق کتابخانه‌های مورد استفاده را بررسی کنید.

Gevent Introduction

Gunicorn Async Workers

Gunicorn worker_class Config

آماده سازی فایل settings.py

لازم است تغییراتی در فایل settings.py اعمال شود.

تنظیمات دیتابیس

برای استفاده از دیتابیس پستگرس مورد نظرمان لازم است فیلد DATABASES را به شکل زیر تغییر دهیم تا اطلاعات لازم جهت اتصال به دیتابیس را از متغیر‌های محیطی‌ای که در ادامه در دارکوب برای اپ خود تعریف خواهیم کرد دریافت کند.

DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": os.getenv("DB_NAME"),
"USER": os.getenv("DB_USER"),
"PASSWORD": os.getenv("DB_PASSWORD"),
"HOST": os.getenv("DB_HOST"),
"PORT": os.getenv("DB_PORT"),
}
}

همچنین لازم است تا پکیج psycopg2 را نصب کنیم:

pip install psycopg2

تنظیمات ALLOWED_HOSTS

در جنگو لازم است مشخص کنید که اپ شما از طریق چه آدرس‌هایی قابل دسترسی باشد. ما این مقدار را از طریق متغیر‌های محیطی به شکل زیر دریافت خواهیم کرد.

ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS").split(",")

در ادامه مقادیر این متغیر‌های محیطی را در دارکوب تعریف خواهیم کرد.

تنظیمات SECRET_KEY

از آنجایی که SECRET_KEY محرمانه‌است و نباید در دسترس کسی قرار بگیرد، لازم است تا به جای قرار دادن آن در داخل کد، آن را از متغیر‌های محیطی دریافت کنیم. فلذا خط زیر را در فایل settings.py جایگزین می‌کنیم:

SECRET_KEY = os.getenv("SECRET_KEY")

آماده‌سازی فایل requirements.txt

در این مرحله با استفاده از دستور زیر پکیج‌هایی را که تا به حال نصب کرده‌ایم، در فایل requirements.txt وارد می‌کنیم:

pip freeze > requirements.txt

آماده‌سازی داکرفایل

در این مرحله لازم است یک داکرفایل ساده در پروژه خود اضافه کنیم تا دارکوب با استفاده از آن پروژه ما را بیلد و دیپلوی کند.

محتویات داکرفایل ما به صورت زیر خواهد بود:

FROM hub.hamdocker.ir/library/python:3.8
WORKDIR /django_app/
ADD ./requirements.txt ./
RUN pip install -r ./requirements.txt
ADD ./ ./
ENTRYPOINT ["/bin/sh", "-c" , "python manage.py migrate && gunicorn --bind 0.0.0.0:8000 django_app.wsgi"]

در خط اول نام آدرس ایمیج مورد نظر خود را وارد می‌کنیم که همان طور که واضح است از ایمیج آماده‌ی پایتون ۳.۸ استفاده کرده‌ایم.

در خط دوم مشخص می‌کنیم که می‌خواهیم در کدام آدرس دستورات مورد نظرمان اجرا شود.

در خط سوم فایل requirements.txt را در کانتینر و در دایرکتوری /django_app/ کپی می‌کنیم.

در خط چهارم پکیج‌هایی که در فایل requirements.txt مشخص کرده‌ایم را نصب می‌کنیم.

در خط پنجم تمامی محتویات ریپو را در مسیر /django_app/ کانتینر کپی می‌کنیم.

در خط آخر ابتدا مایگریشین‌های دیتابیس را اجرا می‌کنیم و سپس در دستور دوم، با استفاده از gunicorn اپ خود را روی پورت 8000 بالا می‌آوریم.

انتقال به ریپو هم‌گیت

پروژه ما آماده است. دیگر تنها کافی‌است که پروژه خود را در یک ریپو هم‌گیت پوش کنیم و در مرحله‌ آخر نیز اپ خود را در دارکوب بسازیم.

برای این کار ابتدا در اکانت هم‌گیت خود یک پروژه جدید با نام django_app می‌سازیم و سپس با استفاده از دستورات زیر ریپو خود را در همگیت پوش می‌کنیم.

git init
git remote add origin <repo_url>
git add .
git commit -m "Initial commit"
git push origin master

ساخت دیتابیس

از آنجایی که ‌‌می‌خواهیم از دیتابیس پستگرس برای اپ خود استفاده کنیم لازم است تا از طریق دارکوب این دیتابیس را بسازیم.

در قدم اول لازم است تا در دارکوب یک سازمان برای خود بسازید. پس از ثبت نام در کنسول هم‌روش وارد قسمت دارکوب شوید و برای خود یک سازمان بسازید.

سپس روی دکمه ساخت اپ کلیک کنید و با استفاده از راهنمای ساخت دیتابیس پستگرس دیتابیس خود را بسازید.

ساخت اپ در دارکوب

پس از ساخت دیتابیس، برای ساخت اپ خود مجددا روی ساخت اپ کلیک و نوع اپ خود را «منبع گیت» انتخاب می‌کنیم.

سپس آدرس ریپو و برنچ مورد نظر را وارد می‌کنیم. از آنجایی که می‌خواهیم با هر بار پوش کردن در مستر اپ ما به‌روز‌رسانی شود گزینه «دیپلوی خودکار بعد از push کردن» را فعال می‌کنیم.

در قدم بعد یکی از پلن‌ها را انتخاب می‌کنیم.

در مرحله آخر ابتدا برای اپ خود اسمی انتخاب می‌کنیم.

با توجه به دستوری که برای اجرای gunicorn وارد کردیم، اپ ما روی پورت ۸۰۰۰ بالا خواهد آمد، پس در قسمت پورت مقدار ۸۰۰۰ را وارد می‌کنیم.

حال از طریق تب آدرس دامنه آدرسی که می‌خواهیم اپ‌مان روی آن بالا بیاید را وارد می‌کنیم.

به طور مثال ما از آدرس my-django-app.darkube.app استفاده می‌کنیم.

اضافه کردن متغیر‌های محیطی

لازم است تا متغیر‌های محیطی‌ای را که در قسمت‌های قبل تعریف کردیم، مقدار‌دهی کنیم. برای این‌ کار در تب environment variables مقادیر لازم برای اتصال به دیتابیس و مقدار ALLOWED_HOSTS را وارد می‌کنیم:

حال روی دکمه ذخیره تغییرات کلیک می‌کنیم و منتظر ساخته شدن اپ می‌شویم. بیلد شدن و در دسترس قرار گرفتن اپ ممکن است چند ثانیه تا چند دقیقه به طول بیانجامد .

پس از ساخت اپ به آدرس فوق مراجعه می‌کنیم و مشاهده می‌کنیم که اپ در آدرس مورد نظر در دسترس است.

حال با خیال راحت به توسعه اپ خود بپردازید :)


مستندهای کاربران در فضای open source: