Thứ tư, 14/08/2013 | 00:00 GMT+7

Cách cài đặt và cấu hình Django với Postgres, Nginx và Gunicorn


Yêu cầu


Hướng dẫn này giả định bạn đã cài đặt server (VPS) của bạn với Debian 7 hoặc một bản phân phối tương tự của Linux (chẳng hạn như Ubuntu). Nếu bạn chưa làm được điều này, hãy làm theo hướng dẫn cài đặt server tại đây .

Để thuận tiện, tôi đã chia hướng dẫn này thành hai phần. Phần đầu tiên (bước 1 - 6) chỉ bao gồm cài đặt. Nếu bạn là user Django nâng cao hơn, người chỉ cần trợ giúp cài đặt mọi thứ, bạn có thể dừng lại ở bước 6. Nếu bạn đã cài đặt mọi thứ và chỉ muốn biết cách cấu hình mọi thứ, hãy chuyển sang bước 7. Nếu bạn cảm thấy thích cần trợ giúp từ đầu đến cuối, sau đó chỉ cần thực hiện các bước theo thứ tự và bạn sẽ không gặp vấn đề gì. Bắt đầu nào!

Bước một: Cập nhật gói


Trước khi làm bất cứ điều gì, ta cần đảm bảo tất cả các gói được cài đặt trên VPS của ta đều được cập nhật. Để thực hiện việc này, hãy kết nối với VPS mong muốn của bạn qua SSH và chạy các lệnh sau:

sudo apt-get update

sudo apt-get upgrade

Lệnh đầu tiên download bất kỳ bản cập nhật nào cho các gói được quản lý thông qua apt-get. Lệnh thứ hai cài đặt các bản cập nhật đã được download . Sau khi chạy các lệnh trên, nếu có các bản cập nhật để cài đặt, bạn có thể sẽ được yêu cầu cho biết bạn có muốn cài đặt các bản cập nhật hay không. Nếu điều này xảy ra, chỉ cần nhập “y” và sau đó nhấn “enter” khi được yêu cầu .

Bước hai: Cài đặt và tạo Virtualenv


Cài đặt virtualenv rất đơn giản. Chỉ cần chạy lệnh dưới đây:

sudo apt-get install python-virtualenv

Thats tất cả để có nó! Bây giờ, hãy tạo virtualenv của ta để ta có thể cài đặt Django và các gói Python khác bên trong nó:

sudo virtualenv /opt/myenv

Lưu ý một folder mới “myenv” đã được tạo trong folder “/ opt”. Đây là nơi virtualenv của ta sẽ sống. Đảm bảo thay thế “/ opt / myenv” bằng đường dẫn đến nơi bạn muốn cài đặt virtualenv của bạn . Tôi thường đưa env của bạn vào / opt, nhưng đây là tùy chọn hoàn toàn. Một số người tạo một folder có tên là “webapps” ở folder root của VPS. Chọn bất kỳ phương pháp nào có ý nghĩa nhất đối với bạn.

Bước 3: Cài đặt Django


Bây giờ ta cần kích hoạt virtualenv của bạn để khi ta cài đặt các gói Python, chúng sẽ cài đặt vào virtualenv của ta . Đây là cách bạn kích hoạt virtualenv của bạn :

source /opt/myenv/bin/activate

Đến đây bạn sẽ thấy rằng “(myenv)” đã được thêm vào đầu dấu nhắc terminal của bạn. Điều này sẽ giúp bạn biết khi nào virtualenv của bạn đang hoạt động và virtualenv nào đang hoạt động nếu bạn có nhiều virtualenv trên VPS.

Với virtualenv của bạn đang hoạt động, bây giờ ta có thể cài đặt Django. Để làm điều này, ta sẽ sử dụng pip, một trình quản lý gói Python giống như easy_install. Đây là lệnh bạn sẽ chạy:

pip install django

Đến đây bạn đã cài đặt Django trong virtualenv của bạn ! Bây giờ ta hãy khởi động server database của ta .

Bước 4: Cài đặt PostgreSQL


Hầu hết user Django thích sử dụng PostgreSQL làm server database của họ. Nó mạnh hơn nhiều so với MySQL và Django ORM hoạt động với PostgreSQL tốt hơn nhiều so với MySQL, MSSQL hoặc những thứ khác.

Vì ta không cần virtualenv hoạt động cho phần này, hãy chạy lệnh sau để hủy kích hoạt:

deactivate

Thao tác này sẽ luôn hủy kích hoạt bất kỳ virtualenv nào hiện đang hoạt động. Bây giờ ta cần cài đặt các phụ thuộc để PostgreSQL hoạt động với Django bằng lệnh này:

sudo apt-get install libpq-dev python-dev

Đến đây bạn đã hoàn thành việc này, hãy cài đặt PostgreSQL như sau:

sudo apt-get install postgresql postgresql-contrib

PostgreSQL hiện đã được cài đặt trên máy của bạn và sẵn sàng tung ra.

Bước 5: Cài đặt NGINX


NGINX là một web server cực kỳ nhanh và nhẹ. Ta sẽ sử dụng nó để cung cấp các file tĩnh cho ứng dụng Django của ta . Để cài đặt nó, chỉ cần chạy lệnh sau:

sudo apt-get install nginx

Lưu ý bạn vẫn cần khởi động NGINX, nhưng ta sẽ xem xét vấn đề này khi ta bắt đầu cấu hình VPS của bạn .

Bước 6: Cài đặt Gunicorn


Gunicorn là một Server HTTP WSGI Python rất mạnh. Vì nó là một gói Python, trước tiên ta cần kích hoạt virtualenv của bạn để cài đặt nó. Đây là cách ta làm điều đó:

source /opt/myenv/bin/activate

Đảm bảo rằng bạn thấy “myenv” được thêm vào ở đầu dấu nhắc terminal của bạn. Với virtualenv của bạn hiện đang hoạt động, hãy chạy lệnh sau:

pip install gunicorn

Gunicorn hiện đã được cài đặt trong virtualenv của bạn.

Nếu tất cả những gì bạn muốn là cài đặt mọi thứ, hãy dừng lại ở đây. Nếu không, vui lòng tiếp tục để biết hướng dẫn về cách cấu hình mọi thứ hoạt động cùng nhau và giúp những người khác trên web có thể truy cập ứng dụng của bạn.

Bước 7: Cấu hình PostgreSQL


Hãy bắt đầu cấu hình của ta bằng cách làm việc với PostgreSQL. Với PostgreSQL, ta cần tạo database , tạo user và cấp cho user mà ta đã tạo quyền truy cập vào database mà ta đã tạo. Bắt đầu bằng cách chạy lệnh sau:

sudo su - postgres

Dấu nhắc terminal của bạn bây giờ sẽ nói “postgres @ yourerver”. Nếu đúng như vậy, hãy chạy lệnh này để tạo database của bạn:

createdb mydb

Cơ sở dữ liệu hiện đã được tạo và được đặt tên là “mydb” nếu bạn không thay đổi lệnh. Bạn có thể đặt tên cho database của bạn bạn muốn . Bây giờ, hãy tạo user database của bạn bằng lệnh sau:

createuser -P

Đến đây bạn sẽ được đáp ứng với một loạt 6 dấu nhắc . Người đầu tiên sẽ hỏi bạn tên của user mới. Sử dụng bất kỳ tên nào bạn muốn. Hai dấu nhắc tiếp theo dành cho password của bạn và xác nhận password cho user mới. Đối với 3 dấu nhắc cuối cùng, chỉ cần nhập “n” và nhấn “enter”. Điều này chỉ đảm bảo user mới của bạn chỉ có quyền truy cập vào những gì bạn cấp cho nó và không có gì khác. Bây giờ kích hoạt giao diện dòng lệnh PostgreSQL như sau:

psql

Cuối cùng, cấp cho user mới này quyền truy cập vào database mới của bạn bằng lệnh này:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

Đến đây bạn có một database PostgreSQL và một user để truy cập vào database đó. Bây giờ ta có thể cài đặt Django và cài đặt nó để sử dụng database mới của ta .

