Thứ tư, 11/03/2015 | 00:00 GMT+7

Cách cung cấp các ứng dụng Django với uWSGI và Nginx trên Ubuntu 14.04

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 . 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 một số thành phần trên Ubuntu 14.04 để hỗ trợ và phục vụ các ứng dụng Django. Ta sẽ cấu hình server chứa ứng dụng uWSGI để giao tiếp với các ứng dụng của ta . Sau đó, ta sẽ cài đặt Nginx để đảo ngược proxy tới uWSGI, cấp cho ta quyền truy cập vào các tính năng bảo mật và hiệu suất của nó để phục vụ các ứng dụng của ta .

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

Để hoàn thành hướng dẫn này, bạn nên có version server Ubuntu 14.04 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 hai môi trường ảo khác nhau. Điều này 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. Ta sẽ tạo hai dự án mẫu để ta có thể chạy qua các bước trong môi trường đa dự án.

Sau khi có các ứng dụng của bạn , ta sẽ cài đặt và cấu hình server ứng dụng uWSGI. Điều này sẽ đóng role là giao diện cho các ứng dụng của ta , nó sẽ dịch các yêu cầu của khách hàng bằng cách sử dụng các lệnh gọi HTTP sang Python mà ứng dụng của ta có thể xử lý. Sau đó, ta sẽ cài đặt Nginx trước uWSGI để tận dụng các cơ chế xử lý kết nối hiệu suất cao và các tính năng bảo mật dễ triển khai của nó.

Bắt đầu nào.

Cài đặt và cấu hình VirtualEnv và VirtualEnvWrapper

Ta sẽ cài đặt các dự án Django của ta trong môi trường ảo của riêng chúng để tách biệt các yêu cầu cho từng dự án. Để làm điều này, ta sẽ cài đặt virtualenv , có thể tạo môi trường ảo Python và virtualenvwrapper , bổ sung một số cải tiến về khả năng sử dụng cho quy trình làm việc virtualenv .

Ta sẽ cài đặt cả hai thành phần này bằng cách sử dụng pip , trình quản lý gói Python. Điều này có thể được lấy từ repository Ubuntu:

sudo apt-get update sudo apt-get install python-pip 

Trong hướng dẫn này, ta đang sử dụng version Python 2. Nếu mã của bạn sử dụng Python 3, bạn có thể cài đặt gói python3-pip . Sau đó, bạn sẽ phải thay thế các lệnh pip trong hướng dẫn này bằng lệnh pip3 khi hoạt động bên ngoài môi trường ảo.

Đến đây bạn đã cài đặt pip , ta có thể cài đặt virtualenvvirtualenvwrapper trên phạm vi global bằng lệnh :

sudo pip install virtualenv virtualenvwrapper 

Với các thành phần này được cài đặt, bây giờ ta có thể cấu hình shell của bạn với thông tin nó cần để hoạt động với tập lệnh virtualenvwrapper . Tất cả các môi trường ảo của ta sẽ được đặt trong một folder trong folder chính có tên là Env để dễ dàng truy cập. Điều này được cấu hình thông qua một biến môi trường có tên là WORKON_HOME . Ta có thể thêm nó vào script khởi tạo shell của bạn và có thể tạo nguồn cho script wrapper của môi trường ảo.

Nếu bạn đang sử dụng Python 3 và lệnh pip3 , bạn cũng sẽ phải thêm một dòng bổ sung vào tập lệnh khởi tạo shell của bạn :

echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc 

Dù bạn đang sử dụng version Python nào, bạn cần chạy các lệnh sau:

echo "export WORKON_HOME=~/Env" >> ~/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc 

Bây giờ, hãy mã nguồn tập lệnh khởi tạo shell của bạn để bạn có thể sử dụng chức năng này trong phiên hiện tại của bạn :

source ~/.bashrc 

Đến đây bạn sẽ có folder tên là Env trong folder chính của bạn, folder này sẽ chứa thông tin môi trường ảo.

Tạo dự án Django

Bây giờ ta đã có các công cụ môi trường ảo, ta sẽ tạo hai môi trường ảo, cài đặt Django trong mỗi môi trường và bắt đầu hai dự án.

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

Ta có thể tạo môi trường ảo một cách dễ dàng bằng cách sử dụng một số lệnh mà tập lệnh virtualenvwrapper cung cấp cho ta .

Tạo môi trường ảo đầu tiên của bạn với tên của trang web hoặc dự án đầu tiên của bạn bằng lệnh :

