Настройка взаимодействия приложения Django с хранилищем объектов
Debian, Python, Ubuntu | Комментировать запись
Данный мануал поможет вам настроить приложение Django для взаимодействия с хранилищем объектов.
Требования
- Сервер Debian или Ubuntu (вам пригодятся мануалы по начальной настройке Debian или Ubuntu).
- Хранилище объектов и API ключ.
1: Настройка виртуальной среды
Чтобы обновить сервер, введите:
sudo apt-get update && sudo apt-get -y upgrade
Запустите следующую команду, чтобы убедиться, что Python 3 есть на вашем сервере:
sudo apt-get install python3
Установите pip, чтобы управлять пакетами Python.
sudo apt-get install -y python3-pip
Теперь можно установить модуль virtualenv, чтобы использовать его для настройки среды разработки:
sudo pip3 install virtualenv
Читайте также: Установка Python 3 и настройка среды разработки на сервере Ubuntu 16.04
2: Создание приложения Django и установка зависимостей
В домашнем каталоге сервера запустите следующую команду, чтобы создать каталог для проекта (для примера назовем его django-apps) и перейдите в него:
mkdir django-apps
cd django-apps
Внутри этого каталога создайте виртуальную среду с помощью следующей команды. Среда будет называться env, но вы можете называть ее, как хотите.
virtualenv env
Включите среду.
. env/bin/activate
Вы поймете, что находитесь в среде, потому что префикс вашей командной строки изменится. Он будет выглядеть примерно так, но будет меняться в зависимости от того, в каком каталоге вы находитесь:
(my_env) 8host@ubuntu:$
В среде с помощью pip установите пакет Django.
pip install django
Читайте также:
- Установка Django в Ubuntu и Debian
- Создание приложения Django и подключение к базе данных
- Создание моделей в Django
- Подключение интерфейса администратора Django
С помощью следующей команды создайте проект (здесь он условно называется mysite):
django-admin startproject mysite
Установите Boto 3, AWS SDK для Python, что позволит приложению взаимодействовать с S3, EC2 и т.п.
sudo pip install boto3
Также вам не обойтись без библиотеки django-storages, которая представляет собой набор пользовательских хранилищ для Django. Установите ее с помощью pip.
sudo pip install django-storages
3: Добавление каталогов и активов
Установив все зависимости, вы можете перейти в каталог mysite/mysite:
cd ~/django-apps/mysite/mysite
В каталоге mysite/mysite запустите следующую команду, чтобы создать каталоги static и templates:
mkdir static && mkdir templates
Затем создайте подкаталоги для изображений и CSS в каталоге static.
mkdir static/img && mkdir static/css
Создав каталоги, загрузите тестовый файл, который затем вы добавите в хранилище объектов. Перейдите в каталог img и загрузите в него изображение.
cd ~/django-apps/mysite/mysite/static/img
Загрузите любое тестовое изображение:
wget http://assets.example.com/example-img.png
Вы получите такой вывод:
Resolving www.example.com (www.example.com)... 104.16.24.4, 104.16.25.4
Connecting to www.example.com (www.example.com)|104.16.24.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1283 (1.3K) [image/png]
Saving to: ‘example-img.png’
example-img-6edd7377 100%[=====================================>] 1.25K --.-KB/s in 0s
2017-11-05 12:26:24 (9.60 MB/s) - ‘example-img.png’ saved [1283/1283]
Если вы запустите команду ls, вы увидите изображение example-img в каталоге static/img/.
Теперь можно перейти к редактированию файлов, связанных с приложением Django.
4: Редактирование файлов CSS и HTML
Начнем с редактирования таблицы стилей. Вы должны перейти в каталог css, чтобы добавить базовую таблицу стилей веб-приложения.
cd ~/django-apps/mysite/mysite/static/css
С помощью текстового редактора откройте документ:
nano app.css
Добавьте в него 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;
}
Сохраните и закройте файл.
Откройте каталог templates:
cd ~/django-apps/mysite/mysite/templates
Теперь нужно открыть файл home.html и добавить в него HTML для отображения главной страницы веб-приложения. Откройте файл в редакторе:
nano home.html
Добавьте в него:
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Object Storage + Django Tutorial</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/app.css' %}">
</head>
<body>
<center>
<header>
<h1>Object Storage + Django Tutorial</h1>
</header>
<main>
<img src="{% static 'img/example-img.png' %}">
<h2>Congratulations, you’re using object storage!</h2>
</main>
</center>
</body>
</html>
Сохраните и закройте файл. Теперь нужно обновить urls.py, чтобы этот файл указывал на новый файл home.html. Перейдите в каталог:
cd ~/django-apps/mysite/mysite
Отредактируйте файл urls.py:
nano 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'),
]
Теперь можно отредактировать файл settings.py, чтобы интегрировать его с хранилищем объектов.
5: Обновление настроек
Пришло время обновить файл settings и указать в нем учетные данные хранилища, чтобы получить доступ к тестовой странице.
Имейте в виду: для краткости в этом примере учетные данные будут жестко кодироваться, но это довольно опасно для производственной установки. Рекомендуется использовать пакет типа Python Decouple, чтобы замаскировать учетные данные хранилища. Этот пакет будет разделять параметры хранилища от исходного кода, что необходимо приложению Django в производстве класса.
Перейдите в каталог, где хранится ваш файл:
cd ~/django-apps/mysite/mysite
Откройте его в редакторе:
nano settings.py
В ALLOWED_HOSTS укажите ip своего сервера:
...
ALLOWED_HOSTS = ['your-server-ip']
...
Затем добавьте storages в раздел установленных приложений и удалите django.contrib.admins, так как в этом мануале это не используется. Он должен выглядеть следующим образом.
...
# Application definition
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'storages'
]
...
Затем добавьте выделенный код в раздел TEMPLATES , чтобы проект знал, где найти файл home.html.
...
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',
],
},
},
]
...
Теперь нужно обновить настройки в конце файла. После раздела # Static files нужно вставить следующие строки. Укажите свой access key, имя корзины и каталог, в котором будут храниться файлы.
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
AWS_ACCESS_KEY_ID = 'your-storage-access-key'
AWS_SECRET_ACCESS_KEY = 'your-storage-secret-access-key'
AWS_STORAGE_BUCKET_NAME = 'your-storage-bucket-name'
AWS_S3_ENDPOINT_URL = 'https://nyc3.your-storage.com'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'your-storage-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'
Теперь можно интегрировать приложение Django с хранилищем объектов.
6: Сбор статических файлов
Теперь запустите collectstatic, и файлы будут переданы (включая изображение, которое вы сохранили в каталоге static) в каталог в хранилище, который вы определили в файле settings.
Перейдите в этот каталог:
cd ~/django-apps/mysite
Запустите команду:
python3 manage.py collectstatic
Вы увидите следующий вывод. По запросу введите yes.
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:
После этого вы увидите, что файл был скопирован в хранилище:
Copying '/root/django-apps/mysite/mysite/static/css/app.css'
1 static file copied, 1 unmodified.
После этого в каталоге хранилища появятся каталоги css и img. В каталоге css будет файл app.css, а в img – тестовое изображение example-img.png.
7: Тестирование приложения
Теперь можно протестировать работу приложения. Для этого попробуйте открыть страницу, на которой обслуживается статический файл.
Для начала убедитесь, что брандмауэр пропускает трафик по порту 8000:
sudo ufw allow 8000
Теперь можно запустить сервер:
python manage.py runserver your-server-ip:8000
В веб-браузере откройте http://your-server-ip:8000, чтобы увидеть результат работы Django-приложения. В браузере вы увидите следующий результат:
Object Storage + Django Tutorial
Congratulations, you’re using object storage!
Нажмите CTRL + C, чтоб остановить команду runserver. Это вернет вас в стандартное окружение.
Чтобы отключить среду Python, введите:
deactivate
Деактивация среды разработки вернет вас в командную строку терминала.
Заключение
Вы успешно создали приложение Django, которое обслуживает файлы из хранилища объектов. Теперь вы умеете управлять статическими файлами и обслуживать их из облачного сервиса.
Читайте также:
- Установка Django в Ubuntu и Debian
- Создание приложения Django и подключение к базе данных
- Создание моделей в Django
- Подключение интерфейса администратора Django