Bước 8: Tạo dự án Django


Để tiến xa hơn, ta cần một dự án Django để thử nghiệm. Điều này sẽ cho phép ta xem liệu những gì ta đang làm có hiệu quả hay không. Thay đổi các folder thành folder virtualenv của bạn (trong trường hợp của tôi là / opt / myenv) như sau:

cd /opt/myenv

Bây giờ hãy đảm bảo virtualenv của bạn đang hoạt động.Nếu bạn không chắc chắn thì chỉ cần chạy lệnh sau đảm bảo bạn đã được kích hoạt:

source /opt/myenv/bin/activate

Với virtualenv của bạn hiện đang hoạt động, hãy chạy lệnh sau để bắt đầu một dự án Django mới:

django-admin.py startproject myproject

Bạn sẽ thấy một folder mới có tên “myproject” bên trong folder virtualenv của bạn. Đây là nơi chứa các file dự án Django mới của ta .

Để Django có thể nói chuyện với database của ta , ta cần cài đặt phần backend cho PostgreSQL. Đảm bảo virtualenv của bạn đang hoạt động và chạy lệnh sau để thực hiện việc này:

pip install psycopg2

Thay đổi các folder thành folder “myproject” mới và sau đó vào folder con của nó, còn gọi là “myproject” như sau:

cd /opt/myenv/myproject/myproject

Chỉnh sửa file settings.py bằng editor bạn chọn:

nano settings.py

Tìm cài đặt database và chỉnh sửa chúng để trông giống như sau:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'mydb',                      # Or path to database file if using sqlite3.
            # The following settings are not used with sqlite3:
            'USER': 'myuser',
            'PASSWORD': 'password',
            'HOST': 'localhost',                      # Empty for localhost through domain sockets or           '127.0.0.1' for localhost through TCP.
            'PORT': '',                      # Set to empty string for default.
        }
    }

Lưu và thoát khỏi file . Bây giờ di chuyển lên một folder để của bạn trong folder dự án Django chính của bạn (/ opt / myenv / myproject).

cd /opt/myenv/myproject

Kích hoạt virtualenv của bạn nếu bạn chưa kích hoạt lệnh sau:

source /opt/myenv/bin/activate

Với virtualenv của bạn đang hoạt động, hãy chạy lệnh sau để Django có thể thêm cấu hình ban đầu và các bảng khác vào database của bạn:

python manage.py syncdb

Bạn sẽ thấy một số kết quả mô tả bảng nào đã được cài đặt, sau đó là dấu nhắc hỏi bạn có muốn tạo một superuser hay không. Điều này là tùy chọn và phụ thuộc vào việc bạn sẽ sử dụng hệ thống xác thực của Django hay administrator Django.

Bước 9: Cấu hình Gunicorn


Cấu hình Gunicorn rất cụ thể cho nhu cầu ứng dụng của bạn. Tôi sẽ nói sơ qua về việc chạy Gunicorn ở đây với một số cài đặt khác nhau.

Đầu tiên, hãy chạy qua Gunicorn với cài đặt mặc định. Đây là lệnh để chỉ chạy Gunicorn mặc định:

gunicorn_django --bind yourdomainorip.com:8001

Đảm bảo thay thế “yourdomainorip.com” bằng domain của bạn hoặc địa chỉ IP của VPS nếu bạn muốn. Bây giờ, hãy truy cập trình duyệt web và truy cập yourdomainorip.com:8001 và xem những gì bạn nhận được. Bạn sẽ nhận được màn hình chào mừng Django.

Tuy nhiên, nếu bạn nhìn kỹ kết quả từ lệnh trên, bạn sẽ thấy chỉ có một nhân viên Gunicorn được khởi động. Điều gì sẽ xảy ra nếu bạn đang chạy một ứng dụng quy mô lớn trên một VPS lớn? Đừng sợ! Tất cả những gì ta cần làm là sửa đổi lệnh một chút như sau:

