سرور لینوکس

نحوه دپلوی سایت جنگویی


آموزش دپلوی سایت جنگویی

نحوه دیپلوی سایت جنگویی با آپاچی روی سرور cent os
جنگو یک فریمورک پر قدرت برای وب اپلیکیشن ها است که میتونه کمک کنه تا شما سایت ها و اپلیکیشن های پایتونی تحت وب بنویسید.
جنگو شامل یک سرور توسعه ساده برای تست کدهای شما به صورت محلی است.
اما برای پروژه های بزرگتر و حتی کمی پیچیده تر ، وب سرور امن تر و قدرتمندتری مورد نیاز است.
در این مقاله نشان خواهیم داد که چطوری میتونیم یک سایت جنگویی رو در محیط مجازی پایتون (virtual environment) رو بر روی سرور لینوکسی CentOS 7 نصب و پیکره بندی کنیم.
بعد از این ما آپاچی (Apache) رو هم به عنوان وب سرور خودمون راه اندازی خواهیم کرد طوری که بتونه درخواست های سمت کلاینت (client ) رو مستقیما رسیدگی کنه.برای اینکار ها از ماژول mod_wsgi استفاده خواهیم کرد،
که میتونه با مشخصات رابط WSGI با جنگو ارتباط برقرار کنه.

پیش نیازها و اهداف
برای این کار، شما باید یک سرور لینوکسی CentOS 7 با یک کاربر غیر ریشه ( non-root user) با دسترسی به sudo و تنظیم شده داشته باشید.اگر اینکار رو هنوز نکردید میتونید از مقاله راه اندازی سرور با لینوکس استفاده کنید و نحوه تنظیم این مورد رو هم یاد بگیرید.
جنگو رو در محیط مجازی پایتون (virtual environment) نصب خواهیم کرد.
نصب جنگو در محیطی خاص برای پروژه شما به شما این امکان رو میده تا پروژه ها و نیازهای پروژتون رو به طور جداگانه مورد استفاده قرار بدید.
وقتی که اپلیکیشن خودمون رو راه اندازی کردیم آپاچی (Apache) رو برای رابط کاربری برنامه جنگومون تنظیم خواهیم کرد این کار رو با ماژول mod_wsgi انجام خواهیم داد که میتونه درخواست های HTTP رو به برنامه قابل فهم توسط مشخصات WSGI ترجمه کنه.

بریم شروع کنیم…

نصب بسته هایی از CentOS و EPEL Repos
برای شروع روند ، همه موارد مورد نیاز رو از مخازن توزیع لینوکس دانلود و نصب میکنیم.

که شامل وب سرور Apache ، ماژول mod_wsgi استفاده شده برای ارتباط با برنامه Django و pip ،به عنوان مدیر بسته Python که میتونه برای بارگیری ابزارهای مربوط به Python استفاده بشه.
برای دریافت pip ، باید مخزن EPEL را که از بسته های اضافی هستش فعال کنیم. با تایپ کردن به راحتی میتونیم این کار رو انجام بدید:

sudo yum install epel-release

با فعال کردن EPEL ، میتونیم با تایپ کردن، چیزهایی که نیاز داریم رو نصب کنیم:

sudo yum install python-pip httpd mod_wsgi


پیکربندی Python Virtual Environment
حالا که اجزای موجود در مخازن رو در اختیار داریم ، میتونیم کار روی پروژه جنگو رو شروع کنیم

اولین قدم ایجاد یک محیط مجازی پایتون (Python Virtual Environment) هستش تا پروژه Django از ابزار سیستم و بقیه پروژه های پایتون که ممکن هست روی اون کار کنیم جدا باشه.
برای ایجاد این محیط ها باید دستور virtualenv رو نصب کنیم. ما میتونیم این رو با استفاده از pip انجام بدیم:

sudo pip install virtualenv

برای خواندن مقاله راه اندازی سرور با لینوکس روی لینک کلیک کنید

با نصب virtualenv ، میتونیم پروژه رو شروع کنیم. یک directory ایجاد کنید تا مکانی که می خواهید پروژه رو نگه دارید مشخص بشه بعد وارد پوشه بشید:

mkdir ~/myproject
cd ~/myproject

با وارد کردن directory، یک محیط مجازی پایتون ایجاد کنید:

virtualenv myprojectenv


با این کار دایرکتوری به نام myprojectenv در دایرکتوری myproject ایجاد میشه. در داخل ، نسخه محلی Python و نسخه محلی pip با این کار نصب میشه. ما میتونیم از این برای نصب و پیکربندی یک محیط جداگانه Python برای پروژه استفاده کنیم.
قبل از نصب نیازهای پایتون پروژه ، باید محیط مجازی رو فعال کنیم. با تایپ کردن میتونید این کار رو انجام بدید:

source myprojectenv/bin/activate

