راهکارها
بازارچه ابری
Arvan Docs

مستندات فنی

دسترسی به تمامی مستندات محصولات ابر آروان

Categories
Close
دسته‌بندی‌های سایت مشاهده دسته‌بندی‌ها بستن دسته‌بندی‌ها





مشاهده همه دسته‌ها All Categories

پیاده‌سازی پروژه Django برای Weblate

Time To Read ۴ دقیقه
Date ۴ آذر ۱۴۰۰

نکته: ما در حال تغییر ساختار فایل و پیکربندی بسیاری از استک‌های بیتنامی هستیم. در نتیجه‌ی این تغییرات، مسیر فایل‌هایی که در این آموزش به آن‌ها اشاره شده ممکن است تغییر کند که این موضوع هم بستگی دارد که استک بیتنامی شما از پکیج‌های سیستمی نیتیو لینوکس استفاده می‌کند (رویکرد A) یا نسخه‌ای self-contained است (رویکرد B). برای تشخیص نوع استک‌تان و انتخاب رویکرد متناسب، دستور زیر را اجرا کنید:

test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."

خروجی این دستور نشان می‌دهد که اپلیکیشن شما از کدام رویکرد (A یا B) استفاده می‌کند و به شما کمک می‌کند که در این راهنما مسیر، پیکربندی و دستورات متناسب با آن را انتخاب کنید. برای اطلاعات بیشتر راجع به این تغییرات، به بخش سوالات رایج مراجعه کنید.

توسعه

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

python3 manage.py runserver SERVER-IP:PORT

اکنون باید با وارد کردن آدرس http://SERVER-IP:PORT به پروژه‌تان دسترسی داشته باشید.

SERVER-IP و PORT پارامترهای اختیاری هستند. اگر هیچ‌کدام از این موارد را مشخص نکنید، به صورت پیش‌فرض از 127.0.0.1:8000 استفاده می‌شود. اگر می‌خواهید بعدا از راه دور به سرور دسترسی داشته باشید، باید از آی‌پی آدرس 0.0.0.0 یا آی‌پی آدرس واقعی سرورتان استفاده کنید.

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

محصول نهایی

رویکرد A: اپلیکشین‌هایی که از پکیج‌های سیستمی استفاده می‌کنند

برای توزیع اپلیکیشن‌تان از طریق وب‌سرور آپاچی با ماژول mod_wsgi مراحل زیر را دنبال کنید.

فعال‌سازی پیکربندی WSGI برای اپلیکیشن جنگو

اطمینان حاصل کنید که پروژه‌ی جنگو شامل یک فایل wsgi.py با محتوایی شبیه به محتوای زیر باشد:

import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PROJECT.settings')
application = get_wsgi_application()

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

استک بیتنامی همراه هاست‌های مجازی HTTP و HTTPS از پیش تعریف‌شده‌ای برای اجرای پروژه‌های جنگو با ماژول mod_wsgi عرضه می‌شود. برای فعال‌سازی آن‌ها، مراحل زیر را دنبال کنید:

·         فایل‌ها را برای حذف پسوند .disabled کپی کنید:

sudo cp /opt/bitnami/apache2/conf/vhosts/sample-vhost.conf.disabled /opt/bitnami/apache2/conf/vhosts/sample-vhost.conf
sudo cp /opt/bitnami/apache2/conf/vhosts/sample-https-vhost.conf.disabled /opt/bitnami/apache2/conf/vhosts/sample-https-vhost.conf

نکته: در این مثال فرض شده که نام پروژه‌ی جنگوی شما sample و محل قرارگیری آن  /opt/bitnami/projects/sample باشد. اگر پروژه‌ی جنگوی شما نام دیگری دارد یا در محل دیگری است، آدرس‌های فوق را متناسب با پروژه‌ی خودتان ویرایش کنید.

·         آپاچی را دوباره راه‌اندازی کنید تا تغییرات اعمال شوند:

sudo /opt/bitnami/ctlscript.sh restart apache

پیکربندی پروژه‌ی جنگو به‌ منظور دسترسی عمومی

