راه‌اندازی اپلیکیشن django (جنگو) روی Centos با mod wsgi

۰۹ دی ، ۱۳۹۷

راه‌اندازی برنامه‌ی نوشته شده روی سرور اصلی یا به اصطلاح Deployment، همواره کار چالش برانگیزی است و انتقال تجربه در آن، می‌تواند تا حدودی کار را آسان‌تر کند. در این مقاله قصد داریم به آموزش راه‌اندازی برنامه‌ی نوشته شده با فریم‌ورک جنگو روی سرور Centos بپردازیم.

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

مرحله‌ی ۱؛ نصب ابزارهای مورد نیاز روی Centos

۱. نصب ابزارهای اولیه برای برنامه‌نویسی در Centos
sudo yum group install "Development Tools"
۲.نصب سیستم مدیریت پایگاه‌داده‌ی مورد نیازتان (DBMS)

دقت کنید که اگر شما از پایگاه داده‌ی sqlite استفاده می‌کنید، نیاز به نصب برنامه‌ی خاصی ندارید اما اگر شما از پایگاه‌داده‌ی دیگری استفاده می‌کنید، با یک جستجوی ساده می‌توانید به سادگی آن را بیابید. برای مثال این آموزش، منبع مناسبی برای نصب ورژن 5.7 mysql روی سرور Centos می‌باشد.

۳. نصب ورژن 3.6 پایتون (در صورت نیاز)

ورژن 2.7 پایتون به طور پیش‌فرض روی سیستم‌عامل Centos نصب می‌باشد. چنان که شما نیاز به ورژن 3.6 پایتون یا بالاتر نیاز داشتید، مراحل زیر را انجام دهید:

• افزودن ius rpm به لیست ریپازیتوری‌های Centos

sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm

• آپدیت yum برای کامل کردن فرایند افزودن

sudo yum update

• نصب پایتون ورژن 3.6 و ابزار‌های اولیه آن

sudo yum install -y python36u python36u-libs python36u-devel python36u-pip python36-devel
۴. نصب ابزار‌های لازم برای ارتباط بین پایتون و mysql

برای نصب این پکیج‌ها دستور زیر را اجرا کنید:

sudo yum install -y mysql-connector-python mysql-community-libs mysql-community-devel
۵. نصب mod_wsgi برای پایتون 3.6

برای پیاده‌سازی با مود wsgi، نیاز است که این پکیج را نیز نصب کنید:

sudo yum install -y python36u-mod_wsgi
۶. فعال سازی سرویس apache روی سرور (httpd)

سرویس apache یا همان httpd به طور پیشفرض روی Centos نصب است. برای اطمینان دستور زیر را اجرا کنید:

sudo yum install -y httpd mod_ssl

حال تنها لازم است آن‌را فعال سازی کنید. اجرای دستور زیر یک راه بای این کار است:

sudo systemctl enable httpd
sudo systemctl start httpd
7. تنظیم فایروال برای اجازه داده به ترافیک وبی

در Centos 7 به طور پیشفرض ترافیک‌ وبی بلاک شده و نیاز است که آن را مجاز کنید:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo systemctl restart firewalld
۸. اضافه کردن httpd به لیست مجاز SELinux
sudo semanage permissive -a httpd_t

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

مرحله‌ی ۲؛ فرایند راه اندازی اپلیکیشن

۱. انتقال فایل‌های پروژه‌ به سرور

ابتدا به آدرس خانه ی apache بروید و پروژه ی خود را به آنجا انتقال دهید:

cd /var/www

لازم است که در این فاز کلیه‌ی کارهای لازم برای اجرای برنامه‌یتان به شکل لوکال انجام شده باشد مثل ساخت virtualenv، نصب پکیج‌های موردنیاز و ست کردن envirement variable ها.

در آخر نیز برای اطمینان از نبود مشکل پرمیشن، پرمیشن ادرس خانه‌ی apache را به آن اساین کنید:

sudo chown -R apache:apache /var/www

نکته در ساخت دیتابیس mysql: دقت کنید که اگر می‌خواهید مقادیر فارسی در دیتابیس خود نگه دارید، دیتابیس را حتما با انکودینگ utf8 بسازید:

CREATE DATABASE  CHARACTER SET utf8;
۲. ساخت یک virtual host برای پروژه

ابتدا به پوشه‌ی تنظیمات ساخت virtual host های apache بروید:

cd /etc/httpd/conf.d

یک فایل به نام wsgi.conf درست کنید و تنظیمات زیر را در آن انجام دهید:

<VirtualHost *:80>
ServerName <your-project-domain>
Alias /app /var/www/<project-name>/build
<Directory /var/www/<project-name>/build>
   Require all granted
   RewriteEngine on
   # Don't rewrite files or directories
   RewriteCond %{REQUEST_FILENAME} -f [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^ - [L]
   # Rewrite everything else to index.html to allow html5 state links
   RewriteRule ^ /app/index.html [L]
</Directory>

Alias /static /var/www/<project-name>/static
<Directory /var/www/<project-name>/static>
    Require all granted
</Directory>

<Directory /var/www/<project-name>/<project-main-app-name>>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIPassAuthorization On
WSGIDaemonProcess <project-name> python-path=/var/www/<project-name>:/var/www/<project-name>/venv/lib/python3.6/site-packages
WSGIProcessGroup <project-name>
WSGIScriptAlias / /var/www/<project-name>/<project-main-app-name>/wsgi.py
</VirtualHost>

در صورتی هم که نیاز به تعریف envirement variable دارید، به دو شکل می‌توانید آن را انجام دهید:

۱. تعریف در فایل /etc/sysconfig/httpd به شکل زیر:

export VARIABLE_NAME=variable_value

۲. تعریف در فایل کانفیگ virtual hostساخته شده:

<VirtualHost *:80>
    ...
    SetEnv VARIABLE_NAME variable_value
    ...
</VirtualHost>

حال دیگر می‌توانید سرویس apache را ری‌استارت کنید و پس از تعریف nameserver های مربوط به دامینتان، مستقیما با باز کردن دایمن تعریف شده، نتیجه‌ی کارتان را ببینید.

در صورت بروز مشکل و یا خطا می‌توانید لاگ مربوط به خطا را از آدرس /var/log/httpd/error.log ببینید.

ممکن است SELinux که ماژول امنیتی سیستم‌عامل centos 7 می‌باشد برای شما مشکل ایجاد کند. برای غیرفعال سازی آن به آدرس /etc/selinux/config بروید و پارامتر SELINUX را برابر disabled قرار دهید و سیستم را ری‌استارت کنید.

در صورت وجود هر گونه سوال یا مشکل، از قسمت تماس با ما با می‌توانید پیامتان را به گوش ما برسانید.

موفق باشید


میانگین آرا:
95% (4 نفر)
رای دهید:
مقالات مرتبط
مشاهده بیشتر...