Cách cài đặt Django với PostgreSQL và Nginx trên Ubuntu 16.04

theanh

Administrator
Nhân viên
Django là một web framework mã nguồn mở miễn phí dựa trên Python. Đây là một web framework python cấp cao với mô hình kiến trúc MVT (Model-View-Template). Django được bảo trì bởi Django Software Foundation (DSF). Web framework Django rất nhanh, giúp các nhà phát triển xây dựng ứng dụng nhanh chóng (RAD).

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt web framework Django và cấu hình nó để sử dụng cơ sở dữ liệu PostgreSQL cho quá trình phát triển. Chúng ta sẽ chạy Nginx như một proxy ngược cho web framework Django vì lý do tốc độ và bảo mật. Django sẽ chạy dưới máy chủ Python WSGI HTTP 'Gunicorn', chúng ta sẽ quản lý và kiểm soát 'Gunicorn' với 'Supervisor' làm hệ thống kiểm soát quy trình.



Điều kiện tiên quyết
  • Ubuntu 16.04
  • Quyền root

Bước 1 - Cài đặt Django, Virtualenv và Gunicorn​

Tôi sẽ sử dụng python3 làm phiên bản Python mặc định cho hệ thống. Chúng ta sẽ cài đặt python3 và pip3 trên Ubuntu 16.04. Pip3 là một hệ thống quản lý gói để cài đặt và quản lý các gói phần mềm được viết bằng python.

Kết nối với máy chủ của bạn với tư cách là người dùng root trên thiết bị đầu cuối hoặc qua SSH (như tôi làm ở đây) và cập nhật kho lưu trữ Ubuntu:
Mã:
ssh [emailprotected]
sudo apt-get update
Cài đặt python3 và pip3 bằng lệnh apt này:
Mã:
sudo apt-get install python3-pip python3-dev
Tạo một liên kết tượng trưng mới cho lệnh pip3 để có thể sử dụng nó như "pip" thay vì "pip3" và nâng cấp it:
Mã:
ln -s /usr/bin/pip3 /usr/bin/pip
pip install --upgrade pip
Tiếp theo, cài đặt các gói python cần thiết bằng lệnh pip. Tôi sẽ cài đặt Django, Virtualenv và Gunicorn tại đây:
Mã:
pip install django virtualenv gunicorn



Bước 2 - Cài đặt và cấu hình PostgreSQL​

Chúng ta sẽ sử dụng PostgreSQL làm cơ sở dữ liệu cho dự án Django của mình. Cài đặt PostgreSQL bằng lệnh apt này.
Mã:
sudo apt-get install postgresql postgresql-contrib libpq-dev
Khi quá trình cài đặt hoàn tất, hãy cài đặt gói python mới có tên 'psycopg2' bằng pip. Đây là bộ điều hợp cơ sở dữ liệu python-postgreSQL.
Mã:
pip install psycopg2
Bây giờ hãy truy cập người dùng postgres và mở shell PostgreSQL bằng lệnh psql:
Mã:
su - postgres
psql
Đặt mật khẩu mới cho người dùng postgres bằng lệnh bên dưới:
Mã:
\password postgres
Nhập mật khẩu mới:
Tiếp theo, tạo một cơ sở dữ liệu mới và một người dùng/vai trò mới cho dự án django trong PostgreSQL. Tôi sẽ tạo các cơ sở dữ liệu mới có tên là 'django_db' với người dùng/vai trò 'python_dev'. Nhập lệnh bên dưới trên shell PostgreSQL.
Mã:
CREATE USER python_dev WITH PASSWORD 'aqwe123';
CREATE DATABASE django_db OWNER python_dev;
Xem danh sách cơ sở dữ liệu và vai trò:
Mã:
\list



Bước 3 - Bắt đầu Dự án Django mới​

Bắt đầu dự án Django đầu tiên với tên 'hello_django'. Chúng ta sẽ không sử dụng quyền root cho dự án, tôi sẽ sử dụng người dùng Linux thông thường 'natsume' cho dự án. Bạn có thể thoải mái sử dụng tên người dùng khác mô tả dự án của bạn.

Tạo người dùng mới​

Tạo người dùng Linux mới bằng lệnh bên dưới:
Mã:
useradd -m -s /bin/bash natsume
passwd natsume
-m = Tự động tạo thư mục home.
-s = Định nghĩa shell mặc định cho người dùng.

Tạo Virtualenv mới và cài đặt Django​

