Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách sử dụng PostgreSQL với Ứng dụng Django của bạn trên Ubuntu 20.04

Ngày đăng: 14 tháng 10 năm 2022

Ubuntu

Giới thiệu

Django là một khuôn khổ linh hoạt để tạo nhanh các ứng dụng Python. Theo mặc định, các ứng dụng Django được thiết lập cấu hình để lưu trữ dữ liệu vào một tệp cơ sở dữ liệu SQLite nhẹ. Khi điều này hoạt động tốt dưới một số tải, một hệ thống quản lý cơ sở dữ liệu truyền thống có thể cải thiện hiệu suất trong sản xuất.

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình PostgreSQL (thường được gọi là Postgres) để sử dụng với các ứng dụng Django của bạn. Bạn sẽ cài đặt phần mềm cần thiết, tạo thông tin xác thực cơ sở dữ liệu cho ứng dụng của chúng tôi, sau đó bắt đầu và thiết lập cấu hình một dự án Django mới để sử dụng phần phụ trợ này.

Điều kiện

Bạn sẽ cần một phiên bản máy chủ Ubuntu 20.04 sạch với non-root user được thiết lập cấu hình với đặc quyền sudo. Tìm hiểu cách thiết lập điều này bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu của chúng tôi.

Khi bạn đã sẵn sàng để tiếp tục, hãy đăng nhập với tư cách là sudo user của bạn.

Bước 1: Cài đặt các thành phần từ kho lưu trữ Ubuntu

Đầu tiên, bạn sẽ cài đặt các thành phần cần thiết. Điều này bao gồm pip, trình quản lý gói Python để cài đặt và quản lý các thành phần Python, và cả phần mềm cơ sở dữ liệu với các thư viện liên quan của nó.

Bạn sẽ sử dụng Python 3, đi kèm với Ubuntu 20.04. Bắt đầu cài đặt bằng cách gõ:

  1. sudo apt update
  2. sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

Sau khi cài đặt xong, bạn có thể chuyển sang cơ sở dữ liệu.

Bước 2: Tạo Database và Database User

Theo mặc định, Postgres sử dụng một lược đồ xác thực được gọi là “xác thực ngang hàng” cho các kết nối cục bộ. Về cơ bản, điều này có nghĩa là nếu username hệ điều hành của người dùng khớp với username Postgres hợp lệ, thì người dùng đó có thể đăng nhập mà không cần xác thực thêm.

Trong quá trình cài đặt Postgres, một user hệ điều hành có tên là postgres đã được tạo để tương ứng với người dùng quản trị Postgres PostgreSQL. Bạn cần sử dụng user này để thực hiện các tác vụ quản trị. Bạn có thể sử dụng sudo và nhập username với tùy chọn -u.

Đăng nhập vào một phiên Postgres tương tác bằng cách nhập:

  1. sudo -u postgres psql

Đầu tiên, bạn sẽ tạo một cơ sở dữ liệu (database) cho dự án Django. Mỗi dự án nên có cơ sở dữ liệu riêng biệt vì lý do bảo mật. Chúng tôi sẽ gọi cơ sở dữ liệu là myproject trong hướng dẫn này, nhưng tốt hơn hết là bạn nên chọn một cái gì đó mang tính mô tả hơn:

  1. CREATE DATABASE myproject;
note
Remember to end all commands at an SQL prompt with a semicolon.

Tiếp theo, bạn sẽ tạo một database user mà bạn sẽ sử dụng để kết nối và tương tác với cơ sở dữ liệu. Đặt mật khẩu thành mật khẩu mạnh và an toàn:

  1. CREATE USER myprojectuser WITH PASSWORD 'password';

Sau đó, bạn sẽ sửa đổi một vài thông số kết nối cho user mà bạn vừa tạo. Điều này sẽ tăng tốc các hoạt động cơ sở dữ liệu để các giá trị chính xác không phải được truy vấn và thiết lập mỗi khi kết nối được thiết lập.

  1. ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
  2. ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
  3. ALTER ROLE myprojectuser SET timezone TO 'UTC';

Bạn đang đặt mã hóa mặc định thành UTF-8, mà Django mong đợi. Bạn cũng đang đặt lược đồ cách ly giao dịch mặc định thành “read committed (đọc được cam kết)”, ngăn chặn việc đọc từ các giao dịch chưa được cam kết. Cuối cùng, bạn đang đặt múi giờ. Theo mặc định, các dự án Django của bạn sẽ được đặt để sử dụng UTC. Đây là tất cả các khuyến nghị từ chính dự án Django.

Bây giờ, tất cả những gì bạn cần làm là cấp cho database user của bạn quyền truy cập vào cơ sở dữ liệu bạn đã tạo:

  1. GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

Thoát khỏi lời nhắc SQL để quay lại phiên shell của postgres user:

  1. \q

Cài đặt Django trong Môi trường ảo

Bây giờ cơ sở dữ liệu của bạn đã được thiết lập, bạn có thể cài đặt Django. Để có tính linh hoạt tốt hơn, bạn sẽ cài đặt Django và tất cả các phụ thuộc của nó trong môi trường ảo Python. Gói virtualenv cho phép bạn tạo các môi trường này một cách dễ dàng.

Để cài đặt virtualenv, hãy nhập:

  1. sudo pip3 install virtualenv

Tạo và chuyển vào một thư mục để chứa dự án Django của bạn:

  1. mkdir ~/myproject
  2. cd ~/myproject

Bạn có thể tạo một môi trường ảo để lưu trữ các yêu cầu Python của dự án Django của mình bằng cách nhập:

  1. python3 -m virtualenv myprojectenv

Thao tác này sẽ cài đặt bản sao cục bộ của Python và lệnh pip cục bộ vào thư mục có tên myprojectenv trong thư mục dự án của bạn.

Trước khi cài đặt các ứng dụng trong môi trường ảo, bạn cần kích hoạt nó. Bạn có thể làm như vậy bằng cách gõ:

  1. source myprojectenv/bin/activate

Lời 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. Nó sẽ trông giống như thế này (myprojectenv)user@host:~/myproject$.

Khi môi trường ảo của bạn đang hoạt động, bạn có thể cài đặt bản phát hành chính thức của Django bằng pip. Bạn sẽ cài đặt gói psycopg2 cho phép chúng ta sử dụng cơ sở dữ liệu Postgres mà bạn đã thiết lập cấu hình:

Note
Regardless of which version of Python you are using, when the virtual environment is activated, you should use the pip command (not pip3).
  1. pip install Django psycopg2

Bây giờ bạn có thể bắt đầu một dự án Django trong thư mục myproject. Thao tác này sẽ tạo một thư mục con có cùng tên để chứa mã và sẽ tạo một tập lệnh quản lý trong thư mục hiện tại. Đảm bảo thêm dấu chấm ở cuối lệnh để điều này được thiết lập chính xác:

  1. django-admin startproject myproject .

Thiết lập cấu hình Cài đặt Cơ sở dữ liệu Django

Bây giờ bạn có một dự án, bạn cần phải cấu hình nó để sử dụng cơ sở dữ liệu bạn đã tạo.

Mở tệp cài đặt dự án Django chính nằm trong thư mục dự án con:

  1. nano ~/myproject/myproject/settings.py

Ở cuối tệp, bạn sẽ thấy phần DATABASES trông giống như sau:

~/myproject/myproject/settings.py
. . .

DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

. . .

Hiện tại điều này được cấu hình để sử dụng SQLite làm cơ sở dữ liệu. Bạn cần thay đổi điều này để cơ sở dữ liệu PostgreSQL của bạn được sử dụng thay thế.

Trước tiên, hãy thay đổi công cụ để nó sử dụng bộ chuyển đổi postgresql thay vì bộ chuyển đổi sqlite3. Đối với NAME, hãy sử dụng tên cơ sở dữ liệu của bạn (myproject trong ví dụ này). Bạn cũng cần thêm thông tin đăng nhập. Bạn cần username, mật khẩu và máy chủ để kết nối. Bạn sẽ thêm và để trống tùy chọn cổng để mặc định được chọn:

~/myproject/myproject/settings.py
. . .

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

. . .

Khi ở đây, bạn cũng sẽ cần điều chỉnh lệnh ALLOWED_HOSTS. Điều này xác định một danh sách trắng các địa chỉ hoặc tên miền được phép kết nối với phiên bản Django. Bất kỳ yêu cầu nào đến có tiêu đề Host không có trong danh sách này sẽ phát sinh một ngoại lệ. Django yêu cầu bạn đặt điều này để ngăn chặn một lớp lỗ hổng bảo mật nhất định.

Trong đoạn mã dưới đây, có một vài ví dụ nhận xét được sử dụng để chứng minh:

~/myproject/myproject/settings.py
. . .
# The simplest case: just add the domain name(s) and IP addresses of your Django server
# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
# To respond to 'example.com' and any subdomains, start the domain with a dot
# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
ALLOWED_HOSTS = ['your_server_domain_or_IP']

Trong dấu ngoặc vuông, liệt kê các địa chỉ IP hoặc tên miền được liên kết với máy chủ Django của bạn. Mỗi mục nên được liệt kê trong phần trích dẫn với các mục được phân tách bằng dấu phẩy. Nếu bạn muốn có yêu cầu cho toàn bộ miền và bất kỳ miền phụ nào, hãy thêm một khoảng thời gian vào đầu mục nhập.

Khi bạn hoàn tất, hãy lưu và đóng tệp.

Di chuyển Cơ sở dữ liệu và Kiểm tra Dự án của bạn

Bây giờ cài đặt Django đã được thiết lập cấu hình, bạn có thể di chuyển cấu trúc dữ liệu của mình vào cơ sở dữ liệu và kiểm tra máy chủ.

Bạn có thể bắt đầu bằng cách tạo và áp dụng di chuyển vào cơ sở dữ liệu của mình. Vì bạn chưa có bất kỳ dữ liệu thực tế nào, điều này sẽ chỉ đơn giản là thiết lập cấu trúc cơ sở dữ liệu ban đầu:

  1. cd ~/myproject
  2. python manage.py makemigrations
  3. python manage.py migrate

Sau khi tạo cấu trúc cơ sở dữ liệu, bạn có thể tạo tài khoản quản trị bằng cách nhập:

  1. python manage.py createsuperuser

Bạn sẽ được yêu cầu chọn username, cung cấp địa chỉ email, chọn và xác nhận mật khẩu cho tài khoản.

Nếu bạn đã làm theo hướng dẫn thiết lập máy chủ ban đầu, bạn phải có tường lửa UFW. Trước khi bạn có thể truy cập máy chủ phát triển Django để kiểm tra cơ sở dữ liệu của mình, bạn cần mở cổng trong tường lửa của mình.

Cho phép kết nối bên ngoài với cổng bằng cách nhập:

  1. sudo ufw allow 8000

Khi bạn đã mở cổng, bạn có thể kiểm tra xem cơ sở dữ liệu của mình có hoạt động chính xác hay không bằng cách khởi động máy chủ phát triển Django:

  1. python manage.py runserver 0.0.0.0:8000

Trong trình duyệt web của bạn, hãy truy cập tên miền hoặc địa chỉ IP của máy chủ, sau đó là :8000 để truy cập trang gốc Django mặc định:

  1. http://server_domain_or_IP:8000

Bạn sẽ thấy trang mục lục mặc định:

description image

Nối /admin vào cuối URL và bạn sẽ có thể truy cập màn hình đăng nhập vào giao diện quản trị viên:

description image

Nhập username và mật khẩu bạn vừa tạo bằng lệnh createsuperuser. Sau đó, bạn sẽ được đưa đến giao diện quản trị:

description image

Khi điều tra xong, bạn có thể dừng máy chủ phát triển bằng cách nhấn CTRL-C trong cửa sổ dòng lệnh của mình.

Bằng cách truy cập vào giao diện quản trị, bạn đã xác nhận rằng cơ sở dữ liệu của bạn đã lưu trữ thông tin tài khoản người dùng của bạn và nó có thể được truy cập một cách thích hợp.

Kết luận

Trong hướng dẫn này, bạn đã trình bày cách cài đặt và cấu hình PostgreSQL làm cơ sở dữ liệu phụ trợ cho một dự án Django. Trong khi SQLite có thể dễ dàng xử lý tải trong quá trình phát triển và sử dụng sản xuất nhẹ, hầu hết các dự án được hưởng lợi từ việc triển khai hệ thống quản lý cơ sở dữ liệu đầy đủ tính năng hơn.

Để đưa dự án của bạn đi xa hơn nữa, hãy xem hướng dẫn của chúng tôi về Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 20.04.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời