آموزش نصب جنگو Django با پوستگرس PostgreSQL و انجین ایکس Nginx و گونیکورن Gunicorn در Ubuntu 16.04

How To Set Up  Django with Postgres, Nginx, and Gunicorn on Ubuntu 16.04

 

معرفی 

جنگو  Django یک چهارچوب وب یا همان Web Framework است که برای کمک به توسعه برنامه های کاربردی پایتون و سمت کاربر وب سایت ها است. جنگو  Django دارای یک توسعه سرور ساده برای تست کدها به صورت محلی است اما هر چیزی حتی اگر کمی به تولید مرتبط باشد به یک سرور امن و قدرتمند نیاز دارد. در این آموزش به نصب و تنظیم برخی اجزای سرور Ubuntu 16.04 برای پشتیبانی از سرویس دهی برنامه جنگو  Django می پردازیم. 

در این آموزش به توضیح و شرح کامل نصب جنگو Django با پایگاه داده پوستگرس PostgreSQL می پردازیم.

در این آموزش به جای استفاده از پایگاه داده پیش فرض MySQL ، از پایگاه داده PostgreSQL استفاده می کنیم و همچنین برنامه سمت سرور Gunicorn را برای ارتباط با برنامه کاربردی مان نصب می کنیم.  سپس در ادامه پروکسی معکوس انجین ایکس یا همان Nginx Reverse Proxy را برای افزایش کارایی و امنیت دسترسی برای خدمات دهی به برنامه ها ، تنظیم می کنیم. 

دانلود فایل PDF این آموزش

پیش نیاز ها و اهداف 

برای انجام مراحل این آموزش پیشنهاد می کنیم که یک سرور Ubuntu 16.04 با دسترسی کاربر non-root و با سطح دسترسی sudo را نصب و پیکربندی کنید. 

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

از آنجایی که ما پایگاه داده و محیط مجازی خودمان را داریم می توانیم برنامه سمت سرور Gunicorn را نصب و پیکربندی کنیم. این برنامه با ترجمه درخواست HTTP کاربران به دستورات و فراخوانی های پایتون یک رابط کاربری را برای ارتباط با برنامه مان فراهم می کند. سپس Nginx را در مقابل Gunicorn تنظیم خواهیم کرد تا از مکانیزم های مدیریت ارتباط با کارایی بالا و ویژگی های امنیتی آن استفاده کرده و به راحتی آن ها را پیاده سازی کنیم. 

 

نصب بسته ها از منابع اوبونتو 

برای شروع کار هر چیزی که نیاز داریم را از منابع اوبونتو نصب می کنیم. برای نصب اجزای اضافی Python که کمی جلوتر آنها را نصب می کنیم از مدیریت بسته های Python ( pip ) استفاده می کنیم.

در ابتدا باید مخازن apt را به روز رسانی کنیم سپس بسته ها را نصب کنیم. بسته هایی که نصب می کنید به نسخه Python ای که می خواهید نصب کنید بستگی دارد. 

اگر از Python 2 استفاده می کنید ، دستور زیر را وارد کنید : 

sudo apt-get update

sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib nginx

اگر هم از جنگو  Django با Python 3 استفاده می کنید ، دستور زیر را وارد کنید : 

sudo apt-get update

sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx

در اینجا pip نصب می شود ، فایل های توسعه Python در ادامه به Gunicorn نیاز پیدا می کنند و سیستم پایگاه داده Postgres و کتابخانها باید با Python و وب سرور Nginx ارتباط برقرار کنند. 

 

ایجاد دیتابیس PostgreSQL و کاربر متصل

در ادامه باید یک بانک اطلاعاتی و یک کاربر برای برنامه جنگو  Django ایجاد کنیم. 

به صورت پیش فرض ، Postgres از یک سیستم احراز هویت به نام "peer authentication" برای ارتباطات محلی Local استفاده می کند. و این به این معنی است که اگر نام کاربری در سیستم عامل با یک نام کاربر معتبر در Postgres همخوانی داشته باشد بدون هیچ روند اضافه احراز هویت می تواند وارد سیستم پایگاه داده شود. 

