Thứ sáu, 20/09/2013 | 00:00 GMT+7

Cách triển khai ứng dụng Django cục bộ lên VPS


Yêu cầu


Hướng dẫn này giả định bạn đã cài đặt server riêng ảo với hệ điều hành bạn chọn (Debian 7 đã được sử dụng cho hướng dẫn này; Ubuntu cũng sẽ hoạt động). Nếu bạn chưa làm như vậy, bạn có thể làm theo hướng dẫn này. Trước khi bắt đầu, hãy đảm bảo server cloud của bạn được cấu hình đúng để lưu trữ các ứng dụng Django với server database , web server và virtualenv đã được cài đặt. Nếu bạn chưa thực hiện việc này, vui lòng làm theo các bước 1 - 6 về cài đặt server cho Django .

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


Trước khi làm bất cứ điều gì, bạn nên đảm bảo tất cả các gói của bạn được quản lý thông qua apt, hoặc bất cứ thứ gì mà trình quản lý gói bạn chọn, đều được cập nhật. Bạn có thể thực hiện việc này bằng cách kết nối với VPS 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 này 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 Virtualenv của bạn


Nếu bạn đã hoàn thành các yêu cầu , điều này đã được cài đặt và bạn có thể bỏ qua bước này.

Bây giờ ta cần cài đặt virtualenv nơi các file dự án và gói Python của ta sẽ hoạt động. Nếu bạn không sử dụng virtualenv, thì chỉ cần tạo folder nơi dự án Django của bạn sẽ hoạt động và chuyển sang bước ba.

Để tạo virtualenv của bạn, hãy chạy lệnh sau. Hãy nhớ thay thế đường dẫn bằng đường dẫn mong muốn của dự án dự án của bạn trên server riêng ảo:

virtualenv /opt/myproject

Đến đây bạn đã cài đặt virtualenv của bạn , bạn có thể kích hoạt virtualenv của bạn và cài đặt Django và bất kỳ gói Python nào khác mà bạn có thể cần bằng pip. Dưới đây là ví dụ về cách kích hoạt virtualenv của bạn và sử dụng pip để cài đặt Django:

source /opt/myproject/bin/activate
pip install django

Bây giờ ta đã sẵn sàng để tạo database cho dự án của bạn !

Bước ba: Tạo database


Hướng dẫn này giả sử bạn sử dụng PostgreSQL làm server database của bạn . Nếu không, bạn cần xem tài liệu về cách tạo database cho server database mà bạn chọn.

Để tạo database với PostgreSQL, hãy 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 vậy, hãy chạy lệnh này để tạo database của bạn, đảm bảo thay thế “mydb” bằng tên database mong muốn của bạn:

createdb mydb

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 sáu dấu nhắc . Đầ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 ba dấu nhắc cuối cùng, chỉ cần nhập “n” và nhấn “enter”. Điều này đả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 họ quyền truy cập 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 sau:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

Đến đây bạn được cài đặt với một database và một user để truy cập vào database đó. Tiếp theo, ta có thể làm việc trên việc cấu hình web server của bạn để phục vụ các file tĩnh của ta !

Bước 4: Cấu hình VPS của bạn

Ta cần tạo một file cấu hình mới cho trang web của bạn . Hướng dẫn này giả định bạn đang sử dụng NGINX làm server cloud của bạn . Nếu không đúng như vậy, bạn cần phải kiểm tra tài liệu cho web server mà bạn đã chọn để hoàn thành bước này.

Đối với NGINX, hãy chạy lệnh sau để tạo và chỉnh sửa file cấu hình web server của trang web , đảm bảo thay thế “myproject” ở cuối lệnh bằng tên dự án của bạn:

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

Bây giờ hãy nhập các dòng mã sau vào editor đang mở:

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, đây là nơi ta sẽ thông báo cho Gunicorn (hoặc server ứng dụng của bạn mà bạn chọn) để 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

Bây giờ khởi động lại NGINX bằng lệnh dưới đây và bạn sẽ được cài đặt :

sudo service nginx restart

Bạn có thể gặp lỗi sau khi khởi động lại:

server_names_hash, you should increase server_names_hash_bucket_size: 32

Bạn có thể giải quyết vấn đề này bằng cách chỉnh sửa '/etc/nginx/nginx.conf'

Mở file và bỏ comment sau:

server_names_hash_bucket_size 64;

Bây giờ, hãy tải các file dự án của ta lên thành server của ta !

Bước 5: Di chuyển Dự án Django local sang Server


Ta có một số tùy chọn ở đây: FTP, SFTP, SCP, Git, SVN, v.v. Ta sẽ sử dụng Git để chuyển các file dự án local của bạn sang server riêng ảo của bạn.

Tìm folder nơi bạn cài đặt virtualenv hoặc nơi bạn muốn dự án của bạn tồn tại. Thay đổi vào folder này bằng lệnh sau:

cd /opt/myproject

