Django — библиотека для создания сайтов на языке Python.
Heroku — платформа, которая позволяет размещать сайты, сделанные на Django.
Heroku не предоставляет постоянного хранилища для файлов, которые пользователь загружает через сайт, поэтому необходимо воспользоваться каким-то сторонним сервисом, например, Amazon S3.
Допустим, что мы уже зарегистрировались на Heroku и Amazon.
Настройка Amazon
Перейдем в My Security Credentials (учетные данные безопасности).
Создадим новый ключ доступа с помощью кнопки Create New Access Key.
Появится окно с идентификатором ключа и секретным ключом. Их надо сохранить, чтобы потом настроить Heroku. Сохранить можно в файл с помощью кнопки Download Key File.
Теперь нужно перейти в Amazon S3 и создать хранилище (кнопка Create Bucket).
Зададим DNS-совместимое имя хранилища и регион такой же как на Heroku, чтобы минимизировать задержки при передаче данных. Остальные настройки можно оставить без изменения. Имя понадобится для настройки Heroku.
Работать с файлами и папками хранилища можно прямо в браузере. Можно создавать папки, загружать файлы, удалять то и другое, переименовывать, перемещать, копировать и прочее.
При загрузке файла создается ссылка на него, по которой он будет доступен в интернете.
Загрузим один файл, чтобы узнать по какому адресу располагается наше хранилище. Адрес зависит от выбранного региона. Часть ссылки, которая подчеркнута красным, понадобится для настройки Heroku.
Настройка Heroku
Перейдем в настройки приложения и назначим переменные окружения, которые здесь называются Config Variables.
Требуется назначить 4 переменные окружения на основе настроек Amazon:
AWS_ACCESS_KEY_ID
— идентификатор ключа.AWS_SECRET_ACCESS_KEY
— секретный ключ.AWS_STORAGE_BUCKET_NAME
— имя хранилища.AWS_URL
— адрес, по которому располагается хранилище.
Настройка проекта Django
Для работы с Amazon S3 нужно установить пакеты django-storages и boto3.
- django-storages — это коллекция хранилищ для Django.
- boto3 — библиотека для работы с сервисами Amazon.
Если используется файл requirements.txt для удовлетворения зависимостей, то в него нужно прописать пакеты нужных версий, например:
django-storages==1.6.5 boto3==1.4.7
Установить пакеты можно следующей командой:
pip install -r requirements.txt
В файле settings.py нужно прописать следующий код.
INSTALLED_APPS = ( ... 'storages', ... ) AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID') AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY') AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME') AWS_URL = os.environ.get('AWS_URL') DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' AWS_MEDIA_URL = "{}/{}/".format(AWS_URL, AWS_STORAGE_BUCKET_NAME) MEDIA_URL = AWS_MEDIA_URL