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é.