Cài đặt server Django (P1): Chạy thử Django app trên server
Trong các phần cài đặt này, mình sẽ trình bày cách cài đặt và config những tool cần thiết để cài đặt ứng dụng Django trên server Ubuntu(16.04)
. Đi cùng đó, mình sẽ sử dụng MySQL thay vì SQLite mặc định. Đông thời mình sẽ config Gunicorn application server
để giao tiếp với Django app của mình.
Install the Packages from the Ubuntu Repositories
Cần cài đặt python3-pip
(chúng ta sẽ sử dụng các Python package), MySQL, nginx
Sử dụng Django với python3
$ sudo apt-get update
$ sudo apt-get install python3-pip python3-dev
Install MySQL and create database
- Install mysql
$ sudo apt-get install mysql-server
- Create MySQL database and User
Log into mysql
$ mysql -u root -p
Create myproject
db
mysql> CREATE DATABASE myproject;
Install Nginx
$ sudo apt-get install nginx
Create a Python Virtual Environment for your Project
Cài đặt virtualenv
$ sudo -H pip3 install --upgrade pip
$ sudo -H pip3 install virtualenv
Tạo virtualenv
$ mkdir ~/myproject && cd ~/myproject
$ virtualenv myprojectenv
Lệnh trên sẽ tạo thư mục myprojectenv
trong thư mục myproject.
Active virtualenv
$ source myprojectenv/bin/activate
Sau khi đã kích hoạt, việc sử dụng virtual environment này sẽ giúp các package python chỉ sử dụng cho project hiện tại mà không làm ảnh hưởng đến project khác chạy trên cùng server.
Create and Configure a New Django Project
Trước tiên, mình sẽ install Django từ pip
$ pip3 install django
Create the Django Project
Bạn cũng có thể clone project đã có sẵn mà đã thực hiện ở local từ trước. Ở đây, mình sẽ tạo 1 project mới.
$ django-admin startproject myproject ~/myproject
Một new Django project được tạo ra với cấu trúc:
~/myproject
:
- ~/myproject/manage.py
- ~/myproject/myproject/: Django project package gồm: init.py, settings.py, urls.py, và wsgi.py.
- ~/myproject/myprojectenv/: virtualenv mà đã tạo trước đó.
Project Settings
Trước tiên, mình config trong ~/myproject/myproject/settings.py
của project
$ nano ~/myproject/myproject/settings.py
Bạn phải liệt kê tất cả ip và domain mà liên kết với sever của bạn
(trong 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', 'second_domain_or_IP', . . .]
ví dụ ở đây mình sẽ để:
ALLOWED_HOSTS = ['.example.com', '203.0.113.5', 'example.com']
nó sẽ start với bất kì domain hay subdomain(bằng cách thêm dấu chấm trước .example.com) example.com hoặc với ip: 203.0.113.5
Sau đó là config với mysql.
Để kết nối mysql với django, trước hết bạn cần cài đặt mysqlclient
từ pip.
$ pip3 install mysqlclient
sau đó vẫn ở settings.py
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
}
...
tiếp theo, ở cuối settings.py, mình khai báo thư mục static
:
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Hoàn thiện Project Setup
Trước tiên là migration DB
$ ~/myproject/manage.py makemigrations
$ ~/myproject/manage.py migrate
Sau khi migration thành công, tạo 1 superuser mà Django đã hộ trợ sẵn phần tạo, quản lý bằng admin:
$ ~/myproject/manage.py createsuperuser
các bạn nhớ nhập username và password.
Thông thường, với cài đặt mặc định ban đầu sẽ có UFW firewall để bảo vệ server. Mình phải chấp nhận nó qua port 8000 để sử dụng:
$ sudo ufw allow 8000
Bây giờ, mình chỉ cần chạy Django development server là được
$ ~/myproject/manage.py runserver 0.0.0.0:8000
Khi chạy: http://server_domain_or_IP:8000
mà thấy được:
và thêm /admin vào link trên: http://server_domain_or_IP:8000/admin
thì sẽ được:
và login thành công với superuser
đã tạo ở phía trên.
Với phần 1, mình đã trình batf các cài đặt cơ bản để chạy Django app trên server, ở phần sau mình sẽ trình bày tiếp phần config gunicron.
Nhắn nhỏ:
Nếu có vẫn gặp vướng mắc trong khi thực hành hoặc có bất kì thắc mắc về Python
, Django
hay muốn tìm hiểu thêm các thông tin hữu ích, các bạn hãy tham gia group Django (Python) Vietnam để được các admin và thành viên support trực tiếp vấn đề mà bạn gặp phải nhé.