Để 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 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 đó
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