+
+سپس، برنامه خود را مجدداً در لیارا مستقر کنید تا تغییرات، اعمال شوند.
+
+با اعمال این پیکربندی، فایلهای قرار گرفته در پوشهی media با هدر Access-Control-Allow-Origin و مقدار * سرو میشوند. همچنین شما میتوانید مقدار دلخواه خودتان را نیز، تنظیم کنید.
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/fix-common-errors/cors.mdx b/src/pages/paas/django/fix-common-errors/cors.mdx
index fdfad213..65f53ea0 100644
--- a/src/pages/paas/django/fix-common-errors/cors.mdx
+++ b/src/pages/paas/django/fix-common-errors/cors.mdx
@@ -12,92 +12,90 @@ import NextPage from "@/components/Common/nextpage";
import {GoArrowLeft,} from "react-icons/go";
-# رفع خطای CORS در برنامههای Laravel
+# رفع خطای CORS در برنامههای Django
خطای CORS (Cross-Origin Resource Sharing) یک محدودیت امنیتی در مرورگرها است که جلوی درخواستهای HTTP از منابع مختلف را میگیرد.
-این خطا ممکن است زمانی رخ دهد که سعی کنید از یک دامنه یا پورت متفاوت به سروری دیگر درخواست ارسال کنید، و معمولاً با پیام خطایی شبیه به Access-Control-Allow-Origin در مرورگر مواجه خواهید شد. در ادامه، به رفع این خطا در فریمورکهای مختلف، پرداخته شده است:
+این خطا ممکن است زمانی رخ دهد که سعی کنید از یک دامنه یا پورت متفاوت به سروری دیگر درخواست ارسال کنید، و معمولاً با پیام خطایی شبیه به Access-Control-Allow-Origin در مرورگر مواجه خواهید شد. در ادامه، به رفع این خطا، پرداخته شده است:
+
-برای حل این مشکل میتوانید از راه حلهای قرار داده شده، استفاده کنید.
+برای رفع این خطا، کافیست تا با اجرای دستور زیر، پکیج django-cors-headers را در پروژه خود، نصب کنید:
+
+
+
+ {`pip install django-cors-headers`}
+
+
+
-
-در ابتدا، کافیست تا با اجرای دستور زیر، این پکیج را در پروژه خود، در لوکال، نصب کنید:
+در ادامه، بایستی تا به INSTALLED_APPS در فایل settings.py، مقدار corsheaders را اضافه کنید:
-البته اگر که به خطای conflict برخورد کردید؛ کافیست تا پکیجهای قدیمی مربوطه با ورژن barryvdh یا fruitcake را با اجرای دستور مثال زیر، حذف کرده و مجدداً آن را نصب کنید:
+سپس، باید مقدار CorsMiddleware را به MIDDLEWARE در فایل settings.py، اضافه کنید:
+
+
-در ادامه، بایستی، یک middleware به نام HandleCors در ابتدای property به نام middleware$ در فایل app/Http/Kernel.php با محتوای زیر، اضافه کنید:
+تمامی کارها انجام شده و میتوانید برای اجازه دادن به همه دامنهها، در فایل settings.py دستور زیر را وارد کنید:
+
-تمامی کارها انجام شده است و کافیست دستور زیر را اجرا کنید تا مقادیر پیشفرض مربوط به CORS در مسیر config/cors.php برایتان قرار بگیرد و پس از آن، میتوانید این مقادیر را بنا به نیاز خود، تغییر دهید:
+یا برای اجازه دادن به دامنههای خاص، از قطعه کد زیر استفاده کنید:
-
-
-کافیست تا وارد فایل public/.htaccess شوید و تنظیمات مربوط به CORS را به پروژه خود اضافه کنید:
+متدهای مجاز را نیز میتوانید با اضافه کردن قطعه کد زیر به فایل settings.py، در پروژه خود، مشخص کنید:
-
+در نهایت کافیست تا برای ثبت تغییرات، برنامه خود را مجدداً در لیارا، مستقر کنید.
\ No newline at end of file
diff --git a/src/pages/paas/django/fix-common-errors/upload-limit-size.mdx b/src/pages/paas/django/fix-common-errors/upload-limit-size.mdx
index e5163134..841173b2 100644
--- a/src/pages/paas/django/fix-common-errors/upload-limit-size.mdx
+++ b/src/pages/paas/django/fix-common-errors/upload-limit-size.mdx
@@ -11,33 +11,40 @@ import Link from "next/link";
import NextPage from "@/components/Common/nextpage";
-# رفع خطای محدودیت آپلود فایل با حجم بیش از 100MB
+# رفع خطای محدودیت آپلود فایل با حجم بیش از 1MB
-وبسرور Apache ابتدا فایلهای آپلودی را در دایرکتوری tmp/ ذخیره میکند و سپس لاراول آن فایل را به Storage خودش، منتقل میکند.
-علیرغم فایل سیستم پیشفرض برنامههای لاراول در لیارا، که ReadOnly است؛ دایرکتوری tmp/ قابل نوشتن است، اما محدودی 100 مگابایتی دارد.
-در نتیجه شما نمیتوانید فایلهایی با حجم بیش از 100MB را در پروژه خود، آپلود کنید و با خطا، مواجه خواهید شد. برای رفع این مشکل و افزایش حجم دادههای آپلودی، کافیست تا طبق مراحل زیر، عمل کنید:
-
-
-
ایجاد دیسک
-
طبق مستندات ساخت دیسک، یک دیسک با نام و اندازه دلخواه ایجاد کنید.
- >
- )
- },
- {
- step: "۲",
- content: (
- <>
-
تعریف مسیر برای دیسک
-
طبق مستندات تعریف مسیر دیسک، دیسک ایجاد شده را به مسیر tmp/ متصل کنید.
- >
- )
- },]}/>
-
-با انجام کارهای فوق، فضای پوشه tmp/ افزایش خواهد یافت.
+از آنجایی که در لیارا، برای اجرای برنامههای Django، از وبسرور Nginx استفاده میشود.
+در این وبسرور، بهصورت پیشفرض حداکثر حجم مجاز آپلود فایل 1MB در نظر گرفته شدهاست. شما میتوانید یک فایل با نام liara_nginx.conf در مسیر اصلی پروژه ایجاد کنید و محتویات زیر را داخل آن قرار دهید:
+
+
+
+
+با قرار دادن فایل بالا در ریشهی برنامهیتان حداکثر حجم مجاز آپلود فایل به 250MB افزایش مییابد. شما میتوانید مقدار دلخواه خودتان را تنظیم کنید. در انتها، کافیست تا برنامه را مجدداً در لیارا مستقر کنید تا تغییرات، اعمال شوند.
\ No newline at end of file
diff --git a/src/pages/paas/django/fix-common-errors/worker-timeout.mdx b/src/pages/paas/django/fix-common-errors/worker-timeout.mdx
new file mode 100644
index 00000000..e9259db2
--- /dev/null
+++ b/src/pages/paas/django/fix-common-errors/worker-timeout.mdx
@@ -0,0 +1,23 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+import {GoArrowLeft,} from "react-icons/go";
+
+
+# رفع خطای WORKER TIMEOUT در برنامههای Django
+
+
+خطای WORKER TIMEOUT در Gunicorn نشان میدهد که یک یا چند worker پس از گذشتن از زمان مجاز تعیینشده برای پردازش درخواستها، پاسخی ارسال نکردهاند و در نتیجه توسط Gunicorn متوقف و دوباره راهاندازی شدهاند. این مشکل معمولاً زمانی رخ میدهد که پردازش یک درخواست بیش از حد طولانی شود.
+برای رفع این خطا و در صورتی که به WORKER TIMEOUT بیشتر از 30 ثانیه نیاز دارید، میتوانید طبق مستندات تنظیم متغیرهای محیطی، متغیر محیطی GUNICORN_TIMEOUT را با مقدار مورد نظرتان (به ثانیه)، به برنامه، اضافه کنید:
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/getting-started.mdx b/src/pages/paas/django/getting-started.mdx
index 93e975cf..cfbdb8c9 100644
--- a/src/pages/paas/django/getting-started.mdx
+++ b/src/pages/paas/django/getting-started.mdx
@@ -62,11 +62,9 @@ import {
در ادامه، مستندات مربوط به ابزارهای Django برای شما قرار گرفته است:
-
+
{[
- { alt: 'django', platform: 'Lumen', link: "/paas/django/related-apps/lumen" },
- { alt: 'django', platform: 'Django Octane', link: "/paas/django/related-apps/django-octane" },
- { alt: 'django', platform: 'Voyager', link: "/paas/django/related-apps/voyager" },
+ { alt: 'celery', platform: 'Celery', link: "/paas/django/related-apps/celery" },
].map(item =>
diff --git a/src/pages/paas/django/how-tos/choose-version.mdx b/src/pages/paas/django/how-tos/choose-version.mdx
index f7883cdb..5acbcfc1 100644
--- a/src/pages/paas/django/how-tos/choose-version.mdx
+++ b/src/pages/paas/django/how-tos/choose-version.mdx
@@ -11,21 +11,20 @@ import Link from "next/link";
import NextPage from "@/components/Common/nextpage";
-# انتخاب نسخه PHP و لاراول
+# انتخاب نسخه Python
-در حال حاضر در پلتفرم Laravel لیارا، نسخههای زیر از PHP ارائه میشوند:
+در حال حاضر در پلتفرم Django لیارا، نسخههای زیر از Python ارائه میشوند:
- قابلیتهای جدید برای نسخههای بدون آپدیت، ارائه نمیشوند و برای رفع این مشکل، باید ورژن PHP برنامه خود را، ارتقاء دهید.
+ قابلیتهای جدید برای نسخههای بدون بهروزرسانی، ارائه نمیشوند و برای رفع این مشکل، باید ورژن Python برنامه خود را، ارتقاء دهید.
-
-
-توجه داشته باشید که ionCube در PHP نسخه 8.3 پشتیبانی نمیشود.
-
-
-
-همچنین، لیارا از نسخههای لاراول زیر پشتیبانی میکند:
-
-
-
پس از بارگذاری پروژه خود در لیارا، کافیست تا در مرحله انتخاب نسخه، نسخه مورد نظر برنامهتان را انتخاب کنید.
-
+
>,
<>
- برای تغییر نسخه پیشفرض، کافیست تا یک فایل به نام liara.json در مسیر اصلی پروژه، ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید. قطعه کد زیر برای تغییر نسخه PHP به 8.2 میباشد:
+ برای تغییر نسخه پیشفرض، کافیست تا یک فایل به نام liara.json در مسیر اصلی پروژه، ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید. قطعه کد زیر برای تغییر نسخه Python به 3.12 میباشد:
{`{
- "laravel": {
- "phpVersion": "8.2"
+ "django": {
+ "pythonVersion": "3.12"
}
}`}
@@ -104,5 +72,5 @@ import NextPage from "@/components/Common/nextpage";
]}
/>
-
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/customize-nginx.mdx b/src/pages/paas/django/how-tos/customize-nginx.mdx
index 04c01b9e..36718dd1 100644
--- a/src/pages/paas/django/how-tos/customize-nginx.mdx
+++ b/src/pages/paas/django/how-tos/customize-nginx.mdx
@@ -51,46 +51,12 @@ location ~ /\\.well-known {
سپس، کافیست تا برنامه خود را، مجدداً در لیارا مستقر کنید تا تنظیمات مدنظرتان، اعمال بشود.
-
-قابلیت gzip در NGINX برای فشردهسازی محتوا قبل از ارسال آن به مرورگر کاربران استفاده میشود. این کار باعث کاهش حجم دادههای منتقلشده و در نتیجه کاهش زمان بارگذاری صفحات وب میشود، که میتواند به بهبود عملکرد کمک کند.
-برای فعالکردن قابلیت gzip میتوانید قطعه کد زیر را در فایل liara_nginx.conf وارد کنید:
-
-
-
+ امکان تغییر تنظیمات nginx از ابتدا وجود ندارد. شما میتوانید تنها برخی از این تنظیمات را شخصیسازی کنید. در نهایت، فایل تنظیمات شما داخل بلاک server در تنظیمات اصلی، include خواهد شد.
+
+
-
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/enable-gzip.mdx b/src/pages/paas/django/how-tos/enable-gzip.mdx
new file mode 100644
index 00000000..5ee802e4
--- /dev/null
+++ b/src/pages/paas/django/how-tos/enable-gzip.mdx
@@ -0,0 +1,61 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+
+
+# فعالسازی قابلیت gzip در برنامههای Django
+
+
+قابلیت gzip در NGINX برای فشردهسازی محتوا قبل از ارسال آن به مرورگر کاربران استفاده میشود. این کار باعث کاهش حجم دادههای منتقلشده و در نتیجه کاهش زمان بارگذاری صفحات وب میشود، که میتواند به بهبود عملکرد کمک کند.
+
+
+برای فعالکردن قابلیت gzip میتوانید از فایل liara_nginx.conf استفاده کنید. برای این کار کافیست این فایل را در مسیر اصلی پروژه، ایجاد کنید و یا اگر که از قبل اینکار را انجام دادهاید؛ قطعه کد زیر را در آن، قرار دهید:
+
+
+
+
+
+پس از انجام کار فوق، کافیست برای اعمال تغییرات، برنامهتان را مجدداً در لیارا، مستقر کنید.
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/set-gunicorn-maxrequest.mdx b/src/pages/paas/django/how-tos/set-gunicorn-maxrequest.mdx
new file mode 100644
index 00000000..686c92da
--- /dev/null
+++ b/src/pages/paas/django/how-tos/set-gunicorn-maxrequest.mdx
@@ -0,0 +1,30 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+
+
+# تنظیم max_request در Gunicorn در برنامههای Django
+
+
+در Gunicorn، پارامتر max_requests تعداد درخواستهایی را که هر Worker باید قبل از retirement (خاتمه کار) پردازش کند، مشخص میکند. پس از رسیدن یک Worker به این اندازه، به طور خودکار retired میشود و یک Worker جدید جایگزین آن میشود.
+
+یکی از راههای جلوگیری از نشت حافظه و مصرف بالای RAM در Gunicorn، تنظیم پارامتر max_requests است. با تنظیم این پارامتر، با رسیدن تعداد درخواستهای هر یک از Threadهای Gunicorn به این عدد، آن Thread ریاستارت شده و حافظهی RAM آن خالی میشود.
+در صورتی که در برنامهی Django خود نیاز به ریاستارت WORKER THREAD بعد از تعداد مشخصی Request دارید، میتوانید طبق مستندات تنظیم متغیرهای محیطی، متغیر محیطی GUNICORN_MAX_REQUESTS را با مقدار 1000 به برنامه Django خود، اضافه کنید.
+
+
+
+
+مقدار پیشفرض این متغیر در برنامههای Django، برابر با 10000 است.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/set-gunicorn-workers.mdx b/src/pages/paas/django/how-tos/set-gunicorn-workers.mdx
new file mode 100644
index 00000000..d8cd4e71
--- /dev/null
+++ b/src/pages/paas/django/how-tos/set-gunicorn-workers.mdx
@@ -0,0 +1,31 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+
+
+# تنظیم تعداد workerهای Gunicorn در برنامههای Django
+
+
+در Gunicorn، یک worker فرآیندی است که مسئول پردازش درخواستها و پاسخها در یک برنامه وب است. worker میتواند به صورت مستقل از بقیه فرآیندها عمل کند و بار کاری بین آنها، به سادگی، تقسیم میشود. این کار باعث افزایش کارایی و مقیاسپذیری برنامه میشود.
+
+برای تنظیم تعداد Workerهای Gunicorn کافیست تا طبق مستندات تنظیم متغیرهای محیطی، یک متغیر محیطی به نام GUNICORN_WORKERS
+با مقدار دلخواه که همان تعداد Workerها است، به برنامه اضافه کنید.
+
+
+
+
+
+مقدار پیشفرض این متغیر در برنامههای Django، برابر با 3 است.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/set-http-security-headers.mdx b/src/pages/paas/django/how-tos/set-http-security-headers.mdx
index 8c935c61..c26a60a5 100644
--- a/src/pages/paas/django/how-tos/set-http-security-headers.mdx
+++ b/src/pages/paas/django/how-tos/set-http-security-headers.mdx
@@ -21,36 +21,37 @@ import NextPage from "@/components/Common/nextpage";
Content Security Policy (CSP) و Strict-Transport-Security (HSTS)
میکنند.
-شما میتوانید هدرهای امنیتی را مانند قطعه کد مثال زیر، در فایل public/.htaccess تنظیم کرده و نحوهی برقراری ارتباط با سایت را، برای مرورگرها، تعیین کنید:
+شما میتوانید هدرهای امنیتی را مانند قطعه کد مثال زیر، در فایل liara_nginx.conf تنظیم کرده و نحوهی برقراری ارتباط با سایت را، برای مرورگرها، تعیین کنید:
diff --git a/src/pages/paas/django/how-tos/use-asgi.mdx b/src/pages/paas/django/how-tos/use-asgi.mdx
new file mode 100644
index 00000000..6fc7a99c
--- /dev/null
+++ b/src/pages/paas/django/how-tos/use-asgi.mdx
@@ -0,0 +1,38 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+
+
+# راهاندازی برنامه ASGI در برنامههای Django
+
+
+ASGI یا Asynchronous Server Gateway Interface در Django یک استاندارد برای ساخت و مدیریت برنامههای وب ناهمگام است که از ویژگیهای همزمان و ناهمزمان پشتیبانی میکند. ASGI، جایگزین WSGI شده و امکان استفاده از قابلیتهای وبسوکت، پروتکلهای HTTP2 و سایر عملیاتهای ناهمزمان را فراهم میکند.
+
+برای استقرار برنامههای ASGI در پلتفرم Django لیارا تنها باید WSGI_APPLICATION را از فایل settings.py برنامه حذف کنید و مسیر فایل پیکربندی برنامهی ASGI خود را در متغیر ASGI_APPLICATION مقداردهی کنید. به عنوان مثال، اگر نام پروژهتان myapp است، باید قطعه کد زیر را از فایل settings.py پاک کنید:
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/use-ffmpeg-module.mdx b/src/pages/paas/django/how-tos/use-ffmpeg-module.mdx
index d942ceb9..c755d2d0 100644
--- a/src/pages/paas/django/how-tos/use-ffmpeg-module.mdx
+++ b/src/pages/paas/django/how-tos/use-ffmpeg-module.mdx
@@ -11,33 +11,69 @@ import Link from "next/link";
import NextPage from "@/components/Common/nextpage";
-# استفاده از ماژول FFMPEG در Laravel
+# استفاده از ماژول FFMPEG در Django
FFMPEG یک نرمافزار متنباز برای پردازش چندرسانهای است که قابلیت ضبط، تبدیل، پخش ویدیوی زنده و پخش استریمی (streaming) را دارد. این ابزار بسیار قدرتمند است و برای انواع مختلفی از فرمتهای صوتی و تصویری، قابلیتها و توابع متنوعی ارائه میدهد.
-ماژول FFMPEG بهصورت پیشفرض در برنامههای Laravel نصب است و همچنین متغیرهای محیطی FFMPEG_PATH و FFPROBE_PATH در این پلتفرم تنظیم شدهاند. شما برای استفاده از این ماژول تنها کافیست پکیج php-ffmpeg را با اجرای دستور زیر نصب کنید:
-
+ماژول FFMPEG بهصورت پیشفرض در برنامههای Django نصب است و همچنین متغیرهای محیطی FFMPEG_PATH و FFPROBE_PATH در این پلتفرم تنظیم شدهاند.
+برای استفاده از FFmpeg در برنامههای Django، میتوانید از کتابخانههای پایتون برای تعامل با FFmpeg استفاده کنید. یکی از محبوبترین کتابخانهها برای این کار، ffmpeg-python است که میتوانید با اجرای دستور زیر، آن را نصب کنید:
-در نهایت، میتوانید همانند قطعه کد زیر، از این پکیج در برنامه خود، بهره ببرید:
+
+تمامی کارها انجام شده است و شما میتوانید از FFMPEG استفاده کنید؛ به عنوان مثال:
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/use-hooks.mdx b/src/pages/paas/django/how-tos/use-hooks.mdx
index c95e2696..5e6b9f3e 100644
--- a/src/pages/paas/django/how-tos/use-hooks.mdx
+++ b/src/pages/paas/django/how-tos/use-hooks.mdx
@@ -13,7 +13,7 @@ import Table from "@/components/Common/table";
-# استفاده از Hooks در برنامههای Laravel
+# استفاده از Hooks در برنامههای Django
Hookها در برنامهنویسی به دستوراتی گفته میشود که به شما اجازه میدهند تا عملکرد یک برنامه را در یک نقطه خاص از فرایند اجرا یا استقرار آن، تغییر یا بهبود دهید؛ بدون اینکه نیاز به تغییر کد اصلی داشته باشید.
@@ -29,13 +29,13 @@ Hookها در برنامهنویسی به دستوراتی گفته میش
]} data={[
[
"liara_pre_build.sh",
- "npm run build قبل از اجرای دستور",
+ "قبل از بیلد فایلهای قسمت فرانت برنامه",
"ندارد",
"نصب پکیجهای سیستمی لازم با apt-get",
],
[
"liara_post_build.sh",
- "npm run build بعد از اجرای دستور",
+ "بعد از بیلد فایلهای قسمت فرانت برنامه ",
"ندارد",
"اجرای دستورات مرتبط با cache و بهینهسازی",
],
@@ -50,22 +50,22 @@ Hookها در برنامهنویسی به دستوراتی گفته میش
به عنوان مثال، میتوانید در فایل liara_pre_start.sh دستورات مربوط به migrations را بنویسید تا نیازی نباشد که پس از استقرار برنامه، آن را به صورت دستی در خط فرمان برنامه خود، اجرا کنید:
- {`echo "Running pre-start script for Laravel..."
+ {`echo "Running pre-start script..."
# run migrations
-php artisan migrate --force
+python manage.py migrate
# other needed commands
# ...
-echo "Pre-start script for Laravel finished."`}
+echo "Pre-start script finished."`}
diff --git a/src/pages/paas/django/how-tos/use-supervisord.mdx b/src/pages/paas/django/how-tos/use-supervisord.mdx
new file mode 100644
index 00000000..51461c94
--- /dev/null
+++ b/src/pages/paas/django/how-tos/use-supervisord.mdx
@@ -0,0 +1,44 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+
+
+# استفاده از Supervisord در برنامههای Django
+
+
+supervisord یک ابزار مدیریتی است که برای اجرا و کنترل فرآیندهای پسزمینه (background processes) طراحی شده است. این ابزار میتواند برای مدیریت سرویسهای مختلف در یک محیط واقعی، مورد استفاده قرار گیرد.
+
+شما میتوانید در مسیر اصلی پروژه، یک فایل به نام supervisor.conf ایجاد کنید و درون این فایل، Workerهای خود را برای اجرای background jobها، تعریف کنید. به عنوان مثال، برای ایجاد یک Worker در یک برنامه celery، میتوانید از قطعه کد زیر استفاده کنید:
+
+
+
+
+{`[program:celery-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=celery -A proj worker -l INFO
+autostart=true
+autorestart=true
+stopasgroup=true
+killasgroup=true
+numprocs=1
+startsecs=10
+stopwaitsecs=600
+redirect_stderr=true
+stdout_logfile=/tmp/worker.log`}
+
+
+
+
+پس از انجام کار فوق، کافیست برای اعمال تغییرات، برنامهتان را مجدداً در لیارا، مستقر کنید. پس از استقرار،
+Supervisor اجرا شده و دستور شما را در Background اجرا خواهد کرد.
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/how-tos/use-websocket.mdx b/src/pages/paas/django/how-tos/use-websocket.mdx
index 47083988..4cddc85e 100644
--- a/src/pages/paas/django/how-tos/use-websocket.mdx
+++ b/src/pages/paas/django/how-tos/use-websocket.mdx
@@ -15,187 +15,469 @@ import NextPage from "@/components/Common/nextpage";
وبسوکت (WebSocket) یک فناوری ارتباطی در وب است که به سرور و مرورگر اجازه میدهد از طریق یک اتصال دوطرفه دائمی، دادهها را به صورت تعاملی ارسال و دریافت کنند. در واقع مرورگر میتواند دادهها را بفرستد و دریافت کند بدون اینکه نیازی به بارگیری دوباره صفحه وب (refresh) باشد. این ویژگی به برنامههای تعاملی مانند چتهای زنده و بازیهای آنلاین کمک میکند.
-در ادامه، به نحوه ایجاد برنامه WebSocket در فریمورک NextJS با استفاده از پکیج Socket.IO و همچنین نحوه استقرار آن در لیارا، پرداخته شده است.
+در ادامه، به نحوه ایجاد برنامه WebSocket در فریمورک Django با استفاده از ماژول channels و همچنین نحوه استقرار آن در لیارا، پرداخته شده است.
-
-پروژه در پیشرو، یک چتروم تحت وب در فریمورک NextJS است که کاربران میتوانند در آن به صورت Realtime (با تکیه بر WebSocket) به گفتگو بپردازند.
-در ابتدا، بایستی پکیجهای مورد نیاز برنامه را با اجرای دستور زیر با استفاده از npm، نصب کنید:
+
+پروژه در پیشرو، یک چتروم تحت وب در فریمورک Django است که کاربران میتوانند در آن به صورت Realtime (با تکیه بر WebSocket) به گفتگو بپردازند.
+در ابتدا، بایستی در محیط مجازی، با اجرای دستور زیر، یک پروژه جدید Django را، ایجاد کنید:
-در ادامه، بایستی در مسیر اصلی پروژه، یک فایل به نام server.js ایجاد کنید و محتوای زیر را درون آن قرار دهید. این فایل برای
-مدیریت برنامه NextJS و سرور Socket.IO به کار میرود:
+پس از اجرای دستور فوق، کافیست تا دستور زیر را اجرا کنید تا ماژولهای channels و daphne برایتان نصب شود:
-سپس، در مسیر اصلی پروژه، یک دایرکتوری به نام components ایجاد کنید و درون آن، یک فایل به نام Chat.js بسازید و قطعه کد زیر را، درون آن، قرار دهید:
+حال، بایستی با استفاده از دستور زیر، یک application جدید به نام chat در پروژه ایجاد کنید:
+
-{`import { useEffect, useState } from 'react';
-import io from 'socket.io-client';
+{`python manage.py startapp chat`}
+
+
+
+
+پس از اجرای دستورات فوق، کافیست تا برنامه chat و ماژولهای channels و daphne را به INSTALLED_APPS در فایل settings.py به شکل زیر، اضافه کنید:
-const socket = io();
+
+
-تمامی کارها انجام شده است و شما میتوانید با اجرای دستور node server.js برنامه خود را اجرا کرده و از آن استفاده کنید.
-
+
+
+در نظر داشته باشید که قطعه کد فوق، مناسب محیط توسعه است و برای استفاده در محیط Production، بهتر است از Redis Channels استفاده کنید. در ادامه، نحوه استفاده از Redis Channels در برنامههای جنگو، آموزش داده شده است.
+
+
+
+
+در نهایت، قطعه کد زیر را به انتهای فایل settings.py اضافه کنید:
-از آنجایی که برنامه WebSocket فوق (یا به صورت کلی، اکثر برنامههای مبتنی بر Websocket) به یک سرور برای مدیریت Socket نیاز دارند؛ بنابراین
-برای استقرار این برنامه در لیارا، بهتر است که از پلتفرم NodeJS استفاده شود.
-برای این کار کافیست تا طبق مستندات ساخت برنامه NodeJS یک برنامه NodeJS ایجاد کنید و اسکریپت start درون فایل package.json خود را به شکل زیر، تغییر دهید:
-در نهایت، کافیست تا با اجرای دستور زیر، برنامه خود را در لیارا، مستقر کنید:
+تمام کارها انجام شده است و اکنون میتوانید با استفاده از دستور زیر؛ کاربران مدنظر خود را ایجاد کنید تا در چتروم، با یکدیگر تعامل داشته باشند:
+
+
+
+در انتها، با استفاده از دستور زیر، میتوانید برنامه را اجرا و استفاده کنید:
+
+
+
+
+ {`python manage.py runserver`}
+
+
+
+
+
+
+ {``}
+
+
+
+
+
+
+برای استقرار برنامههای وبسوکت جنگو در لیارا، نیازی به انجام تغییر خاصی نیست. صرفاً باید به جای استفاده از آدرس ws، عبارت wss را به کار ببرید تا اتصال، ایمن و سازگار باشد. همچنین، در فایل settings.py باید قطعه کد زیر را حذف کنید:
+
+
+مقدار متغیرهای فوق وابسته به نام پروژه، متغیر هستند و این مقدار در اینجا، یک مثال برای پروژهای به نام ChatApp میباشد.
+
+
+
+
+از آنجایی که استفاده از InMemoryChannelLayer در حالت Production، احتمال نشت دادهها را بسیار افزایش میدهد؛ پس بهتر است به جای آن، از Redis Channels استفاده کنید. برای این کار نیز، کافیست تا در ابتدا ماژول channels-redis در پروژه خود، نصب کنید:
+
+
+
+
+ {`pip install channels-redis`}
+
+
+
+
+پس از نصب ماژول فوق، کافیست تا قطعه کد زیر را از فایل settings.py حذف کنید:
+
+
+
+باید طبق مستندات تنظیم متغیرهای محیطی، یک متغیر محیطی به نام REDIS_URI با مقدار URI دیتابیس Redis خود به برنامه Djangoتان، اضافه کنید.
+
+
+
+در انتها، میتوانید برنامه خود را بدون هیچ مشکل خاصی، در لیارا مستقر کنید.
+
+
-سورس کامل یک برنامه NextJS WebSocket آماده استقرار در اینجا موجود است که میتوانید از آن استفاده کنید.
+سورس کامل یک برنامه Django WebSocket آماده استقرار در اینجا موجود است که میتوانید از آن استفاده کنید.
-
+
\ No newline at end of file
diff --git a/src/pages/paas/django/related-apps/celery.mdx b/src/pages/paas/django/related-apps/celery.mdx
new file mode 100644
index 00000000..40c87742
--- /dev/null
+++ b/src/pages/paas/django/related-apps/celery.mdx
@@ -0,0 +1,19 @@
+import Layout from "@/components/Layout";
+import Button from "@/components/Common/button";
+import Section from "@/components/Common/section";
+import Alert from "@/components/Common/alert";
+import Tabs from "@/components/Common/tab";
+import Step from "@/components/Common/step";
+import Card from "@/components/Common/card";
+import Important from "@/components/Common/important";
+import Highlight from "react-highlight";
+import Link from "next/link";
+import NextPage from "@/components/Common/nextpage";
+
+
+# استقرار برنامههای Django وابسته به Celery در لیارا
+
+Celery یک کتابخانه مدیریت صف و پردازشهای ناهمزمان در پایتون است که به شما امکان میدهد تا وظایف (tasks) سنگین و زمانبر را به صورت پسزمینه و مستقل از اجرای اصلی برنامه، انجام دهید. این ابزار برای اجرای وظایف به صورت توزیعشده و با قابلیت زمانبندی طراحی شده است و معمولاً با Django برای مدیریت وظایف پسزمینه مثل ارسال ایمیل، پردازش دادهها و سایر عملیات طولانی ترکیب میشود.
+
+
+
\ No newline at end of file
diff --git a/src/pages/paas/django/related-links.mdx b/src/pages/paas/django/related-links.mdx
index 3ae91e86..d8139c12 100644
--- a/src/pages/paas/django/related-links.mdx
+++ b/src/pages/paas/django/related-links.mdx
@@ -12,15 +12,15 @@ import NextPage from "@/components/Common/nextpage";
import {GoArrowLeft,} from "react-icons/go";
-# لینکهای مرتبط با پلتفرم Laravel
+# لینکهای مرتبط با پلتفرم Django
-در ادامه، لینکهای تمامی مستندات مربوط به پلتفرم Laravel برای شما قرار گرفته است تا بتوانید بیش از پیش، برنامهتان را بهینهتر و سریعتر توسعه دهید:
+در ادامه، لینکهای تمامی مستندات مربوط به پلتفرم Django برای شما قرار گرفته است تا بتوانید بیش از پیش، برنامهتان را بهینهتر و سریعتر توسعه دهید:
{[
- { platform: 'مستندات راهاندازی سرور ایمیل لیارا در برنامههای Laravel', link: "/" },
- { platform: 'مستندات اتصال برنامههای Laravel به سرویس ذخیرهسازی ابری لیارا', link: "/" },
- { platform: 'مستندات اتصال دامنه خریداری شده به برنامه Laravel با سیستم مدیریت DNS لیارا', link: "/" },
+ { platform: 'مستندات راهاندازی سرور ایمیل لیارا در برنامههای Django', link: "/" },
+ { platform: 'مستندات اتصال برنامههای Django به سرویس ذخیرهسازی ابری لیارا', link: "/" },
+ { platform: 'مستندات اتصال دامنه خریداری شده به برنامه Django با سیستم مدیریت DNS لیارا', link: "/" },
{ platform: '', link: "/" },
].map(item =>
diff --git a/src/pages/paas/laravel/how-tos/choose-version.mdx b/src/pages/paas/laravel/how-tos/choose-version.mdx
index 56b4f709..609203a5 100644
--- a/src/pages/paas/laravel/how-tos/choose-version.mdx
+++ b/src/pages/paas/laravel/how-tos/choose-version.mdx
@@ -19,8 +19,8 @@ import NextPage from "@/components/Common/nextpage";
- قابلیتهای جدید برای نسخههای بدون آپدیت، ارائه نمیشوند و برای رفع این مشکل، باید ورژن PHP برنامه خود را، ارتقاء دهید.
+ قابلیتهای جدید برای نسخههای بدون بهروزرسانی، ارائه نمیشوند و برای رفع این مشکل، باید ورژن PHP برنامه خود را، ارتقاء دهید.
- قابلیتهای جدید برای نسخههای بدون آپدیت، ارائه نمیشوند و برای رفع این مشکل، باید ورژن PHP برنامه خود را، ارتقاء دهید.
+ قابلیتهای جدید برای نسخههای بدون بهروزرسانی، ارائه نمیشوند و برای رفع این مشکل، باید ورژن PHP برنامه خود را، ارتقاء دهید.