gunicorn_django --workers=3 --bind yourdomainorip.com:8001

Đến đây bạn sẽ nhận thấy rằng 3 công nhân đã được khởi động thay vì chỉ 1 công nhân. Bạn có thể thay đổi số này thành bất kỳ số nào phù hợp với nhu cầu của bạn.

Vì ta đã chạy lệnh khởi động Gunicorn dưới dạng root, nên Gunicorn hiện đang chạy dưới dạng root. Nếu bạn không muốn điều đó thì sao? , ta có thể thay đổi lệnh ở trên một chút để chứa:

gunicorn_django --workers=3 --user=nobody --bind yourdomainorip.com:8001

Nếu bạn muốn cài đặt nhiều tùy chọn hơn cho Gunicorn, thì cách tốt nhất là cài đặt file cấu hình mà bạn có thể gọi khi chạy Gunicorn. Điều này sẽ dẫn đến một lệnh Gunicorn ngắn hơn và dễ đọc / cấu hình hơn nhiều.

Bạn có thể đặt file cấu hình cho gunicorn ở bất kỳ đâu bạn muốn. Để đơn giản, ta sẽ đặt nó trong folder virtualenv của ta . Điều hướng đến folder virtualenv của bạn như sau:

cd /opt/myenv

Bây giờ hãy mở file cấu hình của bạn bằng editor bạn muốn (nano được sử dụng trong ví dụ bên dưới):

sudo nano gunicorn_config.py

Thêm các nội dung sau vào file :

    command = '/opt/myenv/bin/gunicorn'
    pythonpath = '/opt/myenv/myproject'
    bind = '127.0.0.1:8001'
    workers = 3
    user = nobody

Lưu và thoát khỏi file . Những gì các tùy chọn này làm là đặt đường dẫn đến file binary gunicorn, thêm folder dự án của bạn vào đường dẫn Python, đặt domain và cổng để ràng buộc Gunicorn, đặt số lượng nhân viên gunicorn và đặt user mà Gunicorn sẽ chạy.

Để chạy server , lần này ta cần lệnh dài hơn một chút. Nhập lệnh sau vào dấu nhắc của bạn:

/opt/myenv/bin/gunicorn -c /opt/myenv/gunicorn_config.py myproject.wsgi

Bạn sẽ nhận thấy rằng trong lệnh trên, ta chuyển cờ “-c”. Điều này cho gunicorn biết rằng ta có một file cấu hình mà ta muốn sử dụng, file này ta chuyển vào chỉ sau cờ “-c”. Cuối cùng, ta chuyển tham chiếu ký hiệu có dấu chấm Python đến file WSGI của ta để Gunicorn biết file WSGI của ta ở đâu.

Chạy Gunicorn theo cách này yêu cầu bạn chạy Gunicorn trong phiên màn hình của chính nó (nếu bạn đã quen với việc sử dụng màn hình) hoặc bạn làm nền cho quá trình bằng cách nhấn “ctrl + z” rồi nhập “bg” và “enter” tất cả ngay sau khi chạy lệnh Gunicorn. Điều này sẽ làm nền cho quá trình để nó tiếp tục chạy ngay cả sau khi phiên hiện tại của bạn đã đóng. Điều này cũng đặt ra vấn đề cần phải khởi động hoặc khởi động lại Gunicorn theo cách thủ công nếu VPS của bạn được khởi động lại hoặc nó gặp sự cố vì lý do nào đó. Để giải quyết vấn đề này, hầu hết mọi người sử dụng supervisord để quản lý Gunicorn và khởi động / khởi động lại nó khi cần thiết. Cài đặt và cấu hình supervisord đã được đề cập trong một bài viết khác có thể tìm thấy ở đây .

Cuối cùng, đây không phải là danh sách đầy đủ các tùy chọn cấu hình cho Gunicorn. Vui lòng đọc tài liệu Gunicorn tại gunicorn.org để biết thêm về chủ đề này.

Bước 10: Cấu hình NGINX


Trước khi ta đi quá xa, trước tiên hãy bắt đầu NGINX như sau:

sudo service nginx start