در زمان نصب Postgres ، یک کاربر با نام postgres که همنام با نام کاربر مدیر PostgreSQL است در سیستم عامل ایجاد می شود و برای انجام وظایف مدیریت می توانیم با این کاربر وارد پایگاه داده شویم. برای ورود از Sudo و ارسال نام کاربر یا گزینه -u استفاده می کنیم. 

با دستور زیر می توانیم به پایگاه داده وارد شویم : 

sudo -u postgres -p

 در ادامه خواهید دید که خطر فرما Postgres را خواهید داشت که با آن می توانید موارد مورد نیاز را تنظیم کنید : 

ابتدا یک بانک اطلاعاتی برای پروژه مان ایجاد می کنیم : 

postgres=# CREATE DATABASE myproject;

نکته : در انتهای هر دستور در Postgres باید سمیکالن ; قرار دهید. 

سپس یک کاربر بانک اطلاعاتی برای پروژه مان ایجاد می کنیم. دقت کنید که رمز مناسبی را انتخاب کنید. 

postgres=# CREATE USER myprojectuser WITH PASSWORD 'password';

در ادامه بعضی مقادیر ارتباطی را برای کاربری که ایجاد کردیم ، باید تغییر دهیم که باعث بهبود سرعت اتصال و عملکرد پایگاه داده می شود که در هر اتصال مقادیر را سئوال نکند. 

مقدار encoding پیش فرض را روی UTF-8 قرار می دهیم که مطابق با جنگو  Django است ، همچنین قالب کپسوله سازی ارتباطات ( Transaction Isolation Scheme ) را "read commited" قرار می دهیم تا بلوک های خوانده نشده در ارتباطات را بخواند ، و در آخر منطقه زمانی را تنظیم می کنیم. در پروژه جنگو  Django به صورت پیش فرض از مقدار UTC استفاده می کنیم. 

postgres=# ALTER ROLE myprojectuser SET client_encoding TO 'utf8';

postgres=# ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';

postgres=# ALTER ROLE myprojectuser SET timezone TO 'UTC';

الان باید دسترسی بانک اطلاعاتی را به کاربری که ایجاد کرده ایم اضافه کنیم : 

postgres=# GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

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

postgres=#/q

ایجاد محیط مجازی پایتون

در ادامه بعد از نصب بانک اطلاعاتی ، پیش نیاز های Python را نصب می کنیم و این کار را برای مدیریت بهتر آن در یک محیط مجازی انجام می دهیم. برای این کار باید به دستور virtualenv دسترسی داشته باشیم و آن را از طریق pip نصب می کنیم.

اگر از Python 2 استفاده می کنیم ابتدا pip را به روز رسانی کرده و سپس بسته را نصب می کنیم : 

sudo -H pip install --upgrade pip

sudo -H pip install virtualenv

اگر از Python 3 استفاده می کنید از دستور زیر استفاده کنید : 

sudo -H pip3 install --upgrade pip

sudo -H pip3 install virtualenv
 

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

mkdir ~/myproject

cd ~/myproject
 

در داخل دایرکتوری مربوط به پروژه ، دستور زیر را برای ایجاد یک محیط مجازی Python ایجاد کنید : 

virtualenv myprojectenv
 

با اجرای این دستور در داخل دایرکتوری پروژه ، یک نسخه از Python و یک نسخه از pip به صورت محلی ایجاد خواهد شد ، که از آن برای نصب و پیکربندی یک محیط ایزوله Python برای پروژه مان استفاده می کنیم. 

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

source myprojectenv/bin/activate
 

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

(myprojectenv)user@host:~/myproject$
 

با این محیط مجازی فعال ، برنامه های جنگو Django و Gunicorn و یک رابط PostgreSQL با نام psycopg2 را بوسیله نمونه pip ای به صورت محلی ایجاد کردیم ، نصب می کنیم.

نکته : بدون در نظر گرفتن نسخه پایتون ای که با آن کار می کنید ، در محیط مجازی فعال شده باید از دستور pip استفاده کنید. ( از pip3 استفاده نکنید)

(myprojectenv) $ pip install django gunicorn psycopg2

اکنون همه موارد مورد نیاز برای شروع پروژه جنگو Django را داریم.

 

ساخت و تنظیمات پروژه جدید جنگو  Django 

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

