homepage/source/_articles/2019-08-08-yandex-disk-image-hosting.md

64 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Яндекс.Диск как хостинг картинок
description: Использование возможностей Яндекс.Диска для хостинга картинок
keywords: [яндекс.диск, хостинг картинок, yandex disk, image hosting, hosting]
draft: true
---
# Яндекс.Диск как хостинг картинок
Я искал простой и надежный хостинг картинок для блога. Чтобы хранил картинки
годами, давал прямые ссылки и не закрылся в течение хотя бы пары лет.
Раньше я использовал в качестве хостинга фотографий для блога сервис
Яндекс.Фотки. С его помощью можно было получить картинки разных разрешений
для адаптивной верстки. Сервис работал уже продолжительно время, у него была
большая аудитория, им было удобно пользоваться.
Но в один момент Яндекс решил закрыть сервис. Вместо него появился Яндекс.Диск,
а фотоальбомы теперь были представлены в виде коллекций. Так же просто как
раньше уже было не получить прямых ссылок на загруженные фотки.
Яндекс.Диском я пользовался и до этого. Я знал, что он поддерживает
протокол WebDav. Это удобный протокол, с помощью которого можно подключить Диск
в виде жесткого диска себе в систему.
Одним из первых вариантов было написать прокси для того, чтобы использовать
именно WebDav и проксировать к нему запросы. У меня был бы web-server,
который принимал бы http-запросы и направлял их Диску.
С этой мыслью я и пошел читать документацию к Яндекс.Диску. И в самом конце
наше жемчужину. Оказывается, именно для изображений Диск умеет создавать
превью. Можно просто передать нужное разрешений и диск отдаст картинку.
Это было то, что нужно. Но для публичного использования было одно препятствие.
Для доступа к данным нужно авторизоваться. Делается это с помощью http-заголовка
`Authorization`.
Получалось, что все равно нужен прокси, чтобы скрыть авторизационные данные.
Прокрутив решения с отдельным приложением, которое бы подставляло в
запросы заголовок `Authorization`, я вспомнил о сервере [Caddy](caddy).
С его помощью прокси настраивается буквально в три строки.
```
preview.vakhrushev.me {
proxy /img https://webdav.yandex.ru {
transparent
header_upstream User-Agent "yandex-disk-previewer/1.0"
header_upstream Authorization "Basic {{ '{{' }} (yandex_disk.login ~ ':' ~ yandex_disk.password) | b64encode {{ '}}' }}"
}
tls anwinged@ya.ru
}
```
Данные авторизации я поместил в хранилище Ansible Vault и подставляю
при развертывании конфигурации на свой сервер. Также настройка прокси
ограничивает директории, к которым можно получить доступ.
Так как на Яндекс.Диске у меня хранятся и личные данные.
[ya-disk](https://disk.yandex.ru)
[ya-api](https://yandex.ru/dev/disk/doc/dg/concepts/quickstart-docpage/)
[ya-api-preview](https://yandex.ru/dev/disk/doc/dg/reference/preview-docpage/)
[caddy](https://caddyserver.com/)