درخواست شما باید تغییر کنه تا نشون بده که اکنون در یک محیط مجازی پایتون کار می کنید. چیزی شبیه به این:

(myprojectenv)user@host:~/myproject$.

با فعال شدن محیط مجازی ، با تایپ کردن ، جنگو را بادستور pip نصب کنید:

pip install django


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

ایجاد پروژه جدید جنگو
از آنجا که ما در حال حاضر یک دایرکتوری پروژه داریم ، به جنگو خواهیم گفت که فایلها رو اینجا نصب کنه. که یک دایرکتوری سطح دوم با actual code ایجاد میکنه که طبیعی هست و یک اسکریپت مدیریتی را در این دایرکتوری قرار میده

django-admin.py startproject myproject .

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

nano myproject/settings.py
Alias /static /home/user/myproject/static
Require all granted

Require all granted

WSGIDaemonProcess myproject python-path=/home/user/myproject:/home/user/myproject/myprojectenv/lib/python2.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py

بعد از این تغییرات ، پرونده را ذخیره کرده و ببندید.

جمع کردن برخی از مجوزها
بعد ، باید چند مجموعه مجوز رو اصلاح کنیم تا سرویس Apache بتونه به پرونده های ما دسترسی پیدا کنه
به طور پیش فرض ، CentOS دایرکتوری خانه هر کاربر رو بسیار محدود قفل می کنه
برای حل این مشکل کاربر آپاچی رو به گروه کاربرمون اضافه میکنیم.
الان به ما اجازه میده مجوزها را به اندازه کافی باز کنیم تا بتونیم به پرونده های مناسب برسه.
با دستور زیر کاربر apache رو به گروهتون اضافه کنید. نام کاربری شخصیتون رو به جای userجایگزین کنید

sudo usermod -a -G user apache


حالا، می تونیم به گروه کاربریمون مجوزهای مربوط به دایرکتوری اصلیمون رو بدیم تا Apache به محتوای زیر وارد بشه:

chmod 710 /home/user

الان ، Apache اجازه داره تا توی یک فرآیند به محتوای داخل آن دسترسی پیدا کنه.
اگر از پایگاه داده SQLite استفاده می کنید ، که به طور پیش فرض تو این مقاله استفاده شده ، باید اجازه بدید Apache به خود پرونده پایگاه داده دسترسی داشته باشه
برای این کار ، اولین قدم تغییر مجوزها است تا پایگاه داده بتواند عملیات read and write رو انجام بده
نام پایگاه داده به طور پیش فرض db.sqlite3 هست و باید در فهرست پروژه پایه شما قرار بگیره

chmod 664 ~/myproject/db.sqlite3

ما باید به گروهی که Apache تحت آن اجرا میشه ،مالکیت گروه پرونده را بدیم

sudo chown :apache ~/myproject/db.sqlite3

برای نوشتن در پرونده ، همچنین باید گروه Apache رو به فهرست اصلی پایگاه داده اختصاص بدیم:

sudo chown :apache ~/myproject

پس از اتمام این مراحل ، شما آماده شروع سرویس Apache هستید. برای انجام این کار ، تایپ کنید:

sudo systemctl start httpd

حالا باید با مراجعه به نام دامنه یا آدرس IP سرور بدون تعیین درگاه ، بتوانید به سایت Django دسترسی پیدا کنید. سایت معمولی و رابط مدیر باید مطابق انتظار عمل کنه.
اگر همه چیز مطابق انتظار کار میکنه ، میتونید سرویس Apache را فعال کنید تا در هنگام راه اندازی به طور خودکار شروع بشه:

sudo systemctl enable httpd


تو این مقاله از بانک اطلاعاتی (database) پیش فرض SQLite برای سادگی استفاده کردیم ، بنابراین در واقع نیاز به تغییر زیاد نداریم.
پس بیشتر روی پیکربندی دایرکتوری فایلهای استاتیک تمرکز میکنیم جایی که Django فایلهای استاتیک را قرار میده تا وب سرور بتونه به راحتی اینها را سرو کنه.
جنگو از تنظیمات STATIC_ROOT برای تعیین پوشه ای که این پرونده ها باید قرار بگیرن استفاده می کنه.
برای اینکه بگیم از پوشه ای به نام “static” در فهرست اصلی پروژه استفاده بشه ، از کدهای پایتون استفاده میکنیم

نسخه های جدیدتر جنگو از این دستور استفاده کنید:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")


حالا ذخیره کنید و ببندید.

کامل کردن راه اندازی اولیه پروژه
حالا ، میتونیم طرح اولیه پایگاه داده را با استفاده از اسکریپت مدیریت به پایگاه داده SQLite منتقل کنیم:

cd ~/myproject
./manage.py makemigrations
./manage.py migrate

حالا یک superuser ایجاد کنید.

./manage.py createsuperuser