ایجاد پروژه جنگو  django 

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

(myprojectenv) $ django-admin.py startproject myproject ~/myproject

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

  • ~/myproject/manage.py : اسکریپت مدیریت پروژه جنگو  Django 
  • ~/myproject/myproject/ : بسته پروژه جنگو  Django که باید شامل فایل های __init__.py, settings.py, urls.py, and wsgi.py باشد
  • ~/myproject/myprojectenv/ : دایرکتوری مربوط به محیط مجازی که به تازگی آن را ایجاد کردیم. 

تنظیمات پروژه 

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

(myprojectenv) $ nano ~/myproject/myproject/settings.py
 

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

~/myproject/myproject/settings.py

. . .

# The simplest case: just add the domain name(s) and IP addresses of your django server

# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']

# To respond to 'example.com' and any subdomains, start the domain with a dot

# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']

ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . .]

در ادامه به انتهای فایل رفته و خطوطی را برای تعیین مسیر فایل های static اضافه می کنیم. این تنظیمات برای مدیریت درخواست توسط Nginx لازم است. این خطوط به جنگو  Django می گوید که دایرکتوری با نام static در مسیر دایرکتوری پروژه قرار دارد : 

~/myproject/myproject/settings.py
. . . STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

در انتها فایل را ذخیره کرده و خارج شوید. 

تکمیل راه اندازی اولیه پروژه

اکنون باید با استفاده از اسکریپت مدیریت ، طرح اولیه بانک اطلاعاتی را به بانک اطلاعاتی PostgreSQL که از آن استفاده می کنیم منتقل کنیم : 

<p style="text-align: justify;">(myprojectenv) $ ~/myproject/manage.py makemigrations<p style="text-align: justify;">(myprojectenv) $ ~/myproject/manage.py migrate</p style="text-align: justify;"></p style="text-align: justify;">

یک کاربر مدیر برای پروژه ایجاد کنید : 

(myprojectenv) $ ~/myproject/manage.py createsuperuser

در ادامه باید یک نام کاربری ، ایمیل و رمز عبور انتخاب کنید. 

همه محتواهای statis را محل دایرکتوری تنظیم شده ، جمع آوری می کنیم 

(myprojectenv) $ ~/myproject/manage.py collectstatic

در ادامه باید این عمل را تایید کنید. فایل های static در یک دایرکتوری به نام static در محل دایرکتوری پروژه قرار می گیرند. 

همچنین فراموش نکنید که در مراحل پیکربندی سرور فایروال را نیز باید تنظیم کنید. برای تست توسعه سرور ، اجازه دسترسی به پورت مربوطه را می دهیم : 

(myprojectenv) $ sudo ufw allow 8000

در انتها برای تست پروژه با دستور زیر ، توسعه سرور جنگو  Django را آغاز می کنیم : 

(myprojectenv) $ ~/myproject/manage.py runserver 0.0.0.0:8000

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

http://server_domain_or_IP:8000

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

django_index

اگر در انتهای آدرس /admin را وارد کنید ، صفحه ورود به محیط مدیریت را مشاهده می کنید که با نام کاربری و رمز عبوری که قبلا با دستور createsuperuser ایجاد کردید می توانید وارد شوید : 

admin_login

بعد از احراز هویت ، به رابط کاربری مدیریت جنگو  Django دسترسی خواهید داشت : 

admin_interface

بعد از اتمام کار در وب ، دکمه Ctrl+C را در ترمینال خط فرمان برای خاموش شدن سرور توسعه بزنید. 

 

بررسی سرویس دهی Gunicorn 

آخرین چیزی که قبل از خروج از محیط مجازی باید انجام دهیم ، تست و بررسی صحت عملکرد سرویس دهی Gunicorn است. برای این کار مسیر دایرکتوری پروژه را به دستور gunicorn برای بارگزاری ماژول WSGI وارد می کنیم : 

<p style="text-align: justify;">(myprojectenv) $ cd ~/myproject<p style="text-align: justify;">(myprojectenv) $ gunicorn --bind 0.0.0.0:8000 myproject.wsgi</p style="text-align: justify;"></p style="text-align: justify;">

