Cách cung cấp các ứng dụng Django với uWSGI và Nginx 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 . 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 CentOS 7 để 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 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 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. Để có được pip , trước tiên  ta  cần kích hoạt repository  EPEL.  Ta  có thể làm điều này một cách dễ dàng  bằng lệnh :
sudo yum install epel-release Sau khi EPEL được bật,  ta  có thể cài đặt pip  bằng lệnh :
sudo yum install python-pip  Đến đây bạn  đã cài đặt pip ,  ta  có thể cài đặt virtualenv và virtualenvwrapper  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.
Để thêm các dòng thích hợp vào tập lệnh khởi tạo shell của bạn, bạn cần chạy các lệnh sau:
echo "export WORKON_HOME=~/Env" >> ~/.bashrc echo "source /usr/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:
 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ị: 
 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ị: 
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 và 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ũng cần một trình biên dịch.  Ta  có thể nhận được cả hai điều này bằng cách sử dụng yum :
sudo yum install python-devel gcc 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. Đặt một biến khác với tên  user  bình thường của bạn sở hữu các file  dự án. Thêm một biến được gọi là base sử dụng tên  user  của bạn để  cài đặt  đường dẫn đến folder  chính của  user :
[uwsgi] project = firstsite username = user base = /home/%(username) 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 username = user base = /home/%(username)  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 username = user base = /home/%(username)  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 , đây 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ần đặt  user  sẽ chạy quy trình.  Ta  cũng sẽ sửa đổi các quyền và quyền sở hữu của socket vì  ta  sẽ cấp cho  web server  quyền ghi. Bản thân  socket  sẽ được đặt trong folder  /run/uwsgi ( ta  sẽ tạo folder  này trong một chút) nơi cả uWSGI và Nginx đều có thể truy cập.  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 username = user base = /home/%(username)  chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application  master = true processes = 5  uid = %(username) socket = /run/uwsgi/%(project).sock chown-socket = %(username):nginx chmod-socket = 660 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 = firstsite username = user base = /home/%(username)  chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application  master = true processes = 5  uid = %(username) socket = /run/uwsgi/%(project).sock chown-socket = %(username):nginx chmod-socket = 660 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 file đơn vị hệ thố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 file đơn vị Systemd để tự động khởi động uWSGI khi khởi động.
  Ta  sẽ tạo file  đơn vị trong folder  /etc/systemd/system nơi lưu giữ file  đơn vị do  user  tạo.  Ta  sẽ gọi file  của  ta  là uwsgi.service :
sudo nano /etc/systemd/system/uwsgi.service Bắt đầu với phần [Unit] , được sử dụng để chỉ định metadata .  Ta  chỉ cần đặt một mô tả về dịch vụ của  ta  ở đây:
[Unit] Description=uWSGI Emperor service Tiếp theo,  ta  sẽ mở phần [Service] .  Ta  sẽ sử dụng chỉ thị ExecStartPre để  cài đặt  các phần  ta  cần để chạy  server   của bạn . Điều này sẽ  đảm bảo  folder  /run/uwsgi được tạo và  user  bình thường của  ta  sở hữu nó với  group  Nginx là chủ sở hữu  group . Cả mkdir với cờ -p và lệnh chown trả về thành công ngay cả khi chúng đã tồn tại. Đây là những gì  ta  muốn.
 Đối với lệnh bắt đầu thực tế, được chỉ định bởi chỉ thị ExecStart ,  ta  sẽ trỏ đến file  thực thi uwsgi .  Ta  sẽ yêu cầu nó chạy ở “Chế độ hoàng đế”, cho phép nó quản lý nhiều ứng dụng bằng các file  mà nó tìm thấy trong /etc/uwsgi/sites .  Ta  cũng sẽ thêm các phần cần thiết để Systemd quản lý chính xác quy trình. Chúng được lấy từ tài liệu uWSGI ở đây :