mkvirtualenv firstsite 

Điều này sẽ tạo ra một môi trường ảo, cài đặt Python và pip bên trong nó, và kích hoạt môi trường. 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 mới của bạn . Nó sẽ giống như sau: ( firstsite ) user @ hostname :~$ . Giá trị trong ngoặc đơn là tên của môi trường ảo của bạn. Mọi phần mềm được cài đặt thông qua pip bây giờ sẽ được cài đặt vào môi trường ảo thay vì trên hệ thống global . Điều này cho phép ta tách các gói của bạn trên cơ sở từng dự án.

Bước đầu tiên của ta sẽ là cài đặt chính Django. Ta có thể sử dụng pip cho việc này mà không cần sudo vì ta đang cài đặt local này trong môi trường ảo của ta :

pip install django 

Với Django được cài đặt, ta có thể tạo dự án mẫu đầu tiên của bạn bằng lệnh :

cd ~ django-admin.py startproject firstsite 

Thao tác này sẽ tạo một folder có tên là firstsite trong folder chính của bạn. Trong phần này là một kịch bản quản lý được sử dụng để xử lý các khía cạnh khác nhau của dự án và một folder khác cùng tên được sử dụng để chứa mã dự án thực tế.

Chuyển vào folder cấp đầu tiên để ta có thể bắt đầu cài đặt các yêu cầu tối thiểu cho dự án mẫu của bạn .

cd ~/firstsite 

Bắt đầu bằng cách di chuyển database để khởi tạo database SQLite mà dự án của ta sẽ sử dụng. Bạn có thể cài đặt database thay thế cho ứng dụng của bạn nếu muốn, nhưng điều này nằm ngoài phạm vi của hướng dẫn này:

./manage.py migrate 

Đến đây bạn sẽ có một file database có tên db.sqlite3 trong folder dự án của bạn. Bây giờ, ta có thể tạo admin-user bằng lệnh :

./manage.py createsuperuser 

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

Tiếp theo, mở file cài đặt cho dự án bằng editor của bạn:

nano firstsite/settings.py 

Vì ta sẽ cài đặt Nginx để phục vụ trang web của bạn , ta cần cấu hình một folder sẽ chứa các tài sản tĩnh của trang web của ta . Điều này sẽ cho phép Nginx phục vụ những thứ này trực tiếp, điều này sẽ có tác động tích cực đến hiệu suất. Ta sẽ yêu cầu Django đặt chúng vào một folder được gọi là static trong folder cơ sở của dự án của ta . Thêm dòng này vào cuối file để cấu hình hành vi này:

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

Lưu file khi bạn hoàn tất. Bây giờ, hãy thu thập các phần tử tĩnh của trang web của ta và đặt chúng trong folder đó bằng lệnh :

./manage.py collectstatic 

Bạn có thể nhập “yes” để xác nhận hành động và thu thập nội dung tĩnh. Sẽ có một folder mới được gọi là static trong folder dự án của bạn.

Với tất cả những điều đó, ta có thể kiểm tra dự án của bạn bằng cách tạm thời khởi động server phát triển. Kiểu:

./manage.py runserver 0.0.0.0:8080 

Thao tác này sẽ khởi động server phát triển trên cổng 8080 . Truy cập domain hoặc địa chỉ IP của server của bạn, theo sau là 8080 trong trình duyệt của bạn:

http://server_domain_or_IP:8080 

Bạn sẽ thấy một trang trông như thế này:

Trang web mẫu Django

Thêm /admin vào cuối URL trong thanh địa chỉ của trình duyệt và bạn sẽ được đưa đến trang đăng nhập quản trị:

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

Sử dụng thông tin đăng nhập quản trị mà bạn đã chọn bằng lệnh createsuperuser , đăng nhập vào server . Sau đó, bạn sẽ có quyền truy cập vào giao diện quản trị:

Giao diện quản trị Django

Sau khi thử nghiệm chức năng này, hãy dừng server phát triển bằng lệnh CTRL-C vào terminal của bạn. Bây giờ ta có thể chuyển sang dự án thứ hai của bạn .

Tạo dự án thứ hai

Dự án thứ hai sẽ được tạo theo cách giống hệt như dự án đầu tiên. Ta sẽ rút ngắn lời giải thích trong phần này, xem như cách bạn đã hoàn thành việc này một lần.