این دستور ، Gunicorn را در همان رابطی که سرور توسعه جنگو  Django اجرا شده است ، اجرا می کند. این تست را می توانید مجددا اجرا کنید. 

نکته : رابط کاربری ادمین هیچ ظاهری ندارد و از آنجایی که Gunicorn چیزی در مورد محتوای CSS نمی داند مسئولیتی برای آن ندارد. 

ما Gunicorn را همراه با یک آدرس دایرکتوری مشخص به فایل ماژول wsgi.py که نقطه ورود به برنامه است را به شکل دستوری ماژول پایتون ارسال کردیم. در داخل این فایل ، یک تابع با نام application که برای ارتباط با برنامه استفاده می شود ، فراخوانی می شود. 

پس از اتمام تست ، در خط فرمان ترمینال کلید های Ctrl+C را برای توقف Gunicorn بزنید. 

در اینجا تنظیمات پروژه جنگو Django به پایان رسید و با دستور زیر می توانیم از محیط مجازی خارج شویم : 

(myprojectenv) $ deactivate

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

 

ایجاد سرویس Gunicorn 

برنامه Gunicorn را برای ارتباط با برنامه جنگو  Django تست کردیم ، و اکنون باید برای راه اندازی و متوقف کردن برنامه Gunivorn به صورت یک سرویس اقدام کنیم. با دسترسی sudo یک فایل systemd برای Gunicorn ایجاد و در حالت ویرایش باز کنید : 

sudo nano /etc/systemd/system/gunicorn.service

با قسمت [Unit] برای مشخص کردن پیش نیاز ها و متادیتا ها شروع می کنیم. توضیحاتی را برای سرویس مان در اینجا قرار می دهیم و به سیستم میگوییم که به محض دسترسی به شبکه این سرویس را راه اندازی کند : 

<p style="text-align: justify;">/etc/systemd/system/gunicorn.service<p style="text-align: justify;">[Unit]<p style="text-align: justify;">Description=gunicorn daemon<p style="text-align: justify;">After=network.target</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

در ادامه قسمت [Service] را برای مشخص کردن کاربر و گروهی که پردازش مربوطه باید تحت آن انجام شود را مشخص می کنیم. کاربری را باید مشخص می کنیم که مالکیت فایل های مربوطه را برای اجرا داشته باشد و در اینجا گروه www-data مشخص می کنیم که Nginx بتواند به راحتی با Gunicorn ارتباط برقرار کند. 

سپس مسیر کامل برای اجرای دستور Gunicorn را در مسیر دایرکتوری محیط مجازی مان تعیین می کنیم. سپس یک سوکت Unix را به آن متصل می کنیم که در اینجا ما از Nginx استفاده می کنیم. این روش مطمئن تر و سریعتر از استفاده از پورت شبکه  است. همچنین از ترفند های Gunicorn نیز می توانید استفاده کنید ، برای مثال در اینجا از 3 فرایند برای پردازش استفاده کردیم : 

<p style="text-align: justify;">/etc/systemd/system/gunicorn.service<p style="text-align: justify;">[Unit]<p style="text-align: justify;">Description=gunicorn daemon<p style="text-align: justify;">After=network.target<p style="text-align: justify;">[Service]<p style="text-align: justify;">User=sammy<p style="text-align: justify;">Group=www-data<p style="text-align: justify;">WorkingDirectory=/home/sammy/myproject<p style="text-align: justify;">ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/sammy/myproject/myproject.sock myproject.wsgi:application</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

در انتها قسمت [Install] را تنظیم می کنیم. در این قسمت به سیستم اعلام می کنیم که هنگام روشن شدن سیستم برنامه را به صورت خودکار در حالت چندین کاربره راه اندازی کند : 

<p style="text-align: justify;">[Unit]<p style="text-align: justify;">Description=gunicorn daemon<p style="text-align: justify;">After=network.target<p style="text-align: justify;">[Service]<p style="text-align: justify;">User=sammy<p style="text-align: justify;">Group=www-data<p style="text-align: justify;">WorkingDirectory=/home/sammy/myproject<p style="text-align: justify;">ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/sammy/myproject/myproject.sock myproject.wsgi:application<p style="text-align: justify;">[Install]<p style="text-align: justify;">WantedBy=multi-user.target</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

