پرش به مطلب اصلی

راهنمای شروع سریع

این راهنما شما را گام‌به‌گام برای دیپلوی یک اپلیکیشن Django کامل با دیتابیس PostgreSQL و Celery روی دارکوب راهنمایی می‌کند. در پایان این راهنما، یک اپلیکیشن Django کاملاً عملیاتی و در دسترس از طریق اینترنت خواهید داشت.

پیش‌نیازها

  • یک حساب کاربری فعال در کنسول هم‌روش
  • Python 3.10 یا بالاتر نصب شده روی سیستم محلی
  • آشنایی اولیه با Docker و Django
  • دسترسی به ترمینال برای اجرای دستورات
  • یک ریپازیتوری گیت (هم‌گیت یا گیت‌هاب)

مراحل دیپلوی

در این راهنما، مراحل زیر را به ترتیب انجام می‌دهیم:

آماده‌سازی محلی:

  1. ساخت پروژه Django - ایجاد پروژه Django جدید و آماده‌سازی اولیه
  2. پیکربندی Celery در Django - تنظیم Celery در پروژه
  3. آماده‌سازی برای دیپلوی - ساخت Dockerfile و تنظیمات نهایی

دیپلوی روی دارکوب:

  1. ساخت و راه‌اندازی PostgreSQL - ساخت دیتابیس و اتصال به پروژه Django
  2. ساخت Redis برای Celery - راه‌اندازی Redis به‌عنوان broker
  3. دیپلوی اپلیکیشن Django - آپلود و اجرای اپلیکیشن روی دارکوب
  4. دیپلوی Celery Worker و Beat - دیپلوی تسک‌های پس‌زمینه
  5. تنظیم دامنه - اتصال دامنه به اپلیکیشن

مرحله ۱: ساخت پروژه Django

ابتدا یک پروژه Django جدید ایجاد می‌کنیم. اگر قبلاً پروژه‌ای دارید، می‌توانید از این مرحله عبور کنید.

ساخت Virtual Environment

ابتدا یک virtual environment بسازید و آن را فعال کنید:

برای Linux و macOS:

python -m venv venv
source venv/bin/activate

برای Windows:

python -m venv venv
venv\Scripts\activate

ساخت پروژه جدید

یک پروژه Django جدید بسازید:

django-admin startproject myproject
cd myproject

سپس یک اپلیکیشن Django ایجاد کنید:

python manage.py startapp myapp

ساخت requirements.txt و نصب وابستگی‌ها

فایل requirements.txt را در ریشه پروژه بسازید و تمام وابستگی‌های مورد نیاز را اضافه کنید:

# requirements.txt
Django>=4.2.0
psycopg2-binary>=2.9.0
gunicorn>=21.2.0
celery>=5.3.0
redis>=5.0.0

سپس وابستگی‌ها را نصب کنید:

pip install -r requirements.txt

تست پروژه محلی

برای اطمینان از اینکه پروژه به درستی کار می‌کند:

python manage.py runserver

اگر پیام "Starting development server" را دیدید، پروژه شما به درستی کار می‌کند.

آماده‌سازی ریپازیتوری گیت

پروژه را به یک ریپازیتوری گیت متصل کنید. می‌توانید از یکی از سرویس‌های زیر استفاده کنید:

پس از ساخت ریپازیتوری، پروژه را به آن متصل کنید. ابتدا دستورات مشترک را اجرا کنید:

git init
git add .
git commit -m "Initial Django project"

سپس بر اساس سرویس گیت خود، یکی از دستورات زیر را اجرا کنید:

برای GitHub:

git remote add origin git@github.com:YOUR_USERNAME/YOUR_REPO.git
git push -u origin main

برای هم‌گیت:

git remote add origin git@hamgit.ir:YOUR_USERNAME/YOUR_REPO.git
git push -u origin main

مرحله ۲: پیکربندی Celery در Django

حال که پروژه Django را ساختیم، باید Celery را در آن پیکربندی کنیم تا بعداً بتوانیم از آن استفاده کنیم.

ساخت فایل celery.py