برای آماده‌سازی پروژه‌ی جنگو به‌گونه‌ای که به‌خوبی در مرورگرتان کار کند، به چند تغییر اضافی نیاز دارید. فایل settings.py پروژه‌ی جنگو را باز و مراحل زیر را دنبال کنید:

  • خط زیر را به ابتدای فایل اضافه کنید:
import os
  • حالت DEBUG را غیرفعال کنید:
DEBUG = False
  • گزینه‌ی ALLOWED_HOSTS را به‌گونه‌ای تنظیم کنید که پروژه‌ی جنگو از راه دور نیز در دسترس باشد:
    • دسترسی عمومی به پروژه‌ی جنگو:
ALLOWED_HOSTS = ['*']
    • دسترسی محدود. برای مثال پاسخگویی فقط به درخواست‌های ارسالی از آی‌پی آدرس 11.22.33.44:
ALLOWED_HOSTS = ['11.22.33.44']
  • STATIC_URL و STATIC_ROOT را به‌گونه‌ای تنظیم کنید که فایل‌های استاتیک را توزیع کنند:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  • فایل‌های استاتیک را بیلد کنید. دستور زیر را اجرا کنید:
python manage.py collectstatic --noinput

ایجاد یک هاست مجازی دلخواه

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

نکته: در مراحل زیر فرض شده که پروژه‌ی جنگوی شما در دایرکتوری /opt/bitnami/projects قرار داشته باشد.

  • فایل /opt/bitnami/apache2/conf/vhosts/myapp-http-vhost.conf را ایجاد و ویرایش کنید و خطوط زیر را به آن اضافه کنید:
<IfDefine !IS_APPNAME_LOADED>
  Define IS_APPNAME_LOADED
  WSGIDaemonProcess APPNAME python-home=/opt/bitnami/python python-path=/opt/bitnami/projects/APPNAME
</IfDefine>
<VirtualHost 127.0.0.1:80 _default_:80>
  ServerAlias *
  WSGIProcessGroup APPNAME
  Alias /robots.txt /opt/bitnami/projects/APPNAME/static/robots.txt
  Alias /favicon.ico /opt/bitnami/projects/APPNAME/static/favicon.ico
  Alias /static/ /opt/bitnami/projects/APPNAME/static/
  <Directory /opt/bitnami/projects/APPNAME/static>
    Require all granted
  </Directory>
  WSGIScriptAlias / /opt/bitnami/projects/APPNAME/APPNAME/wsgi.py
  <Directory /opt/bitnami/projects/APPNAME/APPNAME>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
</VirtualHost>

نکته: APPNAME را با نام واقعی پروژه‌تان جایگزین کنید.

  • فایل /opt/bitnami/apache2/conf/vhosts/myapp-https-vhost.conf را ایجاد و ویرایش کنید و خطوط زیر را به آن اضافه کنید:
<IfDefine !IS_APPNAME_LOADED>
  Define IS_APPNAME_LOADED
  WSGIDaemonProcess APPNAME python-home=/opt/bitnami/python python-path=/opt/bitnami/projects/APPNAME
</IfDefine>
<VirtualHost 127.0.0.1:443 _default_:443>
  ServerAlias *
  SSLEngine on
  SSLCertificateFile "/opt/bitnami/apache2/conf/bitnami/certs/server.crt"
  SSLCertificateKeyFile "/opt/bitnami/apache2/conf/bitnami/certs/server.key"
  WSGIProcessGroup APPNAME
  Alias /robots.txt /opt/bitnami/projects/APPNAME/static/robots.txt
  Alias /favicon.ico /opt/bitnami/projects/APPNAME/static/favicon.ico
  Alias /static/ /opt/bitnami/projects/APPNAME/static/
  <Directory /opt/bitnami/projects/APPNAME/static>
    Require all granted
  </Directory>
  WSGIScriptAlias / /opt/bitnami/projects/APPNAME/APPNAME/wsgi.py
  <Directory /opt/bitnami/projects/APPNAME/APPNAME>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
</VirtualHost>

نکته: APPNAME را با نام واقعی پروژه‌تان جایگزین کنید.

  • سرور آپاچی را دوباره راه‌اندازی کنید:
sudo /opt/bitnami/ctlscript.sh restart apache

رویکرد B: اپلیکیشن‌های Self-contained بیتنامی