پس از اتمام تنظیم فایل آن را ذخیره کرده و از ویرایشگر خارج شوید. 

اکنون می توانیم سرویس Gunicorn به عنوان سرویس برای راه اندازی خودکار هنگام روشن شدن سیستم فعال کنیم : 

<p style="text-align: justify;">sudo systemctl start gunicorn<p style="text-align: justify;">sudo systemctl enable gunicorn</p style="text-align: justify;"></p style="text-align: justify;">

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

بررسی فایل سوکت Gunicorn 

وضعیت فرآیند پردازی را برای اینکه توانایی اجرا را دارد یا خیر بررسی می کنیم : 

sudo systemctl status gunicorn

در ادامه وجود فایلی با نام myproject.sock را دایرکتوری پروژه بررسی می کنیم : 

<p style="text-align: justify;">ls /home/sammy/myproject<p style="text-align: justify;">Output<p style="text-align: justify;">manage.py  myproject myprojectenv  myproject.sock static</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

اگر دستور systemctl status با خطا مواجه شد یا فایل myproject.sock  را پیدا نکردید ، این یعنی این که Gunicorn به درستی اجرا نخواهد شد. گزارش های Gunicorn را بررسی می کنیم : 

sudo journalctl -u gunicorn

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

مالک فایل های پروژه به جای اینجا کاربر sudo باشد ، کاربر root است

مسیر WorkingDirectory داخل /etc/systemd/system/gunicorn.service ، مسیر دایرکتوری مربوط به پروژه نیست

تنظمیاتی که برای پردازش gunicorn در دستور ExectStart داده شده درست نیست. موارد زیر را بررسی کنید : 

  • مسیر داده شده به Gunicorn باید به مکان واقعی که فایل باینری در محیط مجازی قرار دارد اشاره کند. 
  • دستور --bind باید یک فایل در دایرکتوری Gunicorn ایجاد کند و برای این کار باید سطح دسترسی لازم به آن دایرکتوری را داشته باشد
  • myproject.wsgi:application یک مسیر دقیق و کامل  برای فراخوانی WSGI است. یعنی اینکه اگر شما در مسیر WorkingDirectory باشید باید بتوانید به چیزی به نام application با گشتن در ماژول myproject.wsgi دسترسی داشته باشید. 

اگر فایل /etc/systemd/system/gunicorn.service را ویرایش کردید ، برای بازخوانی و اعمال تغییرات انجام شده با وارد کردن دستورات زیر سرویس Gunicorn را مجددا راه اندازی کنید : 

<p style="text-align: justify;">sudo systemctl daemon-reload<p style="text-align: justify;">sudo systemctl restart gunicorn</p style="text-align: justify;"></p style="text-align: justify;">

قبل از رفتن به مرحله بعد مطمئن شوید تمام مشکلات را بررسی و رفع کرده اید. 

 

پیکربندی Nginx برای ارسال Proxy به Gunicorn 

بعد از اتمام تنظیمات Gunicorn باید تنظمیات Nginx را برای ارسال ترافیک انجام دهیم. با ایجاد یک فایل پیکربندی سرور در دایرکتوری sites-available مربوطه به Nginx شروع می کنیم : 

sudo nano /etc/nginx/sites-available/myproject

یک بلاک برای سرور ایجاد می کنیم و در ابتدا شماره پورت را 80 و نام سرور را آدرس IP یا نام دامنه سرور قرار می دهیم. 

<p style="text-align: justify;">/etc/nginx/sites-available/myproject<p style="text-align: justify;">server {<p style="text-align: justify;">    listen 80;<p style="text-align: justify;">    server_name server_domain_or_IP;<p style="text-align: justify;">}</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

سپس به Nginx می گوییم که از همه مشکلات پیداکردن favicon ها صرف نظر کند. همچنین می گوییم که مسیر اطلاعات ما در کجا قرار دارد. همه اطلاعات ما در یک URI استاندارد با پسوند /static/ قرار دارد : 