یک فایل celery.py در پوشه پروژه اصلی (همان جایی که settings.py قرار دارد) بسازید:

# myproject/celery.py
import os
from celery import Celery

# تنظیم متغیر محیطی
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

app = Celery('myproject')

# بارگذاری تنظیمات از تنظیمات
app.config_from_object('django.conf:settings', namespace='CELERY')

# جستجوی خودکار تسک‌ها در اپلیکیشن‌ها
app.autodiscover_tasks()

به‌روزرسانی __init__.py

فایل __init__.py در پوشه پروژه اصلی را به‌روزرسانی کنید:

# myproject/__init__.py
from .celery import app as celery_app

__all__ = ('celery_app',)

تنظیم Celery در settings.py

در settings.py تنظیمات Celery را اضافه کنید:

# myproject/settings.py
import os

CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0')
CELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'redis://localhost:6379/0')
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Tehran'

ساخت یک تسک نمونه

در اپلیکیشن خود (مثلاً myapp)، یک فایل tasks.py بسازید:

# myapp/tasks.py
from celery import shared_task

@shared_task
def hello_world():
print("Hello from Celery!")
return "Task completed successfully"

تست Celery محلی

برای تست Celery به صورت محلی، ابتدا Redis را اجرا کنید (یا از Redis دارکوب استفاده کنید) و سپس:

celery -A myproject worker -l info

در ترمینال دیگری:

celery -A myproject beat -l info

مرحله ۳: آماده‌سازی برای دیپلوی

قبل از دیپلوی، باید پروژه Django خود را برای اجرا روی دارکوب آماده کنیم. این شامل ساخت Dockerfile و تنظیمات لازم است.

ساخت Dockerfile

یک فایل Dockerfile در ریشه پروژه Django خود بسازید:

# Dockerfile
FROM python:3.14

WORKDIR /app/
ADD . ./
RUN pip install --upgrade pip
RUN pip install -r ./requirements.txt

ENTRYPOINT ["/bin/sh", "-c" , "python manage.py collectstatic --noinput && python manage.py migrate && gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application"]

این Dockerfile:

  • از Python 3.14 استفاده می‌کند
  • وابستگی‌های پروژه را نصب می‌کند
  • فایل‌های استاتیک را جمع‌آوری می‌کند
  • migration‌های دیتابیس را اجرا می‌کند
  • اپلیکیشن را به کمک Gunicorn روی پورت 8000 اجرا می‌کند

ساخت .dockerignore

یک فایل .dockerignore بسازید تا فایل‌های غیرضروری در Docker image کپی نشوند:

# .dockerignore
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.venv
pip-log.txt
pip-delete-this-directory.txt
.git
.gitignore
.dockerignore
*.md
.env
.idea
.vscode

آپلود پروژه به ریپازیتوری

پس از ساخت Dockerfile و تنظیمات لازم، پروژه را به ریپازیتوری گیت خود آپلود کنید:

git add .
git commit -m "Add Dockerfile and prepare for deployment"
git push origin main

مرحله ۴: ساخت و راه‌اندازی PostgreSQL

یکی از مهم‌ترین اجزای هر پروژه برای نگه‌داری اطلاعات، پایگاه‌داده است. در این راهنما از دیتابیس PostgreSQL استفاده می‌کنیم.

ساخت اپ PostgreSQL

برای استفاده از این سرویس در دارکوب ابتدا به داشبورد رفته و در منوی ساخت اپ، یک اپ PostgreSQL می‌سازیم. ابتدا تنظیمات مورد نیاز را انجام می‌دهیم:

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

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

همانطور که مشاهده می‌کنید، اطلاعات اتصال شامل host، port، username و password در صفحه نمایش داده می‌شود. این اطلاعات را یادداشت کنید چون در مرحله بعد به آن‌ها نیاز داریم.

تنظیم PostgreSQL در Django

حال که اپ دیتابیس ما بالا آمده و آماده است، باید آن را در پروژه Djangoمان نیز تنظیم کنیم. این تنظیمات در فایل settings.py از پروژه قرار دارد.

