Skip to content

Commit

Permalink
add paas/django docs
Browse files Browse the repository at this point in the history
  • Loading branch information
A-Najmabadi committed Jul 9, 2024
1 parent 30754eb commit 30c7084
Show file tree
Hide file tree
Showing 25 changed files with 942 additions and 398 deletions.
73 changes: 30 additions & 43 deletions src/components/Sidebar/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -908,6 +908,10 @@ export default {
title: "انتخاب نسخه NodeJS",
link: "/paas/nodejs/how-tos/choose-version"
},
{
title: "استفاده از ماژول FFMPEG",
link: "/paas/nodejs/how-tos/use-ffmpeg-module"
},
{
hr: true
},
Expand Down Expand Up @@ -1588,21 +1592,17 @@ export default {
title: "استفاده از دیسک",
link: "/paas/django/how-tos/use-disk"
},
// {
// title: "راه‌اندازی برنامه Websocket",
// link: "/paas/django/how-tos/use-websocket"
// },
{
title: "تنظیم Nginx",
link: "/paas/django/how-tos/customize-php-ini"
link: "/paas/django/how-tos/customize-nginx"
},
{
title: "کار با Queueها",
link: "/paas/django/how-tos/use-queues"
title: "فعال‌سازی قابلیت gzip",
link: "/paas/django/how-tos/enable-gzip"
},
{
title: "فعال‌سازی SSR با Inertia",
link: "/paas/django/how-tos/enable-ssr-using-inertia"
title: "استفاده از Supervisord",
link: "/paas/django/how-tos/use-supervisord"
},
{
title: "تنظیم هدرهای امنیتی HTTP",
Expand All @@ -1613,37 +1613,30 @@ export default {
link: "/paas/django/how-tos/use-hooks"
},
{
title: "تغییر نسخه PHP و Laravel",
title: "تغییر نسخه Python",
link: "/paas/django/how-tos/choose-version"
},
{
title: "مدیریت logهای Laravel",
link: "/paas/django/how-tos/manage-django-logs"
title: "تنظیم تعداد workerهای Gunicorn",
link: "/paas/django/how-tos/set-gunicorn-workers"
},
{
title: "پیکربندی TrustedProxies",
link: "/paas/django/how-tos/configure-trustedproxies"
},
{
title: "فعال‌سازی Gzip و Caching",
link: "/paas/django/how-tos/enable-gzip-and-caching"
},
{
title: "استفاده از ماژول FFMPEG",
link: "/paas/django/how-tos/use-ffmpeg-module"
title: "تنظیم max_request در Gunicorn",
link: "/paas/django/how-tos/set-gunicorn-maxrequest"
},
{
title: "استفاده از Ziggy",
link: "/paas/django/how-tos/use-ziggy"
title: "راه‌اندازی برنامه WebSocket",
link: "/paas/django/how-tos/use-websocket"
},
{
title: "نصب یا به‌روزرسانی اکستنشن ",
link: "/paas/django/how-tos/install-new-extension"
title: "راه‌اندازی برنامه ASGI",
link: "/paas/django/how-tos/use-asgi"
},
{
title: "مشاهده اکستنشن‌های نصب شده",
link: "/paas/django/how-tos/see-extension"
title: "استفاده از ماژول FFMPEG",
link: "/paas/django/how-tos/use-ffmpeg-module"
},

{
hr: true
},
Expand Down Expand Up @@ -1695,34 +1688,28 @@ export default {
)
},
{
title: "رفع خطای محدودیت آپلود فایل با حجم بیش از 100MB",
title: "رفع خطای محدودیت آپلود فایل با حجم بیش از 1MB",
link: "/paas/django/fix-common-errors/upload-limit-size"
},
{
title: "رفع خطای CORS",
link: "/paas/django/fix-common-errors/cors"
},
{
title: "رفع خطای 419",
link: "/paas/django/fix-common-errors/419-page-expired"
},
{
hr: true
title: "رفع خطای CORS فایل‌های Media",
link: "/paas/django/fix-common-errors/cors-media"
},
{
title: "Lumen",
icon: <IconContainer alt="django" />,
link: "/paas/django/related-apps/lumen"
title: "رفع خطای WORKER TIMEOUT",
link: "/paas/django/fix-common-errors/worker-timeout"
},
{
title: "Laravel Octane",
icon: <IconContainer alt="django" />,
link: "/paas/django/related-apps/django-octane"
hr: true
},
{
title: "Voyager",
icon: <IconContainer alt="django" />,
link: "/paas/django/related-apps/voyager"
title: "Celery",
icon: <IconContainer alt="celery" />,
link: "/paas/django/related-apps/celery"
},
],
}
Expand Down
55 changes: 55 additions & 0 deletions src/pages/paas/django/fix-common-errors/cors-media.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
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";