برای محصول نهایی توصیه‌ی ما این است که پیش از شروع به توزیع اپلیکیشن‌تان، آپاچی را با ماژول mod_wsgi پیکربندی کنید (که از پیش نصب و به‌صورت پیش‌فرض فعال است).

  • ابتدا فایل اسکریپت اپلیکیشن WSGI را که در مسیر PROJECT/PROJECT/wsgi.py داخل دایرکتوری پروژه‌ی جنگو قرار دارد ویرایش و اصلاح کنید. فراموش نکنید که به جای PROJECT مسیر صحیح و نام پروژه‌ی جنگویتان را بنویسید.

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

کلیت محتوای فایل باید شبیه قطعه کد زیر باشد، هرچند ممکن است جزئیات آن با توجه به پروژه‌ی شما تفاوت‌هایی داشته باشد. پروژه‌تان را با دستور sys.path.append به path هم اضافه کنید.

    import os
    import sys
    sys.path.append('/opt/bitnami/apps/django/django_projects/PROJECT')
    os.environ.setdefault("PYTHON_EGG_CACHE", "/opt/bitnami/apps/django/django_projects/myproject/egg_cache")
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT.settings")
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
  • در دایرکتوری /opt/bitnami/apps/django/django_projects/PROJECT یک پوشه‌ی conf/ ایجاد کنید:
mkdir /opt/bitnami/apps/django/django_projects/PROJECT/conf
  • فایل‌های زیر را ایجاد کنید:
touch /opt/bitnami/apps/django/django_projects/PROJECT/conf/httpd-prefix.conf
touch /opt/bitnami/apps/django/django_projects/PROJECT/conf/httpd-app.conf
  • در لینوکس می‌توانید در حالت daemon، اپلیکیشن را با mod_wsgi اجرا کنید. کد زیر را به فایل /opt/bitnami/apps/django/django_projects/PROJECT/conf/httpd-app.conf اضافه کنید.

<IfDefine !IS_DJANGOSTACK_LOADED>

Define IS_DJANGOSTACK_LOADED

WSGIDaemonProcess wsgi-djangostack   processes=2 threads=15    display-name=%{GROUP}

</IfDefine>

<Directory "/opt/bitnami/apps/django/django_projects/PROJECT/PROJECT">
    Options +MultiViews
    AllowOverride All
    <IfVersion >= 2.3>
        Require all granted
    </IfVersion>

    WSGIProcessGroup wsgi-djangostack

    WSGIApplicationGroup %{GLOBAL}
</Directory>

Alias /PROJECT/static "/opt/bitnami/apps/django/lib/pythonA.B/site-packages/Django-X.Y.Z-pyA.B.egg/django/contrib/admin/static"
WSGIScriptAlias /PROJECT '/opt/bitnami/apps/django/django_projects/PROJECT/PROJECT/wsgi.py'

نکته: A.B نسخه‌ی پایتون (مثلن 3.6) و X.Y.Z نسخه‌ی جنگو است (مثلن 2.0.2).

  • به فایل /opt/bitnami/apps/django/django_projects/PROJECT/conf/httpd-prefix.conf کد زیر را اضافه کنید:
Include "/opt/bitnami/apps/django/django_projects/PROJECT/conf/httpd-app.conf"
  • خط زیر را به فایل /opt/bitnami/apache22/conf/bitnami/bitnami-apps-prefix.conf اضافه کنید:
Include "/opt/bitnami/apps/django/django_projects/PROJECT/conf/httpd-prefix.conf"
  • فایل /opt/bitnami/apps/django/django_projects/PROJECT/PROJECT/settings.py را ویرایش و مقدار متغیر ALLOWED_HOSTS را با آی‌پی آدرس سرورتان به‌ روز کنید. مشابه مثال زیر:
ALLOWED_HOSTS = ['SERVER-IP', 'localhost', '127.0.0.1']
  • سرور آپاچی را دوباره راه‌اندازی کنید:
sudo /opt/bitnami/ctlscript.sh restart apache

اکنون باید با وارد کردن آدرس http://SERVER-IP/PROJECT/APP به پروژه‌تان دسترسی داشته باشید.