Khi đó, hãy tạo một folder mới để chứa các file dự án của bạn. Bạn có thể thực hiện việc này bằng lệnh sau:

mkdir myproject

Có vẻ thừa khi có hai folder trùng tên; tuy nhiên, nó làm cho tên virtualenv của bạn và tên dự án giống nhau.

Bây giờ thay đổi vào folder mới bằng lệnh sau:

cd myproject

Nếu dự án của bạn đã có trong repo Git, chỉ cần đảm bảo mã của bạn đã được commit và đẩy. Bạn có thể kiểm tra xem đây có phải là trường hợp không bằng cách chạy lệnh sau local trên máy tính của bạn trong terminal (đối với Mac) hoặc dấu nhắc lệnh (đối với PC):

git status

Nếu bạn không thấy file nào trong kết quả thì bạn nên thực hiện. Bây giờ SSH vào server của bạn và cài đặt Git bằng lệnh sau:

sudo apt-get install git

Đảm bảo trả lời có cho bất kỳ dấu nhắc nào bằng lệnh “y” và nhấn “enter”. Khi Git được cài đặt, hãy sử dụng nó để kéo các file dự án của bạn vào folder dự án của bạn bằng lệnh sau:

git clone https://webaddressforyourrepo.com/path/to/repo .

Nếu bạn sử dụng Github hoặc Bitbucket cho lưu trữ Git, bạn có thể sử dụng nút sao chép để lấy lệnh này. Hãy chắc chắn thêm “.” cuối cùng. Nếu ta không làm điều này, thì Git sẽ tạo một folder với tên repo bên trong folder dự án của bạn, mà bạn không muốn.

Nếu bạn không sử dụng Git thì hãy sử dụng FTP hoặc một giao thức truyền khác để chuyển các file của bạn vào folder dự án được tạo trong các bước trên.

Bây giờ tất cả những gì còn lại là cài đặt server ứng dụng của bạn!

Bước 6: Cài đặt và cấu hình server ứng dụng


Nếu bạn đã hoàn thành các yêu cầu , điều này đã được cài đặt và bạn có thể bỏ qua bước này.

Bây giờ ta cần cài đặt server ứng dụng của bạn và đảm bảo nó lắng nghe trên cổng 8001 các yêu cầu đối với ứng dụng Django của ta . Ta sẽ sử dụng Gunicorn trong ví dụ này. Để cài đặt Gunicorn, trước tiên hãy kích hoạt virtualenv của bạn:

source /opt/myproject/bin/activate

Khi virtualenv của bạn đang hoạt động, hãy chạy lệnh sau để cài đặt Gunicorn:

pip install gunicorn

Bây giờ Gunicorn đã được cài đặt, hãy ràng buộc các yêu cầu cho domain hoặc ip của bạn với cổng 8001:

gunicorn_django --bind yourdomainorip.com:8001

Đến đây bạn có thể nhấn “ctrl + z” và sau đó nhập “bg” để làm nền cho quá trình (nếu bạn muốn). Bạn có thể tìm thấy cấu hình và cài đặt nâng cao hơn của Gunicorn trong bước chín của hướng dẫn này .

Đến đây bạn đã sẵn sàng cho bước cuối cùng!

Bước 7: Cấu hình ứng dụng của bạn


Bước cuối cùng là cấu hình ứng dụng của bạn để production . Tất cả những thay đổi ta cần thực hiện đều có trong file “settings.py” cho dự án Django của bạn. Mở file này bằng lệnh sau:

sudo nano /opt/myproject/myproject/settings.py

Đường dẫn đến file cài đặt của bạn có thể khác nhau tùy thuộc vào cách dự án của bạn được cài đặt . Sửa đổi đường dẫn trong lệnh trên cho phù hợp.

Khi file cài đặt của bạn đang mở, hãy thay đổi cài đặt GỠ LỖI thành Sai :

DEBUG = False

Điều này sẽ làm cho lỗi sẽ hiển thị cho user dưới dạng trang lỗi 404 hoặc 500, thay vì cung cấp cho họ dấu vết ngăn xếp với thông tin gỡ lỗi.

Bây giờ, hãy chỉnh sửa cài đặt database của bạn để trông giống như sau, sử dụng tên database , user và password của bạn thay vì những cái được hiển thị bên dưới:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.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': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

Bây giờ hãy chỉnh sửa cài đặt file tĩnh của bạn:

STATIC_ROOT = '/opt/myproject/static/'

STATIC_URL = '/static/'

Lưu và thoát khỏi file . Bây giờ tất cả những gì ta cần làm là thu thập các file tĩnh của bạn . Thay đổi folder chứa tập lệnh “management.py” của bạn và chạy lệnh sau:

python manage.py collectstatic

Lệnh này sẽ thu thập tất cả các file tĩnh vào folder mà ta đặt trong file settings.py ở trên.

Và đó là nó! Bây giờ, bạn đã triển khai ứng dụng của bạn ở dạng production và sẵn sàng hoạt động.


Tags:

Các tin liên quan