Thứ năm, 10/04/2014 | 00:00 GMT+7

Cách chạy Django với mod_wsgi và Apache với môi trường Python virtualenv trên VPS Debian

Làm việc với các ứng dụng Django và các ứng dụng Python nói chung, là một vấn đề phức tạp với nhiều công cụ được sử dụng. Có nhiều cách để đạt được cùng một mục tiêu và thường không có cách nào để thực hiện mọi việc.

Một trong những cách phổ biến nhất để triển khai ứng dụng Django lên web trên một server chuyên dụng là sử dụng Nginx được ghép nối với Gunicorn. Một cách tốt để làm điều đó đã được mô tả sâu trong bài viết này . Tuy nhiên, đó là một kịch bản khá phổ biến để lưu trữ các ứng dụng Django cùng với các trang web hiện có được phục vụ bằng Apache. Ta sẽ cố gắng bao quát lộ trình nhanh chóng để đạt được mục tiêu cụ thể đó. Tuy nhiên, xin lưu ý đây không phải là hướng dẫn chính xác về ghép nối Django và Apache và có những khía cạnh cấu hình không được đề cập ở đây.

Văn bản này sẽ đưa ra một số giả định:

  • Bạn đã cài đặt server của bạn với Debian 7.0 trở lên. Có nhiều điểm khác biệt giữa các bản phân phối Linux khác nhau; do đó để rõ ràng, ta sẽ tập trung vào server Debian.

  • Ít nhất bạn đã quen thuộc với các công cụ Python phổ biến như trình quản lý gói pipvirtualenv để tạo môi trường ảo. Những công cụ này được giải thích tuyệt vời trong bài viết này .

  • Ít nhất bạn đã phần nào quen thuộc với cấu trúc dự án Django, vì bài viết này không nhằm mục đích hướng dẫn cách sử dụng và cấu hình chính Django.

  • Bạn đã quen với quản trị Apache cơ bản, vì hướng dẫn này sẽ chỉ đề cập đến việc cài đặt đơn giản của chính server và các thay đổi cấu hình cần thiết để ghép nối Django với Apache.

Yêu cầu

Trước khi cài đặt các gói mới, bạn nên cập nhật gói hệ thống và index gói của bạn . Để làm điều đó, hãy thực hiện:

apt-get update apt-get upgrade 

Cài đặt Apache

Vì văn bản này tập trung vào việc sử dụng Apache để phục vụ ứng dụng, nên bản thân server là cần thiết. Để cài đặt các gói cần thiết, hãy thực hiện:

apt-get install apache2 

Ngay sau khi cài đặt Apache sẽ chạy. Bạn có thể kiểm tra xem web server Apache đã được cài đặt đúng cách hay chưa bằng cách mở trình duyệt web và trỏ nó đến địa chỉ IP của server . Bạn sẽ thấy một Nó hoạt động đơn giản ! trang trên màn hình.

Cài đặt pip và virtualenv

Để bắt đầu làm việc với Python và Django trên web server , trước tiên phải cài đặt pipvirtualenv . Pip là trình quản lý gói Python hỗ trợ cài đặt các gói phần mềm Python như chính Django , trong khi virtualenv cho phép tạo môi trường ảo riêng biệt cho các ứng dụng Python để tách các thư viện cần thiết cho các ứng dụng khác nhau và tránh xung đột version giữa chúng.

Để làm điều đó, hãy thực hiện:

apt-get install python-pip python-virtualenv 

Lệnh này sẽ cài đặt pipvirtualenv từ repository Debian. Bạn có thể xác minh cả hai công cụ đã được cài đặt đúng cách bằng cách chạy chúng với lựa chọn --version .

root@django:~# virtualenv --version 1.7.1.2 root@django:~# pip --version pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7) root@django:~# 

Tạo môi trường ảo bằng virtualenv

Sau khi cài đặt Apache, folder /var/www sẽ tự động được tạo trong đó folder root của web server mặc định được cài đặt . Ta sẽ đặt ứng dụng Django mới của ta ở đó với tất cả các phụ thuộc của nó.

Hãy tạo một folder mới có tên là sampleapp bên trong folder đó và nhập folder mới:

cd /var/www mkdir sampleapp cd sampleapp 

Sau đó, hãy tạo một môi trường ảo mới bằng virtualenv . Môi trường ảo Python về cơ bản là một folder chứa trình thông dịch Python và một version local của pip . Phiên bản local của pip cài đặt tất cả các gói bên trong môi trường ảo. Theo cách đó, không có gói nào được cài đặt gây ô nhiễm cho cài đặt Python global và cũng không có khả năng xảy ra xung đột version gói trong một kịch bản giả định về hai ứng dụng chạy hai version khác nhau của Django hoặc bất kỳ thư viện nào khác.

Để tạo một môi trường ảo mới, hãy nhập:

virtualenv env 

trong đó env là tên môi trường ảo - nó có thể là bất kỳ từ nào khác. Đầu ra từ lệnh này sẽ giống như sau:

root@django:/var/www/sampleapp# virtualenv env New python executable in env/bin/python Installing distribute.............................................................................................................................................................................................done. Installing pip...............done. root@django:/var/www/sampleapp# 