Vì ta chỉ cài đặt NGINX để xử lý các file tĩnh nên trước tiên, ta cần quyết định nơi các file tĩnh của ta sẽ được lưu trữ. Mở file settings.py cho dự án Django của bạn và chỉnh sửa dòng STATIC_ROOT để trông giống như sau:

    STATIC_ROOT = "/opt/myenv/static/"

Con đường này có thể ở bất cứ đâu bạn muốn. Nhưng để làm sạch, tôi thường đặt nó ngay bên ngoài folder dự án Django của tôi, nhưng bên trong folder virtualenv của tôi.

Đến đây bạn đã cài đặt nơi chứa các file tĩnh của bạn , hãy cấu hình NGINX để xử lý các file đó. Mở file cấu hình NGINX mới bằng lệnh sau (bạn có thể thay thế “nano” bằng editor mà bạn chọn):

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

Bạn có thể đặt tên file bạn muốn , nhưng tiêu chuẩn thường là đặt tên file có liên quan đến trang web mà bạn đang cấu hình . Bây giờ thêm phần sau vào file :

    server {
        server_name yourdomainorip.com;

        access_log off;

        location /static/ {
            alias /opt/myenv/static/;
        }

        location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
    }

Lưu và thoát khỏi file . Cấu hình trên đã đặt NGINX để phục vụ bất kỳ thứ gì được yêu cầu tại yourdomainorip.com/static/ từ folder tĩnh mà ta đặt cho dự án Django của bạn . Mọi thứ được yêu cầu tại yourdomainorip.com sẽ ủy quyền cho localhost trên cổng 8001, đó là nơi ta đã yêu cầu Gunicorn chạy. Các dòng khác đảm bảo tên server và địa chỉ IP của yêu cầu được chuyển đến Gunicorn. Nếu không có điều này, địa chỉ IP của mọi yêu cầu sẽ trở thành 127.0.0.1 và tên server chỉ là tên server VPS của bạn.

Bây giờ ta cần cài đặt một softlink trong folder / etc / nginx / sites-enable trỏ đến file cấu hình này. Đó là cách NGINX biết trang web này đang hoạt động. Thay đổi folder thành / etc / nginx / sites-enable như thế này:

cd /etc/nginx/sites-enabled

Khi đó, hãy chạy lệnh này:

sudo ln -s ../sites-available/myproject

Điều này sẽ tạo softlink mà ta cần để NGINX biết cách tôn trọng file cấu hình mới cho trang web của ta .

Ngoài ra, hãy xóa khối server nginx mặc định:

`sudo rm default '

Tuy nhiên, ta cần khởi động lại NGINX để nó biết tìm kiếm các thay đổi của ta . Để làm điều này, hãy chạy như sau:

sudo service nginx restart

Và đó là nó! Đến đây bạn đã cài đặt Django và làm việc với PostgreSQL và ứng dụng của bạn có thể truy cập web với NGINX cung cấp nội dung tĩnh và Gunicorn đóng role là server ứng dụng của bạn. Nếu có thắc mắc hay cần tư vấn thêm, hãy để lại trong phần comment .


Tags:

Các tin liên quan

Cách phát trực tuyến video với Nginx và JWPlayer trên CentOS 6
2013-05-31
Cách thiết lập xác thực HTTP với Nginx trên Ubuntu 12.10
2013-04-30
Cách cài đặt (LEMP) nginx, MySQL, PHP stack trên Arch Linux
2012-11-02
Cách thiết lập cân bằng tải Nginx
2012-08-27
Cách cấu hình Nginx làm Reverse Proxy cho Apache
2012-07-20
Cách cài đặt WordPress với nginx trên CentOS 6
2012-07-02
Cách cài đặt WordPress với nginx trên CentOS 6
2012-07-02
Cách tạo chứng chỉ SSL trên nginx cho CentOS 6
2012-06-08
Cách thiết lập server ảo nginx (server block) trên CentOS 6
2012-06-07
Cách cài đặt Rails và nginx với Passenger trên Ubuntu
2012-06-01