Cách sử dụng Postgresql với Ứng dụng Django của bạn trên Debian 8
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 cấu hình để lưu trữ dữ liệu vào một file database SQLite nhẹ. Mặc dù điều này hoạt động tốt dưới một số tải, nhưng DBMS truyền thống hơn có thể cải thiện hiệu suất trong production .Trong hướng dẫn này, ta sẽ trình bày cách cài đặt và cấu hình PostgreSQL để sử dụng với các ứng dụng Django của bạn. Ta sẽ cài đặt phần mềm cần thiết, tạo thông tin đăng nhập database cho ứng dụng của bạn , sau đó bắt đầu và cấu hình một dự án Django mới để sử dụng phần backend này.
Yêu cầu
 Để bắt đầu, bạn  cần  một version   server  Debian 8 sạch với  user  không phải root được  cài đặt .  User  không phải root phải được  cấu hình  với các  quyền  sudo . Tìm hiểu cách  cài đặt  điều này  theo  hướng dẫn  cài đặt   server  ban đầu của  ta .
  Khi đã sẵn sàng  để tiếp tục, hãy đăng nhập  với quyền  là  user  sudo của bạn và đọc tiếp.
Cài đặt các thành phần từ Kho Debian
 Bước đầu tiên của  ta  sẽ là cài đặt tất cả các phần mà  ta  cần từ repository .  Ta  sẽ cài đặt pip , trình quản lý gói Python, để cài đặt và quản lý các thành phần Python của  ta .  Ta  cũng sẽ cài đặt phần mềm database  và các thư viện liên quan cần thiết để tương tác với chúng.
Python 2 và Python 3 yêu cầu các gói hơi khác nhau, vì vậy hãy chọn các lệnh bên dưới phù hợp với version Python của dự án của bạn.
Nếu bạn đang sử dụng Python 2 , hãy nhập:
- sudo apt-get update 
 - sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib 
 
Nếu bạn đang sử dụng Python 3 , hãy nhập:
- sudo apt-get update 
 - sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib 
 
Với việc cài đặt xong xuôi, ta có thể tiếp tục tạo database và user database của bạn .
Tạo Database và User Database
Theo mặc định, Postgres sử dụng một schemas xác thực được gọi là “xác thực ngang hàng” cho các kết nối local . Về cơ bản, điều này nghĩa là nếu tên user hệ điều hành của user trùng với tên user Postgres hợp lệ, user đó có thể đăng nhập mà không cần xác thực thêm.
 Trong quá trình cài đặt Postgres,  user  hệ điều hành có tên là postgres đã được tạo để tương ứng với  admin-user  PostgreSQL của postgres .  Ta  cần sử dụng  user  này để thực hiện  các việc  quản trị.  Ta  có thể sử dụng sudo và nhập tên  user  với tùy chọn -u .
Đăng nhập vào một phiên Postgres tương tác bằng lệnh :
- sudo -u postgres psql 
 
Đầu tiên,  ta  sẽ tạo một database  cho dự án Django của  ta . Mỗi dự án nên có database  riêng biệt vì lý do bảo mật.  Ta  sẽ gọi database   của bạn  là myproject trong hướng dẫn này, nhưng tốt hơn hết là bạn nên chọn thứ gì đó mang tính mô tả hơn cho các dự án thực:
 Lưu ý: Hãy nhớ kết thúc tất cả các lệnh tại dấu nhắc SQL bằng dấu chấm phẩy.
- CREATE DATABASE myproject; 
 
OutputCREAT DATABASE Tiếp theo, ta sẽ tạo một user database mà ta sẽ sử dụng để kết nối và tương tác với database . Đặt password thành password mạnh và an toàn:
- CREATE USER myprojectuser WITH PASSWORD 'password'; 
 
OutputCREATE ROLE Tiếp theo, ta sẽ sửa đổi một vài thông số kết nối cho user mà ta vừa tạo. Điều này sẽ tăng tốc các hoạt động của database vì các giá trị chính xác sẽ không phải được truy vấn và cài đặt mỗi khi kết nối được cài đặt .
  Ta  đang đặt mã hóa mặc định thành UTF-8, đây là định dạng mà Django mong đợi.  Ta  cũng đang đặt schemas  cách ly giao dịch mặc định thành “đọc được  commit ”, ngăn chặn việc đọc từ các giao dịch không được  commit . Cuối cùng,  ta  đang đặt múi giờ. Theo mặc định, các dự án Django của  ta  sẽ được đặt để sử dụng UTC . Đây là tất cả các khuyến nghị từ chính dự án Django .
- ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; 
 - ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed'; 
 - ALTER ROLE myprojectuser SET timezone TO 'UTC'; 
 
OutputALTER ROLE ALTER ROLE ALTER ROLE Bây giờ, tất cả những gì ta cần làm là cấp cho user database quyền truy cập vào database mà ta đã tạo:
- GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser; 
 
OutputGRANT Thoát khỏi dấu nhắc SQL khi bạn hoàn tất.
- \q 
 