Môi trường ảo hiện đã sẵn sàng và được dùng theo hai cách khác nhau.

Một cách là chạy các lệnh trực tiếp bằng trình thông dịch môi trường ảo. Với phương pháp này, cần phải luôn nhớ thực thi version thông dịch hoặc pip chính xác, vì có khả năng chạy một version toàn hệ thống.

root@django:/var/www/sampleapp# env/bin/pip --version pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7) root@django:/var/www/sampleapp# env/bin/python --version Python 2.7.3 root@django:/var/www/sampleapp# 

Cách khác là kích hoạt môi trường trước, sử dụng

source env/bin/activate 

tên môi trường sau đó sẽ được thêm vào trước dòng lệnh như vậy

root@django:/var/www/sampleapp# source env/bin/activate (env)root@django:/var/www/sampleapp# 

và tất cả các lệnh được thực thi sẽ sử dụng version môi trường ảo local

(env)root@django:/var/www/sampleapp# pip --version pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7) (env)root@django:/var/www/sampleapp# python --version Python 2.7.3 (env)root@django:/var/www/sampleapp# 

nó dễ dàng hơn để làm việc theo cách đó; tuy nhiên, cần phải hủy kích hoạt môi trường sau khi hoàn thành công việc bằng lệnh sau

deactivate 

nó sẽ trả lại vỏ bình thường

(env)root@django:/var/www/sampleapp# deactivate root@django:/var/www/sampleapp# 

Môi trường mới được tạo sẽ được sử dụng để lưu trữ tất cả các phụ thuộc cần thiết, bao gồm Django và các thư viện liên quan. Nó cũng sẽ được Apachemod_wsgi sử dụng sau này để phục vụ ứng dụng bằng cách sử dụng các phụ thuộc chính xác.

Cài đặt Django bên trong môi trường ảo

Bước cần thiết tiếp theo là cài đặt Django bên trong môi trường ảo. Hãy làm điều đó mà không cần kích hoạt môi trường trước bằng cách sử dụng:

env/bin/pip install django 

Thông báo cuối cùng được hiển thị sau khi thực hiện lệnh này sẽ giống như thế này

Successfully installed django Cleaning up... 

Django hiện đã được cài đặt bên trong môi trường ảo và không có sẵn trong cài đặt Python trên toàn hệ thống. Bạn có thể xác minh hành vi đó bằng lệnh module django bằng cả hai trình thông dịch

root@django:/var/www/sampleapp# python Python 2.7.3 (default, Mar 13 2014, 11:03:55) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import django Traceback (most recent call last):   File "<stdin>", line 1, in <module> ImportError: No module named django >>> exit() 

Nhập bằng trình thông dịch toàn hệ thống không thành công, ngược lại

root@django:/var/www/sampleapp# env/bin/python Python 2.7.3 (default, Mar 13 2014, 11:03:55) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> 

một thực thi bên trong môi trường ảo đã thành công.

Tạo dự án Django đầu tiên

Để tạo một dự án ví dụ cơ bản, đơn giản, ta có thể sử dụng tập lệnh django-admin.py như sau

 env/bin/django-admin.py startproject sampleapp . 

Hãy lưu ý dấu vết . trong lệnh - nếu không có nó, dự án sẽ được tạo trong một folder con bổ sung. Sau khi thực hiện lệnh đó mới sampleapp folder và manage.py kịch bản sẽ được tạo trong /var/www/sampleapp . Tập lệnh manage.py được sử dụng để thực thi các lệnh Django cho dự án cụ thể này. Một trong những cách sử dụng có thể có của manage.py là chạy version server thử nghiệm để xác minh mọi thứ đang hoạt động như dự định.

Vui lòng thực hiện:

env/bin/python manage.py runserver 0.0.0.0:8000 

Điều này sẽ chạy một server thử nghiệm được liên kết với tất cả các giao diện trên cổng 8000. Đầu ra sẽ giống như sau:

Validating models...  0 errors found April 08, 2014 - 12:29:31 Django version 1.6.2, using settings 'sampleapp.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. 

Nếu bạn mở địa chỉ IP server của bạn bằng cổng 8000 trong trình duyệt (địa chỉ sẽ giống như http://<ip address>:8000/ ), bạn sẽ thấy thông báo Nó đã hoạt động! ví dụ trang Django . Đây là kết quả ta sẽ hướng tới việc sử dụng web server Apache thay vì server phát triển Django tích hợp sẵn.

Do ứng dụng Django đang hoạt động bình thường nên ta có thể tiến hành ghép nối ứng dụng với Apache.

Cài đặt mod_wsgi cho Apache

Cách dễ nhất và cũng được khuyến khích để cung cấp các ứng dụng Python bằng Apache là sử dụng module mod_wsgi . Nó không được cài đặt theo mặc định với cả Python và Apache , vì vậy ta phải cài đặt một gói bổ sung.

apt-get install libapache2-mod-wsgi 

Bước tiếp theo sẽ là cấu hình server ảo Apache mặc định mà ở phần đầu của bài viết, Nó hoạt động! trang để phục vụ ứng dụng Django của ta .

Cấu hình mod_wsgi trong server ảo mặc định

Ý tưởng đằng sau việc cấu hình mod_wsgi cho bất kỳ server ảo nào khác trong Apache cũng giống như ý tưởng được trình bày ở đây. Ta sẽ sử dụng server ảo mặc định cho đơn giản, vì nó là server đã được cung cấp bởi cài đặt Apache sạch.

Mở file cấu hình server ảo mặc định trong editor nano

nano /etc/apache2/sites-enabled/000-default  

và thêm ba dòng sau ngay bên dưới <VirtualHost *:80>

WSGIDaemonProcess sampleapp python-path=/var/www/sampleapp:/var/www/sampleapp/env/lib/python2.7/site-packages WSGIProcessGroup sampleapp WSGIScriptAlias / /var/www/sampleapp/sampleapp/wsgi.py 

Dòng đầu tiên sinh ra một quy trình daemon WSGI được gọi là sampleapp sẽ chịu trách nhiệm cung cấp ứng dụng Django của ta . Về cơ bản, tên daemon có thể là bất cứ thứ gì, nhưng bạn nên * sử dụng các tên mô tả như tên ứng dụng ở đây.

Nếu ta đang sử dụng cài đặt Python global và version Django global , chỉ thị python-path sẽ không cần thiết. Tuy nhiên, việc sử dụng môi trường ảo làm cho nó bắt buộc phải chỉ định đường dẫn Python thay thế để mod_wsgi biết nơi tìm kiếm các gói Python.

Đường dẫn phải chứa hai folder : folder của chính dự án Django - /var/www/sampleapp - và folder của các gói Python bên trong môi trường ảo của ta cho dự án đó - /var/www/sampleapp/env/lib/python2.7/site-packages . Các folder trong định nghĩa đường dẫn được phân cách bằng dấu hai chấm.

Dòng thứ hai cho biết server ảo cụ thể đó sử dụng daemon WSGI đã tạo trước đó, và như vậy, tên daemon phải khớp giữa hai thứ đó. Ta đã sử dụng sampleapp trong cả hai dòng.

Dòng thứ ba là quan trọng nhất, vì nó cho Apachemod_wsgi biết nơi tìm cấu hình WSGI. wsgi.py do Django cung cấp chứa cấu hình mặc định xương sống cho WSGI để phục vụ ứng dụng Django hoạt động tốt và việc thay đổi cấu hình trong file này nằm ngoài phạm vi bài viết này.

Sau những thay đổi này, cần phải khởi động lại Apache

service apache2 restart 

Sau đó, khi mở trình duyệt web trên địa chỉ IP server của bạn, mà không có bất kỳ cổng bổ sung nào, bạn sẽ thấy cùng một trang Django như trước thay vì ban đầu Nó hoạt động! trang mà ta đã xem trước đó.

Điều đó làm cho cấu hình của ta hoàn thành.

Xin lưu ý: sử dụng server ảo mặc định mà không cần chăm sóc thêm không phải là cách được khuyến khích để cấu hình server production . Nó được sử dụng cho mục đích demo .

đọc thêm

Chủ đề về cấu hình mod_wsgiDjango là rất lớn. Nhiều khía cạnh cấu hình là ứng dụng cụ thể và khó giải thích hoặc chứng minh nếu không làm việc với ứng dụng Django trong thế giới thực. Hướng dẫn này không phải là hướng dẫn đầy đủ để triển khai các ứng dụng Django bằng Apache, nhưng là hướng dẫn bắt đầu nhanh về cách bắt đầu.

Một trong những nguồn tốt nhất là tài liệu Django chính thức. Ngoài ra còn có các bài viết tuyệt vời trên DigitalOcean có thể được tìm thấy bằng cách sử dụng Django làm từ khóa tìm kiếm.

<div class = “author”> Bài viết được gửi bởi: <a href=p>http://maticomp.net[> Mateusz Papiernik </a> </div>


Tags:

Các tin liên quan

Cách di chuyển cấu hình Apache của bạn từ cú pháp 2.2 sang 2.4.
2014-03-31
Cách sử dụng server Apache HTTP dưới dạng Reverse-Proxy bằng cách sử dụng extension mod_proxy
2014-02-14
Cách cài đặt và cấu hình Apache Tomcat trên server Debian
2014-01-07
Cách cài đặt và quản lý Apache Qpid
2013-12-30
Cách chuyển từ web server Apache sang Nginx trên VPS Ubuntu
2013-12-17
Cách cài đặt Apache mod_spdy trên VPS Debian 7
2013-12-12
Cách thiết lập ứng dụng Rails 4 với Apache và Passenger trên CentOS 6
2013-12-06
Cách thiết lập công cụ Railo CFML với Tomcat và Apache trên Debian 7 hoặc Ubuntu 13 VPS
2013-11-19
Cách tạo chứng chỉ SSL trên Apache cho Debian 7
2013-11-11
Cách thiết lập server ảo Apache trên Debian 7
2013-10-29