[Unit] Description=uWSGI Emperor service  [Service] ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown user:nginx /run/uwsgi' ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all Bây giờ, tất cả những gì  ta  cần làm là thêm phần [Install] . Điều này cho phép  ta  chỉ định khi nào dịch vụ sẽ được tự động khởi động.  Ta  sẽ gắn dịch vụ  của bạn  với trạng thái hệ thống nhiều  user .  Khi  nào hệ thống được  cài đặt  cho nhiều  user  (điều kiện hoạt động bình thường), dịch vụ của  ta  sẽ được kích hoạt:
[Unit] Description=uWSGI Emperor service  [Service] ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown user:nginx /run/uwsgi' ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all  [Install] WantedBy=multi-user.target Khi bạn hoàn thành việc này, hãy lưu file .
  Ta  sẽ không thể bắt đầu dịch vụ thành công tại thời điểm này vì nó phụ thuộc vào  user  nginx có sẵn.  Ta  sẽ phải đợi để bắt đầu dịch vụ uWSGI cho đến sau khi Nginx được cài đặt.
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  và cài đặt bằng yum :
sudo yum install nginx Khi Nginx được cài đặt, ta có thể tiếp tục và chỉnh sửa file cấu hình chính:
sudo nano /etc/nginx/nginx.conf Trong file này, bên cạnh khối server hiện có, ta sẽ tạo một khối server bổ sung cho mỗi trang web của ta :
http {      . . .      include /etc/nginx/conf.d/*.conf;      server {     }      server {     }      server {         listen 80 default_server;         server_name localhost;          . . . Các khối mà ta đã tạo sẽ giữ cấu hình cho các trang web uWSGI của ta . Ta sẽ trình bày các chỉ thị mà ta cần trong khối server đầu tiên ngay bây giờ.
Đầu tiên, ta cần cho khối server biết số cổng và domain mà nó sẽ phản hồi. Ta sẽ giả định bạn có một domain cho mỗi trang web của bạn :
server {     listen 80;     server_name firstsite.com www.firstsite.com; } Tiếp theo, ta sẽ nói với Nginx rằng ta không cần phải lo lắng về việc thiếu biểu tượng yêu thích. Sau đó, ta sẽ chỉ định folder nơi nội dung tĩnh của trang web đầu tiên của ta được thu thập khi các file này được yêu cầu. Nginx có thể giao chúng thẳng cho khách hàng từ folder đó:
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;     } } Tiếp theo,  ta  tạo một khối vị trí nhận tất cả sẽ chuyển thẳng tất cả các truy vấn bổ sung đến uWSGI.  Ta  sẽ bao gồm các tham số uwsgi được tìm thấy trong file  /etc/nginx/uwsgi_params và chuyển lưu lượng truy cập vào socket mà  server  uWSGI  cài đặt :
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:/run/uwsgi/firstsite.sock;     } } Như vậy, khối server đầu tiên của ta đã hoàn tất.
Khối server thứ hai cho trang web khác của ta sẽ gần như giống nhau. Bạn có thể copy paste khối server mà ta vừa tạo để bắt đầu. Bạn cần phải sửa đổi domain mà trang web sẽ phản hồi, vị trí của các file tĩnh của trang web và file socket của trang web:
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:/run/uwsgi/secondsite.sock;     } } Khi bạn hoàn thành bước này, hãy lưu file .
Kiểm tra cú pháp của file Nginx đảm bảo bạn không mắc bất kỳ lỗi nào:
sudo nginx -t Nếu không có lỗi nào được báo cáo, file của ta đang ở trong tình trạng tốt.
Ta có một nhiệm vụ bổ sung mà ta phải hoàn thành để làm cho các trang web của ta hoạt động bình thường. Vì Nginx đang xử lý trực tiếp các file tĩnh nên nó cần quyền truy cập vào các folder thích hợp. Ta cần cấp cho nó quyền thực thi cho folder chính của ta , đó là bit quyền duy nhất mà nó thiếu.
Cách an toàn nhất để làm điều này là thêm user Nginx vào group user của ta . Sau đó, ta có thể thêm quyền thực thi cho chủ sở hữu group của folder chính của ta , chỉ cấp cho Nginx đủ quyền truy cập để phân phát các file :
sudo usermod -a -G user nginx chmod 710 /home/user Bây giờ, ta có thể khởi động server Nginx và quy trình uWSGI:
sudo systemctl start nginx sudo systemctl start uwsgi Đế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.
Nếu điều này diễn ra tốt đẹp, bạn có thể cho phép cả hai dịch vụ tự động khởi động khi server khởi động bằng lệnh :
sudo systemctl enable nginx sudo systemctl enable uwsgi 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.
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 CentOS 72015-03-13
Cách cung cấp các ứng dụng Django với uWSGI và Nginx trên Ubuntu 14.04
2015-03-11
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 Nginx, MySQL và PHP (FEMP) trên FreeBSD 10.1
2015-01-14
Cách cài đặt WordPress với Nginx trên server 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
Cách cài đặt MoinMoin với Nginx trên Ubuntu 14.04
2014-11-19
Hiểu cấu trúc tệp cấu hình và khung cấu hình Nginx
2014-11-19
 