Đến đây bạn sẽ được đưa trở lại phiên shell trước đó của bạn .
Cài đặt Django trong Môi trường ảo
 Bây giờ database  của  ta  đã được  cài đặt ,  ta  có thể cài đặt Django. Để có tính linh hoạt tốt hơn,  ta  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.
Nếu bạn đang sử dụng Python 2 , bạn có thể cài đặt gói chính xác bằng lệnh :
- sudo pip install virtualenv 
 
Nếu bạn đang sử dụng Python 3 , bạn có thể cài đặt gói chính xác bằng lệnh :
- sudo pip3 install virtualenv 
 
Tạo và chuyển vào một folder để chứa dự án Django của bạn:
- mkdir ~/myproject 
 - cd ~/myproject 
 
Ta 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 ta bằng lệnh :
- virtualenv venv 
 
Thao tác này sẽ cài đặt một bản sao local  của Python và một lệnh pip local  vào một folder  có tên venv trong folder  dự án của bạn.
Trước khi cài đặt các ứng dụng trong môi trường ảo, ta cần kích hoạt nó. Bạn có thể thực hiện bằng cách gõ:
- source venv/bin/activate 
 
 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. Nó sẽ trông giống như thế này ( venv ) user @ host :~/ myproject $ .
 Khi môi trường ảo của bạn đang hoạt động, bạn có thể cài đặt Django bằng pip .  Ta  cũng sẽ cài đặt gói psycopg2 cho phép  ta  sử dụng database  mà  ta  đã  cấu hình :
pip (không phải pip3 ).- pip install django psycopg2 
 
Bây giờ  ta  có thể bắt đầu một dự án Django trong folder  myproject của  ta . Thao tác này sẽ tạo một folder  con có cùng tên để chứa mã và sẽ tạo một tập lệnh quản lý trong folder  hiện tại:
 Lưu ý: Đảm bảo thêm dấu chấm ở cuối lệnh để điều này được  cài đặt  chính xác. Vì  ta  đã tạo một folder  dự án mẹ để chứa folder  môi trường ảo của  ta ,  ta  không muốn cấp folder  bổ sung sẽ được tạo nếu  ta  bỏ dấu chấm.
- django-admin.py startproject myproject . 
 
Cấu trúc folder hiện tại của bạn sẽ trông giống như sau:
. └── ./myproject/     ├── manage.py     ├── myproject/     │   ├── __init__.py     │   ├── settings.py     │   ├── urls.py     │   └── wsgi.py     └── venv/         └── . . .  Như bạn thấy ,  ta  có một folder  dự án mẹ chứa tập lệnh manage.py , một folder  dự án bên trong và venv mục môi trường ảo venv mà  ta  đã tạo trước đó.
Cấu hình Cài đặt Database Django
Bây giờ ta có một dự án, ta cần cấu hình nó để sử dụng database ta đã tạo.
Mở file cài đặt dự án Django chính nằm trong folder dự án con:
- nano ~/myproject/myproject/settings.py 
 
Trước khi  ta   cài đặt  database , bạn cũng có thể cần điều chỉnh lệnh ALLOWED_HOSTS . Điều này xác định danh sách trắng các địa chỉ hoặc domain   được dùng  để kết nối với version  Django. Bất kỳ yêu cầu nào đến có tiêu đề  Server  lưu trữ không có trong danh sách này sẽ dẫn đến một ngoại lệ. Django yêu cầu bạn  cài đặt  điều này để ngăn chặn một lớp lỗ hổng bảo mật nhất định.
Trong dấu ngoặc vuông, liệt kê các địa chỉ IP hoặc domain được liên kết với server 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 trả lời các yêu cầu về domain và bất kỳ domain phụ nào, hãy thêm một khoảng thời gian vào đầu mục nhập. Trong đoạn mã dưới đây, có một số ví dụ được comment được sử dụng để chứng minh cách chính xác để định dạng mục nhập:
. . . # 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', 'second_domain_or_IP', . . .] Tiếp theo, tìm phần DATABASES trông giống như sau:
. . .  DATABASES = {     'default': {         'ENGINE': 'django.db.backends.sqlite3',         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),     } }  . . . Điều này hiện được cấu hình để sử dụng SQLite làm database . Ta cần thay đổi điều này để database PostgreSQL của ta được sử dụng thay thế.
 Đầu tiên, thay đổi công cụ để nó sử dụng bộ điều hợp postgresql_psycopg2 thay vì bộ điều hợp sqlite3 . Đối với NAME , sử dụng tên của database  của bạn ( myproject trong ví dụ của  ta ).  Ta  cũng cần thêm thông tin đăng nhập.  Ta  cần tên  user , password  và  server  để kết nối.  Ta  sẽ thêm và để trống tùy chọn cổng để mặc định được chọn:
. . .  DATABASES = {     'default': {         'ENGINE': 'django.db.backends.postgresql_psycopg2',         'NAME': 'myproject',         'USER': 'myprojectuser',         'PASSWORD': 'password',         'HOST': 'localhost',         'PORT': '',     } }  . . . Khi bạn hoàn tất, hãy lưu file .
Di chuyển Database và Kiểm tra Dự án của bạn
Bây giờ cài đặt Django đã được cấu hình , ta có thể di chuyển cấu trúc dữ liệu của bạn vào database của ta và kiểm tra server .
Ta có thể bắt đầu bằng cách tạo và áp dụng chuyển đổi vào database của bạn . Vì ta chưa có bất kỳ dữ liệu thực tế nào, điều này sẽ chỉ đơn giản là cài đặt cấu trúc database ban đầu:
- cd ~/myproject 
 - ./manage.py makemigrations 
 - ./manage.py migrate 
 
