Thứ sáu, 01/12/2017 | 00:00 GMT+7

Cách thiết lập lưu trữ đối tượng với Django

DigitalOcean Spaces là một giải pháp lưu trữ đối tượng, lý tưởng cho dữ liệu phi cấu trúc như âm thanh, video, hình ảnh hoặc lượng lớn văn bản. Để tìm hiểu thêm về Không gian và lưu trữ đối tượng, bạn có thể đọc qua Giới thiệu về DigitalOcean .

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt ứng dụng Django của bạn để hoạt động với Spaces.

Yêu cầu

Để bắt đầu hướng dẫn này, bạn nên cài đặt một số thứ:

Với một server ban đầu được cài đặt và DigitalOcean và khóa API, bạn đã sẵn sàng để bắt đầu.

Bước 1 - Cài đặt môi trường ảo

Nếu bạn chưa có, trước tiên hãy cập nhật và nâng cấp server của bạn.

  • sudo apt-get update && sudo apt-get -y upgrade

Server của bạn phải chạy bằng Python 3, nhưng bạn có thể chạy lệnh sau đảm bảo rằng nó đã được cài đặt:

  • sudo apt-get install python3

Tiếp theo, cài đặt pip để quản lý các gói phần mềm cho Python:

  • sudo apt-get install -y python3-pip

Cuối cùng, ta có thể cài đặt module virtualenv để ta có thể sử dụng nó để cài đặt môi trường lập trình:

sudo pip3 install virtualenv 

Để biết thêm thông tin và hướng dẫn về môi trường lập trình, bạn có thể đọc về cách cài đặt môi trường ảo .

Bước 2 - Tạo ứng dụng Django và cài đặt phụ thuộc

Bây giờ ta sẽ chuyển sang tạo ứng dụng Django sẽ sử dụng DigitalOcean của ta .

Khi ở trong folder chính của server , hãy chạy lệnh sau để tạo một folder (trong trường hợp này, ta sẽ đặt tên là django-apps ) để giữ dự án và chuyển đến folder :

  • mkdir django-apps
  • cd django-apps

Trong folder này, hãy tạo một môi trường ảo bằng lệnh sau. Ta sẽ gọi nó là env , nhưng bạn có thể gọi nó bạn muốn .

  • virtualenv env

Đến đây bạn có thể kích hoạt môi trường và sẽ nhận được phản hồi rằng bạn đang ở trong môi trường đó bằng cách thay đổi tiền tố dòng lệnh của bạn.

. env/bin/activate 

Bạn sẽ nhận được phản hồi rằng bạn đang ở trong môi trường do thay đổi tiền tố dòng lệnh của bạn. Nó sẽ trông giống như thế này, nhưng sẽ thay đổi tùy thuộc vào folder bạn đang ở:

Trong môi trường, hãy cài đặt gói Django bằng pip để ta có thể tạo và chạy ứng dụng Django. Để tìm hiểu thêm về Django, hãy đọc loạt bài hướng dẫn của ta về Phát triển Django .

  • pip install django

Sau đó, tạo dự án bằng lệnh sau, trong trường hợp này ta sẽ gọi nó là mysite .

  • django-admin startproject mysite

Tiếp theo, ta sẽ cài đặt Boto 3, là AWS SDK cho Python sẽ cho phép ứng dụng của ta tương tác với những thứ như S3, EC2 và DigitalOcean Spaces. Vì DigitalOcean Spaces có thể tương tác với Amazon S3 nên Spaces có thể tương tác với các công cụ như Boto 3 một cách dễ dàng. Để biết thêm chi tiết về sự so sánh giữa S3 và Spaces, vui lòng xem lại tài liệu về Spaces .

  • sudo pip install boto3

Một thư viện khác rất quan trọng đối với dự án của ta là django-storages, là một bộ sưu tập các backend lưu trữ tùy chỉnh cho Django . Ta cũng sẽ cài đặt điều này bằng pip.

  • sudo pip install django-storages

Bạn đã cài đặt các phần phụ thuộc của bạn trong môi trường của ứng dụng Django và hiện đã sẵn sàng để cài đặt các folder tĩnh và mẫu.

Bước 3 - Thêm folder và nội dung

Với môi trường của ta được cài đặt với tất cả các phụ thuộc, bây giờ bạn có thể chuyển sang folder mysite/mysite ,

  • cd ~/django-apps/mysite/mysite

Trong folder mysite/mysite , hãy chạy các lệnh sau để tạo folder tĩnh và folder mẫu.

  • mkdir static && mkdir templates

Tiếp theo, ta sẽ tạo các folder con cho hình ảnh và CSS nằm trong folder static .

  • mkdir static/img && mkdir static/css

Khi bạn đã tạo xong các folder , ta sẽ download một file thử nghiệm mà cuối cùng ta sẽ thêm vào bộ nhớ đối tượng của bạn . Chuyển sang folder img vì ta sẽ download một hình ảnh.

  • cd ~/django-apps/mysite/mysite/static/img

Trong folder này, ta sẽ download hình ảnh biểu trưng DigitalOcean bằng lệnh wget của Wget. Đây là một chương trình GNU thường được sử dụng, được cài đặt sẵn trên các bản phân phối Ubuntu, để lấy nội dung từ các web server .

  • wget http://assets.digitalocean.com/logos/DO_Logo_icon_blue.png

Bạn sẽ thấy kết quả tương tự như sau:

Output
Resolving www.digitalocean.com (www.digitalocean.com)... 104.16.24.4, 104.16.25.4 Connecting to www.digitalocean.com (www.digitalocean.com)|104.16.24.4|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1283 (1.3K) [image/png] Saving to: ‘DO_Logo_icon_blue.png’ DO_Logo_icon_blue-6edd7377 100%[=====================================>] 1.25K --.-KB/s in 0s 2017-11-05 12:26:24 (9.60 MB/s) - ‘DO_Logo_icon_blue.png’ saved [1283/1283]

Đến đây, nếu bạn chạy lệnh ls , bạn sẽ nhận thấy rằng một hình ảnh có tên DO_Logo_icon_blue.png hiện đã tồn tại trong folder static/img/ .

Với các folder này được cài đặt và hình ảnh sẽ được lưu trữ download server , ta có thể chuyển sang chỉnh sửa các file được liên kết với ứng dụng Django của ta .

Bước 4 - Chỉnh sửa file CSS và HTML

Ta sẽ bắt đầu bằng cách chỉnh sửa biểu định kiểu. Bạn nên chuyển vào folder css để ta có thể thêm biểu định kiểu cơ bản cho ứng dụng web của bạn .

  • cd ~/django-apps/mysite/mysite/static/css

Sử dụng nano hoặc một editor khác mà bạn chọn để chỉnh sửa tài liệu.

  • nano app.css

Khi file mở ra, hãy thêm CSS sau:

app.css
body {   margin: 0;   background-color: #f1f1f1;   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }  .container {   width: 80%;   border: 1px solid #ddd;   background-color: #fff;   padding: 20px;   margin: 40px auto; }  form {   margin-bottom: 20px;   padding: 10px;   border: 1px solid #ff9900;   width: 350px; }  table {   border-collapse: collapse;   width: 100%; }  table td, table th {   border: 1px solid #eceeef;   padding: 5px 8px;   text-align: left; }  table thead {   border-bottom: 2px solid #eceeef; } 

Sau khi hoàn tất, bạn có thể lưu file . Từ đây, chuyển đến folder templates .

  • cd ~/django-apps/mysite/mysite/templates

Ta cần mở một file có tên home.html và thêm HTML vào đó để ứng dụng web cơ bản của ta được hiển thị như thế nào. Sử dụng nano, mở file để nó sẵn sàng chỉnh sửa:

  • nano home.html

Trong tài liệu, hãy thêm những điều sau:

home.html
{% load static %} <!DOCTYPE html> <html> <head>   <meta charset="utf-8">   <title>Spaces + Django Tutorial</title>   <link rel="stylesheet" type="text/css" href="{% static 'css/app.css' %}"> </head> <body>   <center>   <header>     <h1>Spaces + Django Tutorial</h1>   </header>   <main>     <img src="{% static 'img/DO_Logo_icon_blue.png' %}">     <h2>Congratulations, you’re using Spaces!</h2>   </main>   </center> </body> </html> 

Lưu và đóng file . Tệp cuối cùng ta sẽ cập nhật là file urls.py để nó trỏ đến file home.html mới tạo của bạn. Ta cần chuyển vào folder sau:

  • cd ~/django-apps/mysite/mysite

Sử dụng nano để chỉnh sửa file urls.py.

  • nano urls.py

Bạn có thể xóa mọi thứ trong file và sau đó thêm những thứ sau:

urls.py
from django.conf.urls import url from django.views.generic import TemplateView   urlpatterns = [     url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'), ]  

Với những file này được cài đặt , ta có thể chuyển sang chỉnh sửa file settings.py của ta để tích hợp nó với bộ nhớ đối tượng.

Bước 5 - Cập nhật cài đặt

Bây giờ đã đến lúc cập nhật file cài đặt bằng thông tin đăng nhập Spaces của bạn, để ta có thể tận dụng trang mà ta đã cài đặt để hiển thị hình ảnh.

Lưu ý trong ví dụ này, ta sẽ mã hóa cứng thông tin đăng nhập của bạn cho ngắn gọn, nhưng điều này không đủ an toàn cho cài đặt production . Bạn nên sử dụng một gói như Python Decouple một thứ gì đó giống như để che dấu thông tin đăng nhập Spaces của bạn. Gói này sẽ tách các thông số cài đặt khỏi mã nguồn của bạn, cần thiết cho ứng dụng Django cấp production .

Ta sẽ bắt đầu bằng cách chuyển đến vị trí của file cài đặt của bạn.

  • cd ~/django-apps/mysite/mysite

Mở file để chỉnh sửa bằng nano:

  • nano settings.py

Thêm ip server của bạn làm server lưu trữ được phép.

settings.py
... ALLOWED_HOSTS = ['your-server-ip'] ... 

Sau đó, thêm storages vào phần ứng dụng đã cài đặt của file cài đặt và xóa django.contrib.admin vì ta sẽ không sử dụng nó trong hướng dẫn này. Nó sẽ giống như sau.

settings.py
... # Application definition  INSTALLED_APPS = [     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles',     'storages' ] ... 

Thay thế và thêm văn bản được đánh dấu vào phần TEMPLATES của file cài đặt, để dự án biết vị trí của file home.html của bạn.

settings.py
... TEMPLATES = [     {         'BACKEND': 'django.template.backends.django.DjangoTemplates',         'DIRS': [os.path.join(BASE_DIR, 'mysite/templates')],         'APP_DIRS': True,         'OPTIONS': {             'context_processors': [                 'django.template.context_processors.debug',                 'django.template.context_processors.request',                 'django.contrib.auth.context_processors.auth',                 'django.contrib.messages.context_processors.messages',             ],         },     }, ] ... 

Cuối cùng, hãy cập nhật cài đặt của bạn ở cuối file . Ta sẽ thêm phần sau vào bên dưới phần # Static files . Đảm bảo thêm các khóa truy cập, tên group và folder bạn muốn các file của bạn tồn tại. Bạn có thể thêm folder thông qua giao diện Spaces trong trình duyệt. Tại thời điểm viết bài, NYC3 là khu vực duy nhất mà Spaces hiện đang ở, vì vậy nó đang được chuyển làm URL điểm cuối.

settings.py
... # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/  AWS_ACCESS_KEY_ID = 'your-spaces-access-key' AWS_SECRET_ACCESS_KEY = 'your-spaces-secret-access-key' AWS_STORAGE_BUCKET_NAME = 'your-storage-bucket-name' AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com' AWS_S3_OBJECT_PARAMETERS = {     'CacheControl': 'max-age=86400', } AWS_LOCATION = 'your-spaces-files-folder'  STATICFILES_DIRS = [     os.path.join(BASE_DIR, 'mysite/static'), ] STATIC_URL = 'https://%s/%s/' % (AWS_S3_ENDPOINT_URL, AWS_LOCATION) STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'  

Bây giờ file cài đặt của ta đã sẵn sàng để tích hợp ứng dụng Django của ta với bộ nhớ đối tượng.

Bước 6 - Thu thập các file tĩnh

Bây giờ ta sẽ chạy bộ collectstatic và bạn sẽ thấy các file đang được chuyển, bao gồm cả hình ảnh mà ta đã lưu trong folder tĩnh của bạn . Nó sẽ được chuyển đến vị trí Spaces mà ta đã xác định trong file cài đặt.

Để thực hiện điều này, hãy chuyển đến ~/django-apps/mysite/ :

  • cd ~/django-apps/mysite

Trong folder , hãy chạy lệnh sau:

  • python manage.py collectstatic

Bạn sẽ thấy kết quả sau và sẽ trả lời có khi được yêu cầu .

Output
You have requested to collect static files at the destination location as specified in your settings. This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel:

Sau đó, bạn sẽ thấy một số kết quả khác cho bạn biết file đã được sao chép vào Spaces.

Output
Copying '/root/django-apps/mysite/mysite/static/css/app.css' 1 static file copied, 1 unmodified.

Đến đây, nếu bạn quay lại group từ account DigitalOcean Cloud của bạn , bạn sẽ thấy các folder cssimg được thêm vào folder mà bạn đã trỏ chúng đến, với app.css trong folder cssDO-Logo_icon_blue-.png hình ảnh DO-Logo_icon_blue-.png trong folder img .

Bước 7 - Kiểm tra ứng dụng

Với mọi thứ đã được cài đặt và các file của ta trong bộ nhớ đối tượng của ta , giờ đây ta có thể kiểm tra ứng dụng của bạn bằng cách chuyển đến trang mà file tĩnh của ta đang được phân phát.

Đầu tiên, hãy đảm bảo firewall của ta sẽ cho phép lưu lượng truy cập qua cổng 8000 bằng cách đưa ra lệnh sau:

  • sudo ufw allow 8000

Bây giờ, ta có thể chạy server của bạn bằng cách tham chiếu đến địa chỉ IP của server và sử dụng cổng 8000.

  • python manage.py runserver your-server-ip:8000

Trong trình duyệt web, chuyển đến http:// your-server-ip :8000 để xem kết quả của ứng dụng Django bạn đã tạo. Bạn sẽ thấy kết quả sau trong trình duyệt của bạn :

Ứng dụng ví dụ DigitalOcean Spaces Django

Khi bạn đang thực hiện với thử nghiệm ứng dụng của bạn, bạn có thể nhấn CTRL + C để ngăn chặn sự runserver lệnh. Điều này sẽ đưa bạn trở lại môi trường lập trình của bạn.

Khi đã sẵn sàng rời khỏi môi trường Python của bạn , bạn có thể chạy lệnh deactivate :

  • deactivate

Việc hủy kích hoạt môi trường lập trình của bạn sẽ đưa bạn trở lại dấu nhắc lệnh terminal .

Kết luận

Trong hướng dẫn này, bạn đã tạo thành công ứng dụng Django cung cấp các file từ DigitalOcean Spaces. Trong quá trình này, bạn đã học về file tĩnh, cách quản lý file tĩnh và cách phân phát chúng từ dịch vụ cloud .

Bạn có thể tiếp tục tìm hiểu về phát triển web với Python và Django bằng cách đọc loạt bài hướng dẫn của ta về Phát triển Django .


Tags:

Các tin liên quan