<p style="text-align: justify;">/etc/nginx/sites-available/myproject<p style="text-align: justify;">server {<p style="text-align: justify;">    listen 80;<p style="text-align: justify;">    server_name server_domain_or_IP;<p style="text-align: justify;">    location = /favicon.ico { access_log off; log_not_found off; }<p style="text-align: justify;">    location /static/ {<p style="text-align: justify;">        root /home/sammy/myproject;<p style="text-align: justify;">    <p style="text-align: justify;">}</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

در انتها بلاک location / {} را برای بقیه درخواست ها ایجاد می کنیم. در این قسمت فایل استاندارد proxy_params را که هنگام نصب Nginx ایجاد می شود را معرفی می کنیم و سپس ترافیک را به سوکت Gunicorn که قبلا ایجاد کردیم ارسال می کنیم : 

<p style="text-align: justify;">/etc/nginx/sites-available/myproject<p style="text-align: justify;">server {<p style="text-align: justify;">    listen 80;<p style="text-align: justify;">    server_name server_domain_or_IP;<p style="text-align: justify;">    location = /favicon.ico { access_log off; log_not_found off; }<p style="text-align: justify;">    location /static/ {<p style="text-align: justify;">        root /home/sammy/myproject;<p style="text-align: justify;">    <p style="text-align: justify;">    location / {<p style="text-align: justify;">        include proxy_params;<p style="text-align: justify;">        proxy_pass http://unix:/home/sammy/myproject/myproject.sock;<p style="text-align: justify;">    <p style="text-align: justify;">}</p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;"></p style="text-align: justify;">

پس از اتمام کار ، فایل را ذخیره کرده و خارج شوید. اکنون این فایل را برا ایجاد لینک به دایرکتوری sites-enabled فعال می کنیم : 

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

با دستور زیر بررسی می کنیم که پیکربندی Nginx اشتباه نوشتاری نداشته باشد : 

sudo nginx -t

اگر خطایی گزارش نشد ، سرویس Nginx را مجددا راه اندازی کرده و ادامه دهید : 

sudo systemctl restart nginx

در انتهای این فسمت از تنظیمات نیز پورت 80 را در فایروال باز می کنیم. به پورت 8000 هم بیشتر از این نیازی نداریم ، پس آن را می بندیم : 

<p style="text-align: justify;">sudo ufw delete allow 8000<p style="text-align: justify;">sudo ufw allow 'Nginx Full'</p style="text-align: justify;"></p style="text-align: justify;">

اکنون با وارد کردن نام دامنه یا آدرس IP سرور در مرورگر باید بتوانید برنامه خودتان را مشاهده کنید. 

 

پایان 

در این آموزش پروژه جنگو را در محیط مجازی خودمان ایجاد کردیم. سپس Gunicorn را برای ترجمه درخواست های کاربر به جنگو و مدیریت آن ها پیکربندی کردیم و در ادامه انجین ایکس Nginx را به عنوان پراکسی معکوس برای مدیریت ارتباطات کاربران و سرویس دهی به درخواست های کاربران در پروژه ، تنظیم کردیم.  در ادامه این مطلب برای عیب یابی و رفع عیب نصب جنگو Django و مراحل گفته شده ، مطلب عیب یابی و رفع عیب نصب جنگو Django را حتما مطالعه کنید. جنگو با فراهم کردن بسیاری از ویژگی ها عمومی ، پروژه و برنامه را بسیار ساده می کند و شما می توانید روی قسمت های اصلی تمرکز کنید. با استفاده از زنجیره ای از ابزارهایی که شرح دادیم براحتی می توانید برنامه خود را برای سرویس دهی فقط روی یک سرور آماده کنید.
  • با خدمات ابری پارس آشنا شوید

    اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم

    سرور ابری

    سرور ابری

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

    سرور هیبردی

    سرور هیبردی

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

    سرور ماکرو

    سرور ماکرو

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

    میزبانی ابری

    میزبانی ابری

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

    هاست دانلود

    هاست دانلود

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

    مطالعه این مطالب نیز پیشنهاد می‌شود

    مقالات و نظرات اعضای تیم ما درباره تکنولوژی، روزهای کاری و چیزای دیگر…

  • کلیه حقوق برای شرکت دانش بنیان پارس پک محفوظ می باشد.

    Copyright © 2019 Pars Parva System Ltd. ParsPack Cloud Computing Technology ® , All Rights Reserved.