<Layout>
# رفع خطای CORS فایل‌های Media در برنامه‌های Django
<hr className="mb-2" />

فایل‌های رسانه (Media) به کاربران در پلتفرم Django با وب‌سرور Nginx ارائه می‌شود؛ حال، اگر کاربران‌تان برای دسترسی به فایل‌های رسانه با خطای CORS مواجه شدند باید تنظیمات Nginx پروژه‌ی خود را شخصی‌سازی کنید.

برای رفع این خطا، یک فایل با نام <Important>liara_nginx.conf</Important> در مسیر اصلی پروژه‌ی خود ایجاد کرده و قطعه‌کد زیر را در آن، قرار دهید:
<div className="h-2" />
<div dir='ltr'>
<Highlight className="python">
{`client_max_body_size 100M;
location /media {
add_header Access-Control-Allow-Origin *;
alias /usr/src/app/media;
}
location /static {
alias /usr/src/app/staticfiles;
}
location / {
try_files /dev/null @django_app;
}
location ~\\.sqlite3$ {
deny all;
error_page 403 =404 /;
}
location ~ /\\.well-known {
allow all;
}`}
</Highlight>
</div>
<div className="h-2" />
سپس، برنامه خود را مجدداً در لیارا مستقر کنید تا تغییرات، اعمال شوند.

با اعمال این پیکربندی، فایل‌های قرار گرفته در پوشه‌ی <Important>media</Important> با هدر <Important>Access-Control-Allow-Origin</Important> و مقدار <Important>*</Important> سرو می‌شوند. همچنین شما می‌توانید مقدار دلخواه خودتان را نیز، تنظیم کنید.


</Layout>
100 changes: 49 additions & 51 deletions src/pages/paas/django/fix-common-errors/cors.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,92 +12,90 @@ import NextPage from "@/components/Common/nextpage";
import {GoArrowLeft,} from "react-icons/go";

<Layout>
# رفع خطای CORS در برنامه‌های Laravel
# رفع خطای CORS در برنامه‌های Django
<hr className="mb-2" />
خطای CORS (Cross-Origin Resource Sharing) یک محدودیت امنیتی در مرورگرها است که جلوی درخواست‌های HTTP از منابع مختلف را می‌گیرد.
این خطا ممکن است زمانی رخ دهد که سعی کنید از یک دامنه یا پورت متفاوت به سروری دیگر درخواست ارسال کنید، و معمولاً با پیام خطایی شبیه به <b>Access-Control-Allow-Origin</b> در مرورگر مواجه خواهید شد. در ادامه، به رفع این خطا در فریم‌ورک‌های مختلف، پرداخته شده است:
این خطا ممکن است زمانی رخ دهد که سعی کنید از یک دامنه یا پورت متفاوت به سروری دیگر درخواست ارسال کنید، و معمولاً با پیام خطایی شبیه به <b>Access-Control-Allow-Origin</b> در مرورگر مواجه خواهید شد. در ادامه، به رفع این خطا، پرداخته شده است:
<div className="h-2" />

