Tạo dự án Django trên Ubuntu Server và kết nối đến MariaDB

Để tạo 1 dự án (project) trên Django thì Ubuntu Server cần được cài đặt sẵn các thứ sau:

  • Ubuntu Server 20.4
  • MariaDB, các bạn xem bài Cài đặt MariaDB trên Ubuntu
  • Môi trường ảo, các bạn có thể sử dụng Anaconda, Pyenv… để tạo và quản lý môi trường ảo. Ở đây mình sử dụng virtualenv – một chương trình rất thông dụng để tạo môi trường Python.
  • Pip – giúp cài đặt và quản lý các gói thư viện Python

Cài đặt môi trường ảo và các gói cần thiết

Đầu tiên ta sẽ kiểm tra phiên bản Python mà Ubuntu 20.4 đang sử dụng

user@server:~$ python3 -V
Kết quả:
Python 3.8.10

Mình đang sử dụng Ubuntu 20.4 và python 3.8.10 mình sẽ dùng lệnh sau để cài đặt pip và gói django từ kho lưu trữ django và cài đặt gói môi trường ảo evn

user@server:~$ sudo apt-get install python3-pip python3-django
user@server:~$ sudo apt-get install python3-venv

Sau khi quá trình cài đặt hoàn tất thì bạn có thể bắt đầu một dự án mới của Django. Hãy nhớ rằng bất cứ khi nào bạn bắt đầu một dự án mới thì bạn nên tạo một thư mục và tất cả mọi thứ hãy để trong thư mục đó, như vậy bạn sẽ không bị nhầm lẫn và khi chạy các dự án không bị nhầm lẫn môi trường.

Tạo thư mục dự án của bạn và chuyển đến thư mục đó

Quảng cáo

Ủng hộ website

user@server:~$ mkdir django_project
user@server:~$ cd django_project

Tạo môi trường ảo có tên là project1_env

user@server:~/django_project$ python3 -m venv project1_env

Kích hoạt môi trường ảo bằng lệnh

user@server:~/django_project$ source project1_env/bin/activate

Khi môi trường ảo được kích hoạt, mọi thứ mà thằng pip cài đặt sẽ vào hết thư mục project1_env, cách ly hoàn toàn với các thứ khác trong hệ thống, vì thế nó khá là an toàn, không sợ bị lỗi hệ thống.

Khi bạn chạy môi trường ảo, các bạn để ý mỗi dòng lệnh sẽ bắt đầu bằng tên của môi trường đó

(project1_env)user@server~$

Cài đặt Django bằng pip trong môi trường ảo project1_env và kiểm tra phiên bản đã cài đặt

(project1_env)user@server:~/django_project$ pip install django
(project1_env)user@server:~/django_project$ django-admin --version
Kết quả
4.0.6

Để hủy kích hoạt môi trường ảo bạn chỉ cần chạy lệnh deactivate. Mỗi khi bạn muốn làm việc với dự án Django đừng quên kích hoạt lại môi trường ảo.

Tạo 1 project Django mới

Chạy lệnh tạo project mới

(project1_env)user@server:~/django_project$ django-admin startproject project1
(project1_env)user@server:~/django_project$ ls project1
Kết quả
manage.py  project1

Chỉnh ALLOWED_HOSTS trong file setting.py trong thư mục django để cho phép máy chủ Django có thể phân phối thông qua địa chỉ IP hoặc domain name.

(project1_env)user@server:~/django_project$ cd project1/project1
(project1_env)user@server:~/django_project/project1/project1$ nano setting.py
Tìm đến dòng có chữ
ALLOWED_HOSTS = []
===> Sửa thành:
ALLOWED_HOSTS = ['*']

Ý nghĩa của * là mình sẽ thêm vào là cho phép tất cả IP hoặc domain, khi các bạn chạy test thì Ok nhưng khi chạy thực tế phải đổi lại nhé. Ấn Ctrl + O, Ctrl + X để lưu lại. Sau đó khởi động máy chủ Django bằng lệnh:

(project1_env)user@server:~/django_project/project1/project1$ python manage.py runserver 0.0.0.0:8080

Kiểm tra xem máy chủ Django đã hoạt động tốt hay chưa bằng cách vào trình duyệt và nhập địa chỉ của máy chủ Django. Nếu hiện ra màn hình bên dưới là thành công. Ở đây mình nhập 10.120.51.49:8080

Kết nối đến cơ sở dữ liệu MariaDB

Để kết nối đến cơ sở dữ liệu MariaDB bạn cần chắc chắn MariaDB cho phép bạn kết nối đến từ localhost nếu chung máy chủ, địa chỉ IP nếu MariaDB ở máy chủ khác

Các bạn cần xem bài sau

Sau khi cấu hình như link trên thì kiểm tra bằng lệnh sau:

user@server:~$ sudo mysql -u root -p -e "SELECT user, host from mysql.user"
Kết quả
+--------+-----------------+
| user   | host            |
+--------+-----------------+
| jessy  | 61.38.140.3     |
| jessy  | localhost       |
| root   | localhost       |
+--------+-----------------+

Nếu kết quả cho thấy user jessy được phép truy cập localhost là bạn đã cấu hình thành công, bạn có thể sử dụng tài khoản này để kết nối project Django của mình đến database MariaDB.

Chỉnh trong file setting.py cấu hình DATABASES như hình

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ten_database_cua_ban',
        'USER': 'jessy',
        'PASSWORD': 'Xehanoi.info',
        'HOST': 'localhost',
        'PORT': '',
    }
} 

Test lại thêm lần nữa có thể bạn sẽ gặp lỗi Error loading MySQLdb module. Did you install mysqlclient?

MySQLdb là module giao tiếp với cơ sở dữ liệu MariaDB / MySQL tuy nhiên theo 1 số nguồn mình tìm hiểu thì MySQLdb không hỗ trợ Python 3.x nữa, cài mysqlclient thì không được nên mình sẽ dùng PyMySQL để thay thế.

Các bạn vào lại môi trường ảo, dùng pip để cài PyMySQL bằng lệnh

(project1_env)user@server:~/django_project$ pip install PyMySQL

Tiếp theo cần thay thế MySQLdb bằng PyMySQL bằng cách thêm đoạn code bên dưới vào file __init.py__ trong thư mục của app mặc định, ở đây là thư mục project1

(project1_env)user@server:~/django_project/project1/project1$ nano __init.py__
Thêm đoạn code sau:
import pymysql
pymysql.install_as_MySQLdb()

Bây giờ các bạn chạy kiểm tra lại 1 lần nữa. Đối với các bạn sử dụng Python 2.x trở xuống có thể cài module MySQLdb bằng pip nhé

Như vậy là mình đã hướng dẫn các bạn tạo 1 dự án Django trên Ubuntu Server 20.4 và kết nối đến cơ sở dữ liệu MariaDB. Mình mong nhận được nhiều ý kiến đóng góp để website ngày càng phát triển. Trân trọng cảm ơn

Add Comment