برای تنظیم‌کردن PostgreSQL در Django باید کد زیر را به settings.py اضافه یا به‌روزرسانی کنیم:

# myproject/settings.py
import os

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DATABASE_NAME', 'mydb'),
'USER': os.environ.get('DATABASE_USER', 'postgres'),
'PASSWORD': os.environ.get('DATABASE_PASSWORD', ''),
'HOST': os.environ.get('DATABASE_HOST', 'localhost'),
'PORT': os.environ.get('DATABASE_PORT', '5432'),
}
}

حال که دیتابیس را در Django تنظیم کردیم، مدل‌هایمان را بر روی پایگاه‌داده migrate می‌کنیم:

python manage.py migrate

الان پروژه ما به PostgreSQLای که ساختیم وصل شده است. در شکل زیر، نمایی از جدول‌هایی که در پایگاه‌داده ما ساخته شده است قابل مشاهده می‌باشد.


مرحله ۵: ساخت Redis برای Celery

برای راه‌اندازی Celery نیاز به یک broker داریم تا پیام‌ها در آن‌جا push شوند و بررسی شوند. ما برای Celery از Redis استفاده می‌کنیم.

ساخت اپ Redis

ابتدا به منوی ساخت اپ رفته و Redis را انتخاب می‌کنیم.

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

درنهایت اپ ما ساخته خواهد شد.

اطلاعات اتصال Redis را یادداشت کنید چون در مرحله بعد برای تنظیم Celery به آن نیاز داریم.


مرحله ۶: دیپلوی اپلیکیشن Django

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

انتخاب ریپازیتوری و برنچ

  1. به صفحه ساخت اپ در دارکوب بروید
  2. نوع اپ را «منبع گیت» انتخاب کنید
  3. ریپازیتوری و برنچ مورد نظر را انتخاب کنید

تنظیمات عمومی

در بخش تنظیمات عمومی:

  • نام اپ: یک نام برای اپ خود انتخاب کنید (مثلاً my-django-app)
  • پورت سرویس: مقدار 8000 را وارد کنید (مطابق با پورتی که در Dockerfile تعریف کردیم)
  • مسیر Dockerfile: اگر Dockerfile در ریشه پروژه نیست، مسیر آن را مشخص کنید

تنظیم متغیرهای محیطی

در بخش متغیرهای محیطی، اطلاعات اتصال به دیتابیس و Redis را اضافه کنید:

  • DATABASE_HOST: آدرس host دیتابیس PostgreSQL
  • DATABASE_PORT: پورت دیتابیس
  • DATABASE_NAME: نام دیتابیس
  • DATABASE_USER: نام کاربری دیتابیس
  • DATABASE_PASSWORD: رمز عبور دیتابیس
  • CELERY_BROKER_URL: آدرس Redis برای Celery (مثلاً redis://redis-host:redis-port/0)
  • CELERY_RESULT_BACKEND: آدرس Redis برای نتایج Celery

انتخاب پلن و کلاستر

در آخرین مرحله:

  1. یک پلن مناسب انتخاب کنید
  2. کلاستر و Namespace مورد نظر را انتخاب کنید
  3. روی دکمه «ذخیره تغییرات» کلیک کنید

پس از کلیک روی «ذخیره تغییرات»، فرآیند ساخت و دیپلوی اپ شما آغاز می‌شود:

تایید دیپلوی

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


مرحله ۷: دیپلوی Celery Worker و Beat

اگر از Celery در پروژه خود استفاده می‌کنید، باید Worker و Beat را نیز به‌صورت جداگانه دیپلوی کنید. می‌توانید از همان Dockerfile استفاده کنید و فقط دستور اجرا را تغییر دهید.

دیپلوی Celery Worker

  1. به صفحه ساخت اپ در دارکوب بروید
  2. نوع اپ را «منبع گیت» انتخاب کنید
  3. همان ریپازیتوری و برنچ را انتخاب کنید
  4. در بخش تنظیمات عمومی:
    • نام اپ: یک نام برای Worker انتخاب کنید (مثلاً my-django-app-celery-worker)
    • مسیر Dockerfile: Dockerfile را وارد کنید
    • دستور اجرا (Entrypoint): celery -A myproject worker -l INFO را وارد کنید
  5. متغیرهای محیطی مربوط به Redis را تنظیم کنید:
    • CELERY_BROKER_URL
    • CELERY_RESULT_BACKEND
  6. پلن و کلاستر را انتخاب کرده و اپ را بسازید

دیپلوی Celery Beat

  1. به صفحه ساخت اپ در دارکوب بروید
  2. نوع اپ را «منبع گیت» انتخاب کنید
  3. همان ریپازیتوری و برنچ را انتخاب کنید
  4. در بخش تنظیمات عمومی:
    • نام اپ: یک نام برای Beat انتخاب کنید (مثلاً my-django-app-celery-beat)
    • مسیر Dockerfile: Dockerfile را وارد کنید
    • دستور اجرا (Entrypoint): celery -A myproject beat -l INFO را وارد کنید
  5. متغیرهای محیطی مربوط به Redis را تنظیم کنید:
    • CELERY_BROKER_URL
    • CELERY_RESULT_BACKEND
  6. پلن و کلاستر را انتخاب کرده و اپ را بسازید

مرحله ۸: تنظیم دامنه

زمانی که شما اپ خود را بر روی دارکوب دیپلوی کردید، می‌توانید آن را به یک دامنه نیز متصل کنید. این امکان هم برای زیردامنه‌های دارکوب با پسوند darkube.app وجود دارد و هم برای دامنه‌های شخصی خودتان.

تنظیم زیردامنه دارکوب

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

در این عکس یک نمونه از زیر دامنه‌های خود دارکوب را مشاهده می‌کنید.

تنظیم پورت

در همان داشبورد به قسمت "پورت" رفته و مطمئن شوید که پورت‌ها به درستی وارد شده‌اند. (بر اساس همان پورت‌هایی که در Dockerfile تعریف کرده‌اید.)

به عنوان مثال در پروژه‌ی ما پورت ۸۰۰۰ بود.

تنظیم دامنه شخصی

اگر می‌خواهید از دامنه‌ی خود استفاده کنید، می‌توانید از همان صفحه‌ی آدرس دامنه، در قسمت دامنه‌ی شخصی از دامنه‌ی خود استفاده کنید.

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

تنظیم DNS برای دامنه شخصی

برای اتصال دامنه شخصی خود به اپلیکیشن، باید یک رکورد CNAME در تنظیمات DNS دامنه خود اضافه کنید:

  1. به پنل مدیریت DNS دامنه خود بروید (این پنل معمولاً توسط ارائه‌دهنده دامنه یا سرویس DNS شما در دسترس است)
  2. یک رکورد DNS جدید اضافه کنید
  3. نوع رکورد را CNAME انتخاب کنید
  4. نام زیردامنه مورد نظر را وارد کنید (مثلاً app برای app.yourdomain.com)
  5. مقدار CNAME را از کنسول دارکوب کپی کنید (این مقدار در قسمت تنظیمات دامنه اپ نمایش داده می‌شود)
  6. تنظیمات را ذخیره کنید

پس از تنظیم رکورد CNAME، ممکن است چند دقیقه تا چند ساعت طول بکشد تا تغییرات DNS اعمال شود. پس از اعمال تغییرات، دامنه شخصی شما به اپلیکیشن متصل خواهد شد.

دامنه‌ی دارکوب:

دامنه‌ی شخصی:


تایید نهایی

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

  1. به آدرس دامنه‌ای که تنظیم کردید بروید
  2. مطمئن شوید که اپلیکیشن به درستی لود می‌شود
  3. بررسی کنید که اتصال به دیتابیس برقرار است
  4. اگر از Celery استفاده می‌کنید، مطمئن شوید که Worker و Beat در حال اجرا هستند

اگر همه چیز به درستی کار می‌کند، تبریک! شما با موفقیت یک اپلیکیشن Django کامل را روی دارکوب دیپلوی کردید! 🎉

این صفحه مفید بود؟

با ثبت بازخوردتان در بهبود کیفیت مستندات مشارکت داشته باشید.