Thứ năm, 19/03/2015 | 00:00 GMT+7

Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên CentOS 7

Django là một khung công tác web mạnh mẽ có thể giúp bạn khởi động ứng dụng Python hoặc trang web của bạn một cách nhanh chóng. Django bao gồm một server phát triển được đơn giản hóa để kiểm tra mã local của bạn, nhưng đối với bất kỳ thứ gì thậm chí liên quan đến production một chút, cần phải có một web server mạnh mẽ và an toàn hơn.

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt và cấu hình Django trong môi trường ảo Python trên CentOS 7. Sau đó, ta sẽ cài đặt Apache trước ứng dụng của bạn để nó có thể xử lý các yêu cầu của khách hàng trước khi chuyển các yêu cầu đòi hỏi logic ứng dụng tới ứng dụng Django. Ta sẽ thực hiện việc này bằng cách sử dụng module mod_wsgi Apache có thể giao tiếp với Django thông qua đặc tả giao diện WSGI.

Yêu cầu và Mục tiêu

Để hoàn thành hướng dẫn này, bạn phải có version server CentOS 7 mới với user không phải root có quyền sudo cấu hình . Bạn có thể tìm hiểu cách cài đặt điều này bằng cách chạy qua hướng dẫn cài đặt server ban đầu của ta .

Ta sẽ cài đặt Django trong môi trường ảo Python. Việc cài đặt Django vào một môi trường dành riêng cho dự án của bạn sẽ cho phép các dự án của bạn và các yêu cầu của chúng được xử lý riêng biệt.

Khi ta đã cài đặt và chạy ứng dụng của bạn , ta sẽ cấu hình Apache để giao diện với ứng dụng Django. Nó sẽ thực hiện điều này với module mod_wsgi Apache, module này có thể dịch các yêu cầu HTTP thành một định dạng ứng dụng có thể dự đoán được xác định bởi một đặc tả có tên là WSGI. Bạn có thể tìm hiểu thêm về WSGI bằng cách đọc phần được liên kết trên hướng dẫn này .

Bắt đầu nào.

Cài đặt các Gói từ CentOS và EPEL Repos

Để bắt đầu quá trình, ta sẽ download và cài đặt tất cả các mục ta cần từ repository của phân phối của ta . Điều này sẽ bao gồm web server Apache, module mod_wsgi được sử dụng để giao diện với ứng dụng Django của ta và pip , trình quản lý gói Python được dùng để download các công cụ liên quan đến Python của ta .

Để có được pip , ta cần kích hoạt kho EPEL, đây là một số gói bổ sung. Bạn có thể làm điều đó dễ dàng bằng lệnh :

sudo yum install epel-release 

Với EPEL được bật, ta có thể cài đặt các thành phần mình cần bằng lệnh :

sudo yum install python-pip httpd mod_wsgi 

Cấu hình môi trường ảo Python

Bây giờ ta đã có các thành phần từ repository , ta có thể bắt đầu làm việc với dự án Django của bạn . Bước đầu tiên là tạo một môi trường ảo Python để dự án Django của ta sẽ tách biệt với các công cụ của hệ thống và bất kỳ dự án Python nào khác mà ta có thể đang làm việc.

Ta cần cài đặt lệnh virtualenv để tạo các môi trường này. Ta có thể nhận được điều này bằng cách sử dụng pip :

sudo pip install virtualenv 

Với virtualenv được cài đặt, ta có thể bắt đầu hình thành dự án của bạn . Tạo một folder mà bạn muốn giữ lại dự án của bạn và chuyển vào folder :

mkdir ~/myproject cd ~/myproject 

Trong folder dự án, hãy tạo một môi trường ảo Python bằng lệnh :

virtualenv myprojectenv 

Thao tác này sẽ tạo một folder có tên myprojectenv trong folder myproject của bạn. Bên trong, nó sẽ cài đặt version local của Python và version local của pip . Ta có thể sử dụng điều này để cài đặt và cấu hình một môi trường Python riêng biệt cho dự án của bạn .

Trước khi cài đặt các yêu cầu Python của dự án, ta cần kích hoạt môi trường ảo. Bạn có thể thực hiện bằng cách gõ:

source myprojectenv/bin/activate 

Dấu nhắc của bạn sẽ thay đổi để cho biết rằng bạn hiện đang hoạt động trong môi trường ảo Python. Nó trông giống như sau : ( myprojectenv ) user @ host :~/ myproject $ .

Với môi trường ảo của bạn đang hoạt động, hãy cài đặt Django với version local của pip bằng lệnh :

pip install django 

Tạo và cấu hình một dự án Django mới

Bây giờ Django đã được cài đặt trong môi trường ảo của ta , ta có thể tạo các file dự án Django thực tế.

Tạo Dự án Django

Vì ta đã có folder dự án, ta sẽ yêu cầu Django cài đặt các file ở đây. Nó sẽ tạo một folder cấp hai với mã thực, điều này bình thường và đặt một tập lệnh quản lý vào folder này. Key của điều này là dấu chấm ở cuối yêu cầu Django tạo các file trong folder hiện tại:

django-admin.py startproject myproject . 

Điều chỉnh cài đặt dự án

Điều đầu tiên ta nên làm với các file dự án mới tạo của bạn là điều chỉnh cài đặt. Mở file cài đặt bằng editor của bạn:

nano myproject/settings.py 

Ta sẽ sử dụng database SQLite mặc định trong hướng dẫn này vì mục đích đơn giản, vì vậy ta thực sự không cần phải thay đổi quá nhiều. Ta sẽ tập trung vào cấu hình folder file tĩnh, nơi Django sẽ đặt file tĩnh để web server có thể phục vụ những file này dễ dàng.

Ở cuối file , ta sẽ thêm một dòng để cấu hình folder này. Django sử dụng cài đặt STATIC_ROOT để xác định folder chứa các file này. Ta sẽ sử dụng một chút Python để yêu cầu nó sử dụng một folder có tên là “static” trong folder chính của dự án của ta :

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

Lưu file khi bạn hoàn tất.

Hoàn thành cài đặt dự án ban đầu

Bây giờ, ta có thể di chuyển schemas database ban đầu sang database SQLite của bạn bằng cách sử dụng tập lệnh quản lý:

cd ~/myproject ./manage.py makemigrations ./manage.py migrate 

Tạo admin-user cho dự án bằng lệnh :

./manage.py createsuperuser 

Bạn sẽ phải chọn tên user , cung cấp địa chỉ email, chọn và xác nhận password .

Ta có thể thu thập tất cả nội dung tĩnh vào vị trí folder mà ta đã cấu hình bằng lệnh :

./manage.py collectstatic 

Bạn sẽ phải xác nhận hoạt động. Các file tĩnh sẽ được đặt trong một folder được gọi là static trong folder dự án của bạn.

Cuối cùng, bạn có thể kiểm tra dự án của bạn bằng cách khởi động server phát triển Django bằng lệnh sau:

./manage.py runserver 0.0.0.0:8000 

Trong trình duyệt web , hãy truy cập vào domain hoặc địa chỉ IP của server , sau đó là :8000 :

http://server_domain_or_IP:8000 

Bạn sẽ thấy trang index Django mặc định:

Chỉ mục mặc định Django

Nếu bạn thêm /admin vào cuối URL trong thanh địa chỉ, bạn sẽ được yêu cầu nhập tên user và password quản trị mà bạn đã tạo bằng lệnh createsuperuser :

Đăng nhập quản trị Django

Sau khi xác thực, bạn có thể truy cập giao diện quản trị Django mặc định:

Giao diện quản trị Django

Khi bạn khám phá xong, hãy nhấn CTRL-C trong cửa sổ terminal để tắt server phát triển.

Hiện tại, ta đã hoàn tất với Django, vì vậy ta có thể thoát khỏi môi trường ảo của bạn bằng lệnh :

deactivate 

Cấu hình Apache

Bây giờ dự án Django của bạn đang hoạt động, ta có thể cấu hình Apache làm giao diện user . Các kết nối client mà nó nhận được sẽ được dịch sang định dạng WSGI mà ứng dụng Django mong đợi bằng cách sử dụng module mod_wsgi . Điều này nên được tự động kích hoạt khi cài đặt trước đó.

Để cấu hình thẻ WSGI, ta cần tạo một file cấu hình mới xác định thẻ WSGI. Tạo và mở file có quyền sudo trong folder /etc/httpd/conf.d . Ta sẽ gọi file này là django.conf :

sudo nano /etc/httpd/conf.d/django.conf 

Để bắt đầu, hãy cấu hình các file tĩnh. Ta sẽ sử dụng một alias để yêu cầu Apache ánh xạ bất kỳ yêu cầu nào bắt đầu bằng /static đến folder “static” trong folder dự án của ta . Ta đã thu thập các tài sản tĩnh ở đó trước đó. Ta sẽ cài đặt alias và sau đó cấp quyền truy cập vào folder được đề cập với một khối folder :

Alias /static /home/user/myproject/static <Directory /home/user/myproject/static>     Require all granted </Directory> 

Tiếp theo, ta sẽ cấp quyền truy cập vào file wsgi.py trong folder dự án cấp hai nơi mã Django được lưu trữ. Để làm điều này, ta sẽ sử dụng phần folder với phần file bên trong. Ta sẽ cấp quyền truy cập vào file bên trong cấu trúc lồng nhau này:

Alias /static /home/user/myproject/static <Directory /home/user/myproject/static>     Require all granted </Directory>  <Directory /home/user/myproject/myproject>     <Files wsgi.py>         Require all granted     </Files> </Directory> 

Sau khi phần này được cấu hình , ta đã sẵn sàng để xây dựng phần của file thực sự xử lý thẻ WSGI. Ta sẽ sử dụng chế độ daemon để chạy quy trình WSGI, đây là cấu hình được khuyến khích . Ta có thể sử dụng chỉ thị WSGIDaemonProcess để cài đặt điều này.

Chỉ thị này có một tên tùy ý cho quy trình. Ta sẽ sử dụng myproject để duy trì sự nhất quán. Sau đó, ta cài đặt đường dẫn Python nơi Apache có thể tìm thấy tất cả các thành phần có thể được yêu cầu. Vì ta đã sử dụng môi trường ảo, ta sẽ phải cài đặt hai thành phần đường dẫn. Đầu tiên là folder mẹ của dự án của ta , nơi có thể tìm thấy các file dự án. Thứ hai là lib/python x . x /site-packages đường dẫn lib/python x . x /site-packages trong folder môi trường ảo của ta (trong đó Xs được thay thế bằng các thành phần số version Python). Bằng cách này, Apache có thể tìm thấy tất cả các mã Python khác cần thiết để chạy dự án của ta .

Sau đó, ta cần chỉ định group quy trình. Này phải trỏ đến cùng tên ta chọn cho WSGIDaemonProcess chỉ thị ( myproject trong trường hợp của ta ). Cuối cùng, ta cần đặt alias tập lệnh để Apache sẽ chuyển các yêu cầu cho domain root đến file wsgi.py :

Alias /static /home/user/myproject/static <Directory /home/user/myproject/static>     Require all granted </Directory>  <Directory /home/user/myproject/myproject>     <Files wsgi.py>         Require all granted     </Files> </Directory>  WSGIDaemonProcess myproject python-path=/home/user/myproject:/home/user/myproject/myprojectenv/lib/python2.7/site-packages WSGIProcessGroup myproject WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py 

Khi bạn thực hiện xong những thay đổi này, hãy lưu file .

Tóm tắt một số vấn đề về quyền

Tiếp theo, ta cần sửa một vài bộ quyền để dịch vụ Apache có thể truy cập vào các file của ta . Theo mặc định, CentOS khóa rất hạn chế folder chính của mỗi user . Để giải quyết vấn đề này, ta sẽ thêm user apache vào group user của ta . Điều này sẽ cho phép ta mở các quyền vừa đủ để nó có thể truy cập các file thích hợp.

Thêm user apache vào group của bạn bằng lệnh sau. Thay thế tên user của bạn cho user trong lệnh:

sudo usermod -a -G user apache 

Bây giờ, ta có thể cấp quyền thực thi cho group user trên folder chính của ta . Điều này sẽ cho phép quá trình Apache nhập và truy cập nội dung bên trong:

chmod 710 /home/user 

Điều này sẽ cung cấp cho Apache khả năng nhập folder chính của ta .

Nếu bạn đang sử dụng database SQLite, được sử dụng mặc định trong bài viết này, bạn cần cho phép quá trình Apache truy cập vào chính file database .

Để làm như vậy, bước đầu tiên là thay đổi quyền để chủ sở hữu group của database có thể đọc và ghi. Tệp database được gọi là db.sqlite3 theo mặc định và nó phải được đặt trong folder dự án cơ sở của bạn:

chmod 664 ~/myproject/db.sqlite3 

Sau đó, ta cần cung cấp cho group Apache chạy dưới, group apache , quyền sở hữu group của file :

sudo chown :apache ~/myproject/db.sqlite3 

Để ghi vào file , ta cũng cần cấp quyền sở hữu group Apache đối với folder mẹ của database :

sudo chown :apache ~/myproject 

Khi các bước này hoàn tất, bạn đã sẵn sàng khởi động dịch vụ Apache. Để làm như vậy, hãy nhập:

sudo systemctl start httpd 

Đến đây bạn có thể truy cập trang Django của bạn bằng cách truy cập domain hoặc địa chỉ IP của server mà không cần chỉ định cổng. Trang web thông thường và giao diện quản trị sẽ hoạt động như mong đợi.

Nếu mọi thứ hoạt động như mong đợi, bạn có thể bật dịch vụ Apache để nó tự động khởi động khi server khởi động :

sudo systemctl enable httpd 

Kết luận

Trong hướng dẫn này, ta đã cài đặt một dự án Django trong môi trường ảo của riêng nó. Ta đã cấu hình Apache với mod_wsgi để xử lý các yêu cầu của khách hàng và giao diện với ứng dụng Django.

Django làm cho việc tạo các dự án và ứng dụng trở nên đơn giản bằng cách cung cấp nhiều phần chung, cho phép bạn tập trung vào các yếu tố độc đáo. Bằng cách tận dụng chuỗi công cụ chung được mô tả trong bài viết này, bạn có thể dễ dàng phục vụ các ứng dụng bạn tạo từ một server duy nhất.


Tags:

Các tin liên quan

Cách cài đặt database Apache Accumulo NoSQL thân thiện với dữ liệu lớn trên Ubuntu 14.04
2015-03-19
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên Ubuntu 14.04
2015-03-18
Cách cấu hình Apache bằng Ansible trên Ubuntu 14.04
2015-02-18
Apache vs Nginx: Cân nhắc thực tế
2015-01-28
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 10.1
2015-01-14
Cách cài đặt WordPress với Apache trên FreeBSD 10.1
2015-01-14
Cách triển khai ứng dụng Rails với Passenger và Apache trên Ubuntu 14.04
2014-11-21
Cách sử dụng JRuby để chạy ứng dụng Rails trên Apache Tomcat 7 và Ubuntu 14.04
2014-11-14
Cách cấu hình quyền truy cập WebDAV với Apache trên Ubuntu 14.04
2014-09-22
Cách cài đặt và bảo mật phpMyAdmin với Apache trên server CentOS 7
2014-08-07