برای حل این مشکل می‌توانید از راه حل‌‌های قرار داده شده، استفاده کنید.
برای رفع این خطا، کافیست تا با اجرای دستور زیر، پکیج <Important>django-cors-headers</Important> را در پروژه خود، نصب کنید:
<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`pip install django-cors-headers`}
</Highlight>
</div>
<div className="h-2" />

<Section id="use-laravel-cors-package" title="استفاده از پکیج laravel-cors" />
در ابتدا، کافیست تا با اجرای دستور زیر، این پکیج را در پروژه خود، در لوکال، نصب کنید:
در ادامه، بایستی تا به <Important>INSTALLED_APPS</Important> در فایل <Important>settings.py</Important>، مقدار <Important>corsheaders</Important> را اضافه کنید:

<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`composer require fruitcake/laravel-cors`}
<Highlight className="python">
{`INSTALLED_APPS = [
# other apps
'corsheaders',
# other apps
]
`}
</Highlight>
</div>
<div className="h-2" />

البته اگر که به خطای conflict برخورد کردید؛ کافیست تا پکیج‌های قدیمی مربوطه با ورژن barryvdh یا fruitcake را با اجرای دستور مثال زیر، حذف کرده و مجدداً آن را نصب کنید:
سپس، باید مقدار <Important>CorsMiddleware</Important> را به <Important>MIDDLEWARE</Important> در فایل <Important>settings.py</Important>، اضافه کنید:


<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`composer remove barryvdh/laravel-cors fruitcake/laravel-cors
composer require fruitcake/laravel-cors`}
{`MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
# other middlewares ...
]
`}
</Highlight>
</div>
<div className="h-2" />

در ادامه، بایستی، یک middleware به نام <Important>HandleCors</Important> در ابتدای property به نام <Important>middleware$</Important> در فایل <Important>app/Http/Kernel.php</Important> با محتوای زیر، اضافه کنید:
تمامی کارها انجام شده و می‌توانید برای اجازه دادن به همه دامنه‌ها، در فایل <Important>settings.py</Important> دستور زیر را وارد کنید:

<div className="h-2" />
<div dir='ltr'>
<Highlight className="php">
{`protected $middleware = [
\\Fruitcake\\Cors\\HandleCors::class,
// ...
];`}
<Highlight className="python">
{`CORS_ALLOW_ALL_ORIGINS = True`}
</Highlight>
</div>
<div className="h-2" />

تمامی کارها انجام شده است و کافیست دستور زیر را اجرا کنید تا مقادیر پیش‌فرض مربوط به CORS در مسیر <Important>config/cors.php</Important> برای‌تان قرار بگیرد و پس از آن، می‌توانید این مقادیر را بنا به نیاز خود، تغییر دهید:
یا برای اجازه دادن به دامنه‌های خاص، از قطعه کد زیر استفاده کنید:
<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`php artisan vendor:publish --tag="cors"`}
<Highlight className="python">
{`CORS_ALLOWED_ORIGINS = [
'http://example.com',
'http://anotherdomain.com',
]
`}
</Highlight>
</div>
<div className="h-2" />
<Alert variant='success'>
<p>
همچنین بخوانید: <a href="https://github.com/fruitcake/laravel-cors?tab=readme-ov-file#cors-middleware-for-laravel" className="blue-link">مستندات مربوط به پکیج laravel-cors</a>
</p>
</Alert>

<Section id="use-htaccess" title="تنظیم فایل htaccess." />
کافیست تا وارد فایل <Important>public/.htaccess</Important> شوید و تنظیمات مربوط به CORS را به پروژه خود اضافه کنید:
متدهای مجاز را نیز می‌توانید با اضافه کردن قطعه کد زیر به فایل <Important>settings.py</Important>، در پروژه خود، مشخص کنید:
<div className="h-2" />
<div dir='ltr'>
<Highlight className="config">
{`Header set Access-Control-Allow-Origin "*"
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>`}
<Highlight className="python">
{`CORS_ALLOW_METHODS = [
"DELETE",
"GET",
"OPTIONS",
"PATCH",
"POST",
"PUT",
]`}
</Highlight>
</div>
<div className="h-2" />


در نهایت کافیست تا برای ثبت تغییرات، برنامه خود را مجدداً در لیارا، مستقر کنید.

</Layout>
59 changes: 33 additions & 26 deletions src/pages/paas/django/fix-common-errors/upload-limit-size.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,40 @@ import Link from "next/link";
import NextPage from "@/components/Common/nextpage";

<Layout>
# رفع خطای محدودیت آپلود فایل با حجم بیش از 100MB
# رفع خطای محدودیت آپلود فایل با حجم بیش از 1MB
<hr className="mb-2" />
وب‌سرور Apache ابتدا فایل‌های آپلودی را در دایرکتوری <Important>tmp/</Important> ذخیره می‌کند و سپس لاراول آن فایل را به Storage خودش، منتقل می‌کند.
علی‌رغم <a className="blue-link" href="../../details/file-system">فایل سیستم پیش‌فرض برنامه‌های لاراول در لیارا</a>، که ReadOnly است؛ دایرکتوری <Important>tmp/</Important> قابل نوشتن است، اما محدودی 100 مگابایتی دارد.
در نتیجه شما نمی‌توانید فایل‌هایی با حجم بیش از 100MB را در پروژه خود، آپلود کنید و با خطا، مواجه خواهید شد. برای رفع این مشکل و افزایش حجم داده‌های آپلودی، کافیست تا طبق مراحل زیر، عمل کنید:

<Step steps={[
{
step: "۱",
content: (
<>
<h3>ایجاد دیسک</h3>
<p>طبق مستندات <a href="../../disks/manage/create" className="blue-link">ساخت دیسک</a>، یک دیسک با نام و اندازه دلخواه ایجاد کنید.</p>
</>
)
},
{
step: "۲",
content: (
<>
<h3>تعریف مسیر برای دیسک</h3>
<p>طبق مستندات <a href="../../disks/manage/route" className="blue-link">تعریف مسیر دیسک</a>، دیسک ایجاد شده را به مسیر <Important>tmp/</Important> متصل کنید.</p>
</>
)
},]}/>
<div className="h-4" />
با انجام کارهای فوق، فضای پوشه <Important>tmp/</Important> افزایش خواهد یافت.
از آنجایی که در لیارا، برای اجرای برنامه‌های Django، از <a href="../how-tos/customize-nginx" className="blue-link">وب‌سرور Nginx</a> استفاده می‌شود.
در این وب‌سرور، به‌صورت پیش‌فرض حداکثر حجم مجاز آپلود فایل <Important>1MB</Important> در نظر گرفته شده‌است. شما می‌توانید یک فایل با نام <Important>liara_nginx.conf</Important> در مسیر اصلی پروژه ایجاد کنید و محتویات زیر را داخل آن قرار دهید:

<div className="h-2" />
<div dir='ltr'>
<Highlight className="python">
{`client_max_body_size 250M;
location /media {
alias /usr/src/app/media;
}
location /static {
alias /usr/src/app/staticfiles;
}
location / {
try_files /dev/null @django_app;
}
location ~\\.sqlite3$ {
deny all;
error_page 403 =404 /;
}
location ~ /\\.well-known {
allow all;
}`}
</Highlight>
</div>
<div className="h-2" />
با قرار دادن فایل بالا در ریشه‌ی برنامه‌ی‌تان حداکثر حجم مجاز آپلود فایل به 250MB افزایش می‌یابد. شما می‌توانید مقدار دلخواه خودتان را تنظیم کنید. در انتها، کافیست تا برنامه را مجدداً در لیارا مستقر کنید تا تغییرات، اعمال شوند.


</Layout>
Loading

0 comments on commit 30c7084

Please sign in to comment.