آموزش پایتون

هاست کردن برنامه های پایتون (از جمله جنگو) در Apache بوسیله ماژول mod_wsgi

پیش نیاز: پیدا کردن فولدر apache در اوبونتو

آپاچی به صورت پیشفرض در توزیع اوبونتو نصب شده. منتها ممکنه پیدا کردن محل قرارگیری فایلهاش کمی گیج کننده به نظر برسه. برای همین این مراحل رو اینجا یادآوری می کنم:‌

  • برنامه files یا همون فایل منیجر پیشفرض اوبونتو رو اجرا کنید.
  • از منوی جانبی، روی گزینه Other Locations + کلیک کنید.
  • روی Computer دبل کلیک کنید تا وارد پوشه اصلی اوبونتو بشید.
  • فولدر etc رو باز کنید و داخلش فولدر apache2 رو پیدا کنید.
  • تمام!

نصب لایبراری های مورد نیاز

ابتدا تمام لایبراری های مورد نیاز رو با دستورات زیر نصب میکنیم.

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

sudo apt-get update
sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3

تعیین مسیر فولدر static در فایل settings.py

دستور زیر رو در فایل settings.py برنامه جنگو بنویسید که فولدر استاتیک رو به برناه معرفی کنه. از این فولدر برای تجمیع فایلهای استاتیک css , js برنامه استفاده میشه. در نظر داشته باشید مرسوم هست که برای فایلهای صوتی و تصویری و فایلهایی که کاربران آپلود خواهند کرد از فولدر media استفاده میشه و اون فولدر ارتباطی به فولدر static نداره.

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

تجمیع و بروزرسانی فایلهای استاتیک پروژه

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

در غیر اینصورت اون فایلها اجرا نخواهند شد.

برای دفعه اول اجرا اپلیکیشن هم باید این کار رو انجام بدین.

python3 manage.py collectstatic

ایجاد یک هاست مجازی Virtual host در آپاچی

برای تعریف یک سایت جدید در آپاچی،‌باید یک هاست مجازی برای آن تعریف کنیم.

برای این کار باید یک فایل conf. جدید در مسیر /etc/apache2/sites-available/  ایجاد کنیم. (در صورتی که permission این کار را نداریم!)

برای فایل conf. خودمون یک اسم (معمولا همنام با آدرس یا نام سایت) در نظر میگیریم.

برای ایجاد فایل از تکست ادیتور خط فرمان (nano) استفاده می کنیم.

داخل دایرکتوری sites-available خط فرمان را باز کرده و با استفاده از دستور زیر فایل جدید با نام دلخواه ایجاد می کنیم.

sudo nano /etc/apache2/sites-available/djangoproject.conf

در این حالت، نانو فایل شما را ایجاد کرده و محیط ادیتور را برای شما باز می کند تا بتوانید فایل را ویرایش کنید.

شما باید فایل کانفیگ با فرمت زیر را آماده کرده و آن را داخل نانو paste نمایید. یا آن را داخل خود نانو ویرایش کنید.

نکات مهم:

  • در جلوی ServerAdmin باید نام ادمین سرور را بنویسید. که این نام را به صورت دلخواه می توانید وارد کنید و خیلی چیز مهمی نیست.
  • در جلوی ServerName نام سرور یا همان نام سایت خودتان را می نویسید.
  • در جلوی ServerAlias آدرس دامنه مورد نظر سایت خودتان را می نویسید.
  • در قسمت DocumentRoot آدرس فیزیکی فولدر مادر پروژه (فولدری که venv و فولدر پروژه داخل آن قرار دارند) را می نویسید. دقت کنید که در این مثال ما بعد از home اسم user را نوشته ایم که شما حتما باید نام کاربری خودتان در اوبونتو را بجای آن بنویسید.
  • نام کاربری خودتان در اوبونتو را با اجرای دستور whoami در ترمینال می توانید ببینید.
  • در قسمت Alias /static آدرس فولدر static اصلی پروژه را وارد نمایید.
  • در دومین قسمت Alias /static آدرس فولدر media پروژه رو وارد نمایید.
  • در قسمت بعدی باید آدرس فولدر حاوی wsgi.py که در اپ اصلی پروژه قرار دارد رو وارد کنید.
  • در قسمت WSGIDaemonProcess یک نام دلخواه (مثلا django-project) وارد می کنیم.
  • در جلوی آن، در قسمت python-path آدرس فولدر اصلی پروژه که فایل manage.py داخل آن قرار دارد را وارد می کنیم.
  • مجدداً در جلوی آن آدرس فولدر venv پروژه را وارد می کنیم( خود venv را هم باید بنویسیم).
  • در قسمت WSGIProcessGroup همان نام اختصاص داده شده به WSGIDaemonProcess را وارد می کنیم.
  • در قسمت WSGIScriptAlias باید آدرس فایل wsgi.py که در اپ اصلی پروژه قرار دارد رو وارد کنید.