Di chuyển trở lại folder chính của bạn và tạo một môi trường ảo thứ hai cho dự án mới của bạn. Cài đặt Django bên trong môi trường mới này sau khi nó được kích hoạt:

cd ~ mkvirtualenv secondsite pip install django 

Môi trường mới sẽ được tạo thay đổi thành môi trường ảo trước đó của bạn. Phiên bản Django này hoàn toàn tách biệt với version khác mà bạn đã cấu hình . Điều này cho phép bạn quản lý chúng một cách độc lập và tùy chỉnh khi cần thiết.

Tạo dự án thứ hai và chuyển vào folder dự án:

django-admin.py startproject secondsite cd ~/secondsite 

Khởi tạo database và tạo admin-user :

./manage.py migrate ./manage.py createsuperuser 

Mở file cài đặt:

nano secondsite/settings.py 

Thêm vị trí cho các file tĩnh, giống như bạn đã làm trong dự án trước:

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

Lưu và đóng file . Bây giờ, hãy thu thập các phần tử tĩnh vào folder đó bằng lệnh :

./manage.py collectstatic 

Cuối cùng, kích hoạt server phát triển để kiểm tra trang web:

./manage.py runserver 0.0.0.0:8080 

Bạn nên kiểm tra trang web thường xuyên tại:

http://server_domain_or_IP:8080 

Đồng thời đăng nhập vào trang quản trị:

http://server_domain_or_IP:8080/admin 

Khi bạn đã xác nhận mọi thứ đang hoạt động như mong đợi, hãy nhập CTRL-C vào terminal của bạn để dừng server phát triển.

Backup khỏi môi trường ảo

Vì bây giờ ta đã hoàn tất phần Django của hướng dẫn, ta có thể hủy kích hoạt môi trường ảo thứ hai của bạn :

deactivate 

Nếu bạn cần làm việc lại trên một trong hai trang web Django của bạn , bạn nên chạy lại môi trường tương ứng của chúng. Bạn có thể thực hiện bằng cách sử dụng lệnh workon :

workon firstsite 

Hoặc là:

workon secondsite 

, hãy hủy kích hoạt khi bạn làm việc xong trên các trang web của bạn :

deactivate 

Cài đặt server ứng dụng uWSGI

Bây giờ ta đã cài đặt hai dự án Django và sẵn sàng hoạt động, ta có thể cấu hình uWSGI. uWSGI là một server ứng dụng có thể giao tiếp với các ứng dụng qua giao diện tiêu chuẩn được gọi là WSGI. Để tìm hiểu thêm về điều này, hãy đọc phần này trong hướng dẫn của ta về cách cài đặt uWSGI và Nginx trên Ubuntu 14.04.

Cài đặt uWSGI

Không giống như hướng dẫn được liên kết ở trên, trong hướng dẫn này, ta sẽ cài đặt uWSGI trên phạm vi global . Điều này sẽ tạo ra ít ma sát hơn trong việc xử lý nhiều dự án Django. Trước khi có thể cài đặt uWSGI, ta cần các file phát triển Python mà phần mềm dựa vào. Ta có thể cài đặt cái này trực tiếp từ kho của Ubuntu:

sudo apt-get install python-dev 

Bây giờ các file phát triển đã có sẵn, ta có thể cài đặt uWSGI trên phạm vi global thông qua pip bằng lệnh :

sudo pip install uwsgi 

Ta có thể nhanh chóng kiểm tra server ứng dụng này bằng cách chuyển nó thông tin cho một trong các trang web của ta . Ví dụ: ta có thể yêu cầu nó phục vụ dự án đầu tiên của ta bằng lệnh :

uwsgi --http :8080 --home /home/user/Env/firstsite --chdir /home/user/firstsite -w firstsite.wsgi 

Ở đây, ta đã yêu cầu uWSGI sử dụng môi trường ảo nằm trong folder ~/Env của ta , để thay đổi thành folder dự án của ta và sử dụng file wsgi.py được lưu trữ trong folder đầu firstsite bên trong của ta để phân phát file . Đối với phần trình diễn của ta , ta đã yêu cầu nó phân phát HTTP trên cổng 8080 . Nếu bạn truy cập domain hoặc địa chỉ IP của server trong trình duyệt của bạn , theo sau là :8080 , bạn sẽ thấy lại trang web của bạn (các phần tử tĩnh trong giao diện /admin sẽ không hoạt động). Khi bạn hoàn tất việc kiểm tra chức năng này, hãy nhập CTRL-C vào terminal .