Đăng nhập vào người dùng natsume:
Mã:
su - natsume
Tạo môi trường ảo mới trong thư mục 'myproject' cho dự án Django của chúng ta với python3 là phiên bản python mặc định.
Mã:
mkdir myproject
virtualenv --python=python3 myproject/
Đi đến Thư mục 'myproject' và kích hoạt virtualenv.
Mã:
cd myproject/
source bin/activate
Tiếp theo, cài đặt Django, gunicorn và psycopg2 bằng lệnh pip trong môi trường đó.
Mã:
pip install django gunicorn psycopg2

Bắt đầu dự án mới với PostgreSQL​

Bắt đầu dự án Django 'hello_django' bằng lệnh django-admin bên dưới:
Mã:
django-admin startproject hello_django
Nó sẽ tạo một thư mục mới 'hello_django', hãy chuyển đến thư mục đó và chỉnh sửa tệp cấu hình 'setting.py' bằng vim.
Mã:
cd hello_django/
vim hello_django/settings.py
Thay đổi cơ sở dữ liệu thiết lập ở dòng 76 với cấu hình bên dưới:
Mã:
'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'django_db',
 'USER': 'python_dev',
 'PASSWORD': 'aqwe123',
 'HOST': 'localhost',
 'PORT': '',
Ở cuối tệp, cấu hình url tĩnh bằng cách thêm dòng cấu hình STATIC_ROOT bên dưới:
Mã:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Lưu và thoát.

Tiếp theo, di chuyển cơ sở dữ liệu sang cơ sở dữ liệu postgreSQL của chúng tôi và tạo một người dùng quản trị mới. Sau đó thu thập tất cả các tệp tĩnh vào thư mục tĩnh được tự động tạo khi chúng ta thực thi lệnh.
Mã:
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic


Đảm bảo không có lỗi và chạy thử máy chủ dự án django bằng lệnh runserver.
Mã:
python manage.py runserver 0.0.0.0:8080
Mở trình duyệt web của bạn và truy cập địa chỉ IP của máy chủ trên cổng 8080, trong trường hợp của tôi là http://192.168.1.115:8080. Bạn sẽ thấy trang mặc định của Django.



Nhấn Ctrl + c để thoát.


Bước 4 - Cấu hình Dự án Django với Gunicorn​

Gunicorn hay Green Unicorn là máy chủ HTTP WSGI python được phân nhánh từ dự án Ruby Unicorn. Nó hỗ trợ nhiều khuôn khổ web khác nhau và dễ cấu hình.

Đi đến thư mục 'myproject' và kích hoạt môi trường ảo cho thư mục home của người dùng natsume.
Mã:
cd ~/myproject/
source bin/activate
Tạo một tệp mới 'gunicorn_start' bên trong thư mục bin bằng vim:
Mã:
vim bin/gunicorn_start
Dán cấu hình bên dưới:
Mã:
#!/bin/bash
 
# Tên dự án
NAME="hello_django" 

# Thư mục dự án Django
DJANGODIR=/home/natsume/myproject/hello_django 

# Chạy gunicorn trên tệp socket
SOCKFILE=/home/natsume/myproject/hello_django/run/gunicorn.sock
 
# Gunicorn chạy dưới dạng người dùng và nhóm
NGƯỜI DÙNG=natsume
NHÓM=natsume
 
# Công nhân
SỐ_CÔNG NHÂN=3
 
#Cài đặt mô-đun
#thay thế hello_django bằng tên dự án của bạn
DJANGO_SETTINGS_MODULE=hello_django.settings
DJANGO_WSGI_MODULE=hello_django.wsgi
 
echo "Bắt đầu $NAME là `whoami`"
 
# Kích hoạt môi trường ảo
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
 
# Tạo thư mục chạy nếu nó không tồn tại
RUNDIR=$(dirname $SOCKFILE)
kiểm tra -d $RUNDIR || mkdir -p $RUNDIR
 
# Khởi động Django Unicorn
# Các chương trình được chạy dưới sự giám sát không được tự daemon hóa (không sử dụng --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
Lưu và thoát.

Làm cho tệp có thể thực thi được bằng lệnh chmod.
Mã:
chmod u+x bin/gunicorn_start

Bước 5 - Cài đặt và cấu hình Supervisor​

Supervisor là hệ thống kiểm soát quy trình dành cho hệ điều hành Linux. Nó cho phép bạn cấu hình, giám sát và kiểm soát một số tiến trình trên Linux. Supervisor dựa trên python, chúng ta có thể cài đặt nó từ kho lưu trữ python pypi bằng lệnh pip hoặc cài đặt nó từ kho lưu trữ ubuntu bằng lệnh apt.

Tôi sẽ cài đặt Supervisor bằng lệnh apt này:
Mã:
sudo apt-get install Supervisor
Supervisor có tệp cấu hình mặc định trong thư mục '/ect/supervisor/'. Vào thư mục đó và tạo cấu hình mới cho dự án Django để chúng ta có thể kiểm soát nó bằng trình giám sát.
Mã:
cd /etc/supervisor/conf.d/
vim hello-django.conf
Dán cấu hình Giám sát bên dưới:
Mã:
[program:hello_django]
command = sh /home/natsume/myproject/bin/gunicorn_start
user = natsume
stdout_logfile = /home/natsume/myproject/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
Lưu và thoát.

Tiếp theo, đăng nhập vào người dùng natsume và tạo một số thư mục cần thiết cho tệp socket gunicorn và tệp nhật ký giám sát.
Mã:
su - natsume

# Thư mục cho tệp sock gunicorn
mkdir -p myproject/hello_django/run/

# Thư mục và tệp cho tệp nhật ký giám sát
mkdir -p myproject/logs/
touch myproject/logs/gunicorn_supervisor.log
Quay lại người dùng gốc bằng lệnh "exit" và khởi động Giám sát:
Mã:
exit
systemctl start Supervisor
Kiểm tra trạng thái và nhật ký của quy trình:
Mã:
supervisorctl
tail -f hello_django



Bước 6 - Cài đặt và cấu hình Nginx cho Dự án Django​

Trong bước này, chúng ta sẽ cài đặt Nginx và cấu hình nó như một proxy ngược cho dự án Django của chúng ta.

Cài đặt Nginx từ kho lưu trữ Ubuntu:
Mã:
sudo apt-get install nginx
Đi tới thư mục cấu hình máy chủ ảo Nginx và tạo một tệp máy chủ ảo hello_django:
Mã:
cd /etc/nginx/sites-available/
vim hello_django
Dán cấu hình bên dưới:
Mã:
# Django đang chạy với tệp Gunicorn Sock
upstream hello_django_project {
 server unix:/home/natsume/myproject/hello_django/run/gunicorn.sock fail_timeout=0;
}
 
server {
 
 listen 80;
 server_name www.django-nginx.com;
 
 client_max_body_size 4G;
 
 access_log /home/natsume/myproject/logs/nginx-access.log;
 error_log /home/natsume/myproject/logs/nginx-error.log;
 
 location /static/ {
 alias /home/natsume/myproject/hello_django/static/;
 }
 
 location /media/ {
 alias /home/natsume/myproject/hello_django/media/;
 }
 
 location / {
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header Host $http_host;
 proxy_redirect off;
 
 # Hãy thử phục vụ các tệp tĩnh từ nginx, không có ích gì khi tạo một
 # máy chủ *ứng dụng* như Unicorn/Rainbows! phục vụ các tệp tĩnh.
 if (!-f $request_filename) {
 proxy_pass http://hello_django_project;
 break;
 }
 
 
# Error pages
 error_page 500 502 503 504 /500.html;
 location = /500.html {
 root /home/natsume/myproject/hello_django/static/;
 }
 }
}
Lưu và thoát.

Kích hoạt máy chủ ảo và kiểm tra cấu hình Nginx.
Mã:
ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/
nginx -t
Đảm bảo không có lỗi, sau đó khởi động lại Nginx:
Mã:
systemctl khởi động lại nginx

Bước 7 - Kiểm tra Django​

Ở bước 5, chúng tôi đã tạo một máy chủ ảo cho dự án Django của mình với tên miền 'www.django-nginx.com'. Mở trình duyệt và truy cập tên miền mà bạn đã chọn cho dự án của mình.



www.django-nginx.com/admin/



Bạn sẽ được chuyển hướng đến bảng điều khiển quản trị Django.



Kiểm tra xem tất cả các dịch vụ mà chúng ta đã thiết lập có đang chạy hay không bằng lệnh bên dưới:
Mã:
netstat -pl
Bạn sẽ thấy tệp pid, cổng và sock được tất cả các dịch vụ sử dụng.



Cài đặt và cấu hình Django với PostgreSQL và Nginx trên Ubuntu 16.04 đã thành công.


Liên kết​

 
Back
Bên trên