<VirtualHost *:80>
	ServerAdmin admin@djangoproject.localhost
	ServerName musicator.localhost
	ServerAlias www.musicator.localhost
	DocumentRoot /home/hamed/MyCodes/Python/Django/music-app
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	Alias /static /home/hamed/MyCodes/Python/Django/music-app/music-project/static
	<Directory /home/hamed/MyCodes/Python/Django/music-app/music-project/static>
		Require all granted
	</Directory>

	Alias /static /home/hamed/MyCodes/Python/Django/music-app/music-project/media
	<Directory /home/hamed/MyCodes/Python/Django/music-app/music-project/media>
		Require all granted
	</Directory>

	<Directory /home/hamed/MyCodes/Python/Django/music-app/music-project/music>
		<Files wsgi.py>
			Require all granted
		</Files>
	</Directory>

	WSGIDaemonProcess django_project python-path=/home/hamed/MyCodes/Python/Django/music-app/music-project/ python-home=/home/hamed/MyCodes/Python/Django/music-app/venv
	WSGIProcessGroup django_project
	WSGIScriptAlias / /home/hamed/MyCodes/Python/Django/music-app/music-project/music/wsgi.py
</VirtualHost>

و در آخر با استفاده از کلید های ترکیبی Ctrl+x دستور خروج از nano را می دهیم.

در این مرحله نانو از ما می پرسد که آیا مایل به ذخیره کردن فایل هستیم یا خیر. و ما با وارد کردن کاراکتر y باعث ذخیره کردن فایل توسط نانو خواهیم شد.

فعال کردن هاست مجازی که در مرحله قبل ساختیم

برای این کار ترمینال را در آدرس /etc/apache2/sites-available باز می کنیم.

cd /etc/apache2/sites-available

و با استفاده از دستور زیر (شما نام فایل کانفیگ خودتان را باید در انتهای دستور بنویسید) هاست مجازی ایجاد شده را به لیست سایتهای فعال منتقل می کنیم.

sudo a2ensite djangoproject.conf

دستور فوق خروجی شبیه خروجی زیر را نمایش خواهد داد:

Enabling site djangoproject.
To activate the new configuration, you need to run:
service apache2 reload

اضافه کردن آدرس سایت در فایل hosts در صورت استفاده به صورت لوکال

اگر سایت و هاست شما به DNS متصل نیست و میخواهید بتوانید آن را با آدرس لوکال مشاهده کنید، میبایست آن را در لیست سایتهای فایل hosts سیستم عامل ثبت کنید.

برای این کار، فایل hosts را با استفاده از ویرایشگر نانو ویرایش می کنیم:

sudo nano /etc/hosts

و در آن آی پی لوکال هاست و پورت و آدرس سایت رو وارد می کنیم. (مثل همون کاری که توی فایل هاست ویندوز برای اپلیکیشن های لوکال asp.net انجام می دادیم)

برطرف کردن مشکل دسترسی آپاچی

در صورتی که پیغامی مبنی بر اینکه آپاچی permission های لازم را ندارد، دریافت کردید، با استفاده از دستور زیر، دسترسی کامل به آپاچی بدهید:

sudo ufw allow 'Apache Full'

بررسی صحت کانفیگ های Apache

با استفاده از دستور زیر می توانید چک کنید که آیا در فایلها و کانفیگ های آپاچی شما syntax error یا سایر خطاهای دستوری وجود دارد یا خیر :

sudo apache2ctl configtest 

در صورتی که خطاهای دستوری در فایلهای Apache شما وجود نداشته باشد، پیغام زیر را دریافت خواهید کرد:

– Syntax OK

اضافه کردن آدرس سایت در فایل settings.py پروژه جنگو

یک پروژه جنگو فقط در آدرس هاست هایی که در آ» تعریف شده است اجرا خواهد شد و در غیر اینصورت ارور می دهد.

فایل settings.py پروژه جنگو رو باز کنید و در قسمت زیر، نام سایت خودتون رو اضافه کنید.

دقت کنید که می تونید چندیدن نام سایت رو با استفاده ار کاما از هم جدا کنید.

ALLOWED_HOSTS = ['djangoproject.localhost']

غیرفعال کردن سایت پیشفرض آپاچی

برای اینکه سایت شمابا آدرس localhost یا آی پی سرور نیز به نمایش در بیاید، باید سایت پیشفرض آپاچی را غیر فعال کنید.

برای این کار دستور زیر را در ترمینال وارد کنید:

a2dissite 000-default.conf

ریستارت کردن سرور آپاچی برای اعمال تغییرات

هر تغییراتی در فایلهای conf و تنظیمات پروژه جنگو و یا فایلهای استاتیک پروژه جنگو ایجاد کنید (مثل عملیات collect static) نیازمند راه اندازی مجدد سرور برای مشاهده تغییرات می باشد.

پس دقت داشته باشید بعد از هر تغییری، حتما سرور آپاچی خودتون رو با استفاده از دستور زیر ریستارت کنید.

 sudo service apache2 restart

منبع این مطلب

منبع:‌

ویدئوی آموزشی این مبحث

حامد عسکریان

برنامه نویس و عاشق تکنولوژی

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

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