شما باید یک نام کاربری ،یک آدرس ایمیل و یک رمز عبور انتخاب و تأیید کنید.
تمام محتوای استاتیک را در مکان دایرکتوری که پیکربندی کردیم قرار میدیم و بعد:

./manage.py collectstatic


بعد از تایید یک دایرکتوری به نام static در دایرکتوری های پروژه شما قرار میگیره.
حالا ، با راه اندازی سرور Django با این دستور پروژه رو آزمایش کنید:

./manage.py runserver 0.0.0.0:8000


تو مرورگر، با نام دامنه یا آدرس IP سرور و 8000: تست کنید

http://server_domain_or_IP:8000


شما باید صفحه پیش فرض جنگو رو مشاهده کنید:

این تصویر دارای صفت خالی alt است؛ نام پروندهٔ آن image_2021-04-12_11-58-37.png است

میتونید با اطلاعاتی که در قسمت createsuoeruser وارد کردید وارد صفحه ادمین پنل پیش فرض خود جنگو بشید

مثال جنگو

بعد از احراز هویت ، میتونید به رابط مدیر پیش فرض Django دسترسی پیدا کنید:

مثال 2جنگو

حالا تو ترمینال CTRL-C رو بزنید تا سرور خاموش بشه.
در حال حاضر کار ما با جنگو تمام شده ، پس می توانیم با تایپ کردن از محیط مجازی خارج میشیم:

deactivate


پیکربندی Apache
پروژه Django در حال کار هست ، الان می توانیم Apache رو پیکربندی کنیم.
برای پیکربندی گذرگاه WSGI ، باید یک فایل پیکربندی جدید ایجاد کنیم که گذرگاه WSGI را تعریف کنه.
در فهرست /etc/httpd/conf.d فایلی رو با sudo ایجاد و باز کنید.به این پرونده django.conf میگیم.

sudo nano /etc/httpd/conf.d/django.conf

فایلهای static را باید پیکربندی کنیم. ما از یک نام مستعار(Alias) استفاده خواهیم کرد تا Apache هر درخواست شروع شده با / static را تو دایرکتوری “static” موجود در پوشه پروژه قرار بده.
نام مستعار (Alias) را تنظیم می کنیم و سپس با یک دایرکتوری به دایرکتوری مورد نظر دسترسی میدیم.

Alias /static /home/user/myproject/static
Require all granted

در مرحله بعدی ، ما به پرونده wsgi.py در دایرکتوری پروژه سطح دوم که کد Django در آن ذخیره شده، اجازه دسترسی میدیم.
برای این کار ، ما از یک بخش فهرست استفاده خواهیم کرد که داخل اون یک قسمت پرونده است. ما به فایل داخل این ساختار تو در تو دسترسی خواهیم داد:

Alias /static /home/user/myproject/static
Require all granted
Require all granted

پس از پیکربندی ، ما آماده ساختن بخشی از پرونده هستیم که در واقع WSGI pass را کنترل می کند
برای اجرای فرایند WSGI ، که پیکربندی پیشنهادی است ، از حالت daemon استفاده میکنیم برای تنظیم این موضوع میتونیم از دستورالعمل WSGIDaemonProcess استفاده کنیم.
ما از myproject استفاده خواهیم کرد.ما مسیر Python رو تنظیم می کنیم که Apache بتونه تمام اجزای مورد نیاز رو پیدا کنه
از اونجایی که ما از یک محیط مجازی استفاده کردیم ، مجبور به تنظیم دو مولفه components مسیر هستیم
اولین مورد ، فهرست اصلی پروژه ما است که تو اون میشه فایلهای پروژه رو پیدا کرد.
دوم مسیر lib / pythonx.x / site-packages در پوشه محیط مجازی ماست
(که تو اون X ها با مولفه های components شماره نسخه پایتون جایگزین میشن)
به این ترتیب ، Apache میتونه تمام کد های دیگر Python مورد نیاز برای اجرای پروژه ما رو پیدا کنه.
حالا باید گروه فرایند (process group) رو مشخص کنیم که به همان نامی باشه که ما برای WSGIDaemonProcess انتخاب کردیم (myproject در مورد ما)
در اخرهم ، باید اسکریپتی با نام مستعار تنظیم کنیم تا Apache درخواست های دامنه ریشه را به پرونده wsgi.py منتقل کنه.

برای یادگیری دیپلوی سایت جنگو و php در یک سرور با اپاچی و mod_wsgi بر روی لینک کلیک کنید

امیرحسین باقری

امیرحسین باقری هستم عاشق طراحی سایت در زمینه python و همینطور طراح قالب و متخصص فرانت اند؛ از دانشی که تو این مدت بدست آوردم میشه به: html&css , ,bootstrap, C#, flexbox , sass , javascript , Django,celery,Django channels,DRF,Ruby ,Ruby on Railsاشاره کرد.

دیدگاهتان را بنویسید

دکمه بازگشت به بالا