Sau khi tạo cấu trúc database , ta có thể tạo account quản trị bằng lệnh :
- ./manage.py createsuperuser 
 
Bạn cần chọn tên user , cung cấp địa chỉ email, chọn và xác nhận password cho account .
Lưu ý: Trước khi bạn thử server phát triển, hãy đảm bảo bạn đã mở cổng trong firewall của bạn .
 Nếu bạn đang chạy firewall  ufw , bạn có thể mở cổng thích hợp  bằng lệnh :
- sudo ufw allow 8000 
 
Nếu bạn đang chạy firewall  iptables , lệnh chính xác bạn cần tùy thuộc vào cấu hình firewall  hiện tại của bạn. Đối với hầu hết các cấu hình , lệnh này sẽ hoạt động:
- sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT 
 
Tiếp theo, bạn có thể kiểm tra xem database của bạn có hoạt động chính xác hay không bằng cách khởi động server phát triển Django:
- ./manage.py runserver 0.0.0.0:8000 
 
Trong  trình duyệt web , hãy truy cập domain  hoặc địa chỉ IP của  server , sau đó là :8000 để truy cập trang root  Django mặc định:
http://server_domain_or_IP:8000 Bạn sẽ thấy trang index mặc định:
 Nối /admin vào cuối URL và  bạn có thể  truy cập màn hình đăng nhập vào giao diện  administrator : 
 Nhập tên  user  và password  bạn vừa tạo bằng lệnh createsuperuser . Sau đó, bạn sẽ được đưa đến giao diện quản trị: 
Khi điều tra xong, bạn có thể dừng server phát triển bằng cách nhấn CTRL-C trong cửa sổ terminal của bạn .
Bằng cách truy cập vào giao diện quản trị, ta đã xác nhận database của ta đã lưu trữ thông tin account user của ta và nó có thể được truy cập một cách thích hợp.
  Ta  có thể xác nhận thêm điều này bằng cách truy vấn chính database  Postgres sử dụng client  psql . Ví dụ:  ta  có thể kết nối với database  dự án  của bạn  ( myproject ) với  user  của dự án ( myprojectuser ) và in ra tất cả các bảng có sẵn  bằng lệnh :
- psql -W myproject myprojectuser -h 127.0.0.1 -f <(echo '\dt') 
 
Cờ -W làm cho psql nhắc bạn nhập password  thích hợp.  Ta  phải sử dụng rõ ràng cờ -h để kết nối với localhost qua mạng để cho biết rằng  ta  muốn sử dụng xác thực password  thay vì xác thực ngang hàng.  Ta  đang sử dụng cờ -f để chuyển vào lệnh meta psql mà  ta  muốn thực thi, \dt , liệt kê tất cả các bảng trong database :
Output                      List of relations  Schema |            Name            | Type  |     Owner      --------+----------------------------+-------+---------------  public | auth_group                 | table | myprojectuser  public | auth_group_permissions     | table | myprojectuser  public | auth_permission            | table | myprojectuser  public | auth_user                  | table | myprojectuser  public | auth_user_groups           | table | myprojectuser  public | auth_user_user_permissions | table | myprojectuser  public | django_admin_log           | table | myprojectuser  public | django_content_type        | table | myprojectuser  public | django_migrations          | table | myprojectuser  public | django_session             | table | myprojectuser (10 rows) Như bạn thấy , Django đã tạo một số bảng trong database của ta , điều này xác nhận cài đặt của ta là hợp lệ.
Kết luận
Trong hướng dẫn này, ta đã trình bày cách cài đặt và cấu hình PostgreSQL làm database backend cho một dự án Django. Mặc dù SQLite có thể dễ dàng xử lý tải trong quá trình phát triển và sử dụng production nhẹ, hầu hết các dự án được hưởng lợi từ việc triển khai DBMS đầy đủ tính năng hơn.
Các tin liên quan
Cách di chuyển thư mục dữ liệu PostgreSQL đến vị trí mới trên Ubuntu 16.042016-07-27
Cách sử dụng PostgreSQL với Ứng dụng Django của bạn trên Ubuntu 16.04
2016-05-18
Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 16.04
2016-05-04
Cách backup, khôi phục và di chuyển database PostgreSQL với Barman trên CentOS 7
2016-01-20
Cài đặt postgresql 9.4 trên Debian 8
2015-06-11
Cách sử dụng PostgreSQL với Ứng dụng Django của bạn trên CentOS 7
2015-03-25
Cách sử dụng PostgreSQL với Ứng dụng Django của bạn trên Ubuntu 14.04
2015-03-25
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên CentOS 7
2015-03-18
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 14.04
2015-03-18
Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 14.04
2014-04-28