Tạo file cấu hình

Chạy uWSGI từ dòng lệnh rất hữu ích để thử nghiệm, nhưng không đặc biệt hữu ích cho việc triển khai thực tế. Thay vào đó, ta sẽ chạy uWSGI ở “Chế độ hoàng đế”, cho phép một quy trình chính quản lý các ứng dụng riêng biệt một cách tự động với một tập hợp các file cấu hình.

Tạo một folder chứa các file cấu hình của bạn. Vì đây là một quy trình global , ta sẽ tạo một folder có tên /etc/uwsgi/sites để lưu trữ các file cấu hình của ta . Di chuyển vào folder sau khi bạn tạo:

sudo mkdir -p /etc/uwsgi/sites cd /etc/uwsgi/sites 

Trong folder này, ta sẽ đặt các file cấu hình của ta . Ta cần một file cấu hình cho từng dự án mà ta đang phục vụ. Quá trình uWSGI có thể lấy các file cấu hình ở nhiều định dạng khác nhau, nhưng ta sẽ sử dụng file .ini do tính đơn giản của chúng.

Tạo một file cho dự án đầu tiên của bạn và mở nó trong editor của bạn:

sudo nano firstsite.ini 

Bên trong, ta phải bắt đầu với tiêu đề phần [uwsgi] . Tất cả thông tin của ta sẽ nằm bên dưới tiêu đề này. Ta cũng sẽ sử dụng các biến để làm cho file cấu hình của ta có thể tái sử dụng nhiều hơn. Sau tiêu đề, hãy đặt một biến có tên là project với tên của dự án đầu tiên của bạn. Thêm một biến được gọi là base với đường dẫn đến folder chính của user của bạn:

[uwsgi] project = firstsite base = /home/user 

Tiếp theo, ta cần cấu hình uWSGI để nó xử lý dự án của ta một cách chính xác. Ta cần thay đổi folder dự án root bằng cách cài đặt tùy chọn chdir . Ta có thể kết hợp cài đặt folder chính và tên dự án mà ta đã đặt trước đó bằng cách sử dụng cú pháp %( variable_name ) . Điều này sẽ được thay thế bằng giá trị của biến khi cấu hình được đọc.

Theo cách tương tự, ta sẽ chỉ ra môi trường ảo cho dự án của ta . Bằng cách cài đặt module , ta có thể chỉ ra chính xác cách giao diện với dự án của ta ( bằng lệnh “ứng dụng” có thể gọi từ file wsgi.py trong folder dự án của ta ). Cấu hình của các mục này sẽ giống như sau:

[uwsgi] project = firstsite base = /home/user  chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application 

Ta muốn tạo ra một quy trình tổng thể với 5 công nhân. Ta có thể làm điều này bằng cách thêm điều này:

[uwsgi] project = firstsite base = /home/user  chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application  master = true processes = 5 

Tiếp theo, ta cần chỉ định cách uWSGI sẽ lắng nghe các kết nối. Trong thử nghiệm của ta về uWSGI, ta đã sử dụng HTTP và một cổng mạng. Tuy nhiên, vì ta sẽ sử dụng Nginx làm Reverse Proxy nên ta có các tùy chọn tốt hơn.

Thay vì sử dụng cổng mạng, vì tất cả các thành phần đều hoạt động trên một server duy nhất, ta có thể sử dụng socket Unix. Điều này an toàn hơn và mang lại hiệu suất tốt hơn. Ổ cắm này sẽ không sử dụng HTTP mà thay vào đó sẽ triển khai giao thức uwsgi của uwsgi , là một giao thức binary nhanh được thiết kế để giao tiếp với các server khác. Nginx có thể ủy quyền tự nhiên bằng giao thức uwsgi , vì vậy đây là lựa chọn tốt nhất của ta .

Ta cũng sẽ sửa đổi các quyền của socket vì ta sẽ cấp cho web server quyền ghi. Ta sẽ đặt tùy chọn vacuum để file socket sẽ tự động được dọn dẹp khi dịch vụ bị dừng:

[uwsgi] project = firstsite base = /home/user  chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application  master = true processes = 5  socket = %(base)/%(project)/%(project).sock chmod-socket = 664 vacuum = true 

Với điều này, cấu hình uWSGI của dự án đầu tiên của ta đã hoàn tất. Lưu và đóng file .

Ưu điểm của việc cài đặt file bằng cách sử dụng các biến là nó làm cho nó cực kỳ đơn giản để sử dụng lại. Sao chép file cấu hình của dự án đầu tiên của bạn để sử dụng làm cơ sở cho file cấu hình thứ hai của bạn:

sudo cp /etc/uwsgi/sites/firstsite.ini /etc/uwsgi/sites/secondsite.ini 

Mở file cấu hình thứ hai bằng editor của bạn:

sudo nano /etc/uwsgi/sites/secondsite.ini 

Ta chỉ cần thay đổi một giá trị duy nhất trong file này để làm cho nó hoạt động cho dự án thứ hai của ta . Sửa đổi biến project với tên bạn đã sử dụng cho dự án thứ hai của bạn :

[uwsgi] project = secondsite base = /home/user  chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application  master = true processes = 5  socket = %(base)/%(project)/%(project).sock chmod-socket = 664 vacuum = true 

Lưu file khi bạn hoàn tất. Dự án thứ hai của bạn đã sẵn sàng để thực hiện ngay bây giờ.

Tạo tập lệnh khởi động cho uWSGI

Bây giờ ta có các file cấu hình mà ta cần để phục vụ các dự án Django của bạn , nhưng ta vẫn chưa tự động hóa quy trình. Tiếp theo, ta sẽ tạo một tập lệnh Upstart để tự động khởi động uWSGI khi khởi động.

Ta sẽ tạo một tập lệnh Upstart trong folder /etc/init , nơi các file này được kiểm tra:

sudo nano /etc/init/uwsgi.conf 

Bắt đầu bằng cách đặt mô tả cho dịch vụ uWSGI của bạn và chỉ ra các cấp chạy nơi nó sẽ tự động chạy. Ta sẽ đặt của ta để chạy trên các cấp độ 2, 3, 4 và 5, là các cấp chạy thông thường của nhiều user :

description "uWSGI application server in Emperor mode"  start on runlevel [2345] stop on runlevel [!2345] 

Tiếp theo, ta cần đặt tên user và group mà quá trình sẽ được chạy. Ta sẽ chạy quy trình dưới tên user của chính mình vì ta sở hữu tất cả các file . Đối với group , ta cần đặt nó thành group www-data mà Nginx sẽ chạy trong đó. Sau đó, cài đặt socket của ta từ file cấu hình uWSGI sẽ cho phép web server ghi vào socket . Thay đổi tên user bên dưới để trùng với tên user của bạn trên server :

description "uWSGI application server in Emperor mode"  start on runlevel [2345] stop on runlevel [!2345]  setuid user setgid www-data 

Cuối cùng, ta cần chỉ định lệnh thực sự để thực thi. Ta cần khởi động uWSGI ở chế độ Emperor và chuyển vào folder nơi ta đã lưu trữ các file cấu hình của bạn . uWSGI sẽ đọc các file và phục vụ từng dự án của ta :

description "uWSGI application server in Emperor mode"  start on runlevel [2345] stop on runlevel [!2345]  setuid user setgid www-data  exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites 

Khi bạn hoàn tất, hãy lưu file . Ta sẽ không khởi động uWSGI vì ta sẽ không có sẵn group www-data cho đến sau khi ta cài đặt Nginx.

Cài đặt và cấu hình Nginx làm Reverse Proxy

Với uWSGI được cấu hình và sẵn sàng hoạt động, giờ đây ta có thể cài đặt và cấu hình Nginx làm Reverse Proxy của ta . Điều này có thể được download từ repository mặc định của Ubuntu:

sudo apt-get install nginx 

Khi Nginx được cài đặt, ta có thể tiếp tục và tạo file cấu hình khối server cho từng dự án của bạn . Bắt đầu với dự án đầu tiên bằng cách tạo file cấu hình khối server :

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

Bên trong, ta có thể bắt đầu khối server của bạn bằng cách chỉ ra số cổng và domain mà dự án đầu tiên của ta có thể truy cập được. Ta sẽ giả định bạn có một domain cho mỗi:

server {     listen 80;     server_name firstsite.com www.firstsite.com; } 

Tiếp theo, ta có thể nói với Nginx đừng lo lắng nếu nó không thể tìm thấy biểu tượng yêu thích. Ta cũng sẽ trỏ nó đến vị trí của folder file tĩnh, nơi ta đã thu thập các phần tử tĩnh của trang web:

server {     listen 80;     server_name firstsite.com www.firstsite.com;      location = /favicon.ico { access_log off; log_not_found off; }     location /static/ {         root /home/user/firstsite;     } } 

Sau đó, ta có thể sử dụng chỉ thị uwsgi_pass để chuyển lưu lượng đến file socket của ta . Tệp socket mà ta đã cấu hình được gọi là firstproject .sock và nó nằm trong folder dự án của ta . Ta sẽ sử dụng include chỉ thị để bao gồm các thiết uwsgi thông số để xử lý các kết nối:

server {     listen 80;     server_name firstsite.com www.firstsite.com;      location = /favicon.ico { access_log off; log_not_found off; }     location /static/ {         root /home/user/firstsite;     }      location / {         include         uwsgi_params;         uwsgi_pass      unix:/home/user/firstsite/firstsite.sock;     } } 

Đó thực sự là tất cả cấu hình ta cần. Lưu file khi bạn hoàn tất.

Ta sẽ sử dụng điều này làm cơ sở cho file cấu hình Nginx của dự án thứ hai của ta . Sao chép nó ngay bây giờ:

sudo cp /etc/nginx/sites-available/firstsite /etc/nginx/sites-available/secondsite 

Mở file mới trong editor của bạn:

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

Tại đây, bạn sẽ phải thay đổi bất kỳ tham chiếu nào đến trang firstsite bằng tham chiếu đến trang secondsite . Bạn cũng sẽ phải sửa đổi server_name để dự án thứ hai của bạn đáp ứng với một domain khác. Khi bạn hoàn thành, nó sẽ trông giống như sau:

server {     listen 80;     server_name secondsite.com www.secondsite.com;      location = /favicon.ico { access_log off; log_not_found off; }     location /static/ {         root /home/user/secondsite;     }      location / {         include         uwsgi_params;         uwsgi_pass      unix:/home/user/secondsite/secondsite.sock;     } } 

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

Tiếp theo, liên kết cả hai file cấu hình mới của bạn với folder sites-enabled của Nginx để kích hoạt chúng:

sudo ln -s /etc/nginx/sites-available/firstsite /etc/nginx/sites-enabled sudo ln -s /etc/nginx/sites-available/secondsite /etc/nginx/sites-enabled 

Kiểm tra cú pháp cấu hình bằng lệnh :

sudo service nginx configtest 

Nếu không phát hiện thấy lỗi cú pháp nào, bạn có thể khởi động lại dịch vụ Nginx của bạn để tải cấu hình mới:

sudo service nginx restart 

Nếu bạn nhớ trước đó, ta chưa bao giờ thực sự khởi động server uWSGI. Làm điều đó ngay bây giờ bằng lệnh :

sudo service uwsgi start 

Đến đây bạn có thể tiếp cận hai dự án của bạn bằng cách truy cập domain tương ứng của chúng. Cả giao diện công khai và quản trị sẽ hoạt động như mong đợi.

Kết luận

Trong hướng dẫn này, ta đã cài đặt hai dự án Django, mỗi dự án trong môi trường ảo của riêng chúng. Ta đã cấu hình uWSGI để phục vụ từng dự án một cách độc lập bằng cách sử dụng môi trường ảo được cấu hình cho từng dự án. Sau đó, ta cài đặt Nginx hoạt động như một Reverse Proxy để xử lý các kết nối của client và phục vụ đúng dự án tùy thuộc vào yêu cầu của khách hàng.

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 thiết lập uWSGI và Nginx để cung cấp các ứng dụng Python trên Ubuntu 14.04
2015-03-06
Cách nhắm mục tiêu người dùng của bạn với Nginx Analytics và Thử nghiệm A / B
2015-01-26
Cách cài đặt WordPress với Nginx trên server FreeBSD 10.1
2015-01-14
Cách cài đặt Nginx, MySQL và PHP (FEMP) trên FreeBSD 10.1
2015-01-14
Hiểu và triển khai FastCGI Proxying trong Nginx
2014-12-08
Hiểu về Nginx HTTP Proxying, Cân bằng tải, Bộ đệm và Bộ nhớ đệm
2014-11-25
Hiểu cấu trúc tệp cấu hình và khung cấu hình Nginx
2014-11-19
Cách cài đặt MoinMoin với Nginx trên Ubuntu 14.04
2014-11-19
Hiểu server Nginx và các thuật toán lựa chọn khối vị trí
2014-11-17
Cách thiết lập server block Nginx trên CentOS 7
2014-11-05