Eazyphoto: Уютный Фотохостинг Для Вашего Сервера

В не столь отдаленные времена, когда Flickr еще не предлагал терабайт для хранения фотографий, а BitTorrent Sync только что вышел в Интернете в своей небезопасной альфа-версии, у меня возникла необходимость: поделиться фотографиями с друзьями и многое другое.

Но как это обычно бывает у программистов, слово «поделиться» стоит гораздо больше, чем размещение фотографий в ВКонтакте.

А именно:

  • Загрузите фотографии куда-нибудь на свой сервер с помощью красивого и простого веб-интерфейса.

  • Исходные изображения легко загружать и скачивать оптом.

  • Возможность ограничить доступ к определенным альбомам.

  • Попробуйте связать это с локальным сетевым хранилищем, чтобы не дублировать фотографии.

  • Если возможно, через некоторое время удалите оригинальные фотографии с сервера и оставьте только фотографии с измененным размером.

  • По максимуму бесплатно ! :)
После таких мыслей в голове начинает зарождаться идея: «Нужно креативить…» — и ты не можешь остановиться.



Что сейчас предлагают фотохостинги?

Google нашел множество облачных сервисов для загрузки фотографий, предназначенных в основном для фотографов (и не только).

Суть всех услуг в том, что начиная с определенного объема вы должны платить фиксированную сумму в месяц.

Если через полгода сумма будет выглядеть не такой уж и большой, то через два года это станет неприятным напоминанием.

Можно провести аналогию с оплатой 600 рублей в год за ru-домены на nic.ru и постоянным напоминанием себе, что вам следует передать эти домены другим регистраторам :).

С другой стороны, если у вас уже есть сервер, то вам нужно использовать его по максимуму.

Я нашел два проекта, которые в принципе могли соответствовать моим потребностям.

Этот Пивиго (ранее phpWebGallery) и Кокен .

Последний проект меня очень порадовал.

Но познакомившись с ними поближе, я понял, что и это меня не устраивает. Dropbox, Skydrive, Google+ (Picasa), Яндекс.

Фото — эти ребята отлично выполняли свои функции, пока хватало места.



Поделиться с друзьями

Я хотел бы поговорить подробнее о том, что для меня означает термин «совместное использование».

После какого-то мероприятия (будь то поездка на природу или прогулка по городу), в котором принимают участие несколько человек, появляется множество фотографий.

После обработки фотографии (300–700 МБ) отправляются на локальный NAS (Synology DS210j).

И эту папку с NAS надо выложить в интернет, чтобы ее могли скачать те же друзья, что на фотографиях.

Загружать/скачивать такой объем через браузер - не для меня.

Но в конечном итоге я хочу иметь ссылку на альбом, которую я могу отправить кому-нибудь другому.

Ну и еще было бы неплохо иметь список альбомов.

Простой нормальный процесс.

Самое главное, чтобы были оригинальные фотографии и нормальный ресайз без фильтров (а не то, что сейчас предлагают ВК и другие).

Тогда, когда у каждого будет 4К-телевизор (как сейчас FullHD), будет очень здорово просматривать свой фотоархив и лишний раз радоваться.



БитТоррент Синхронизация

После того, как я прочитал новость о выходе первой версии BTSync для всех платформ, я всё понял.

У меня в голове есть четкий алгоритм работы:

  1. Первоначальная загрузка фотографий происходит через BitTorrent Sync.
  2. Неважно, где пользователь расшаривает папку и получает секретный ключ только для чтения, и он может сделать это на NAS или локально.

  3. Далее пользователь переходит в веб-интерфейс управления и добавляет альбом, используя секретный ключ только для чтения.

  4. Веб-интерфейс отправляет команду BTSync для загрузки этой папки на сервер.

    Постепенно начинается загрузка на сервер.

  5. В это время в короне или еще где-то идет проверка все ли скачалось или нет (а-ля индексация файлов).

    Все файлы, например, добавляются в базу данных, и из них создается уменьшенная копия (т.е.

    вся метаинформация поступает из исходных файлов в базу данных).

  6. Через некоторое время удаляем оригиналы с сервера (но! они сохраняются у успевших скачать пользователей).

BTSync для Linux до сих пор не имеет консольного API. Но есть веб-интерфейс, который может выступать в роли API-сервера.

Вооружившись Go, я написал консольная утилита для работы с BTSync. Ну тогда я сделал это Сорт для PHP. И тогда останется только написать все остальное ;)

EazyPhoto

Моя основная специальность — я PHP-программист. Верстка - это худшее, что может со мной случиться :).

Поэтому, взяв тональную основу, я попыталась на ней что-то изобразить.



EazyPhoto: уютный фотохостинг для вашего сервера

На главной странице мы видим список альбомов с названиями и датами.

А на странице альбома квадратные фотографии с превью, как в дропбоксе.

Если к каждой фотографии добавить описание и задать ее порядковый номер, получится что-то вроде блога.

Размер больших фотографий для веб-интерфейса я выбрал как маркетолог — FullHD :) Управление альбомами и фотографиями осуществляется внутри административной панели.

Вот как выглядит добавление нового альбома: просто введите название, дату начала и секрет только для чтения.



EazyPhoto: уютный фотохостинг для вашего сервера

На чем все это написано? Проект написан на внутреннем движке Изе .

Он далек от совершенства, но позволяет быстро решать те или иные проблемы за определенный короткий промежуток времени.

У него нет нормальной документации, но он написан на PHP, поэтому чтобы что-то понять, нужно просто заглянуть внутрь (прямо как в идеологии go-lang :).

База данных: Я выбрал MySQL, потому что он есть у всех.

В основном здесь интересны эти два знака: альбомы и фотографии.



EazyPhoto: уютный фотохостинг для вашего сервера



Индексирование файлов

Сначала я написал индексатор на PHP: он прогонял новые альбомы, добавлял их в очередь на загрузку в BTSync, а потом пробегал существующие и добавлял новые найденные файлы.

Достаточно ставить скрипт в cron раз в 5 минут: этого будет достаточно.

Но не для меня.

Было бы здорово, если бы фотографии добавлялись в базу данных по мере загрузки.

И здесь на помощь приходит Go.

Easyphotod

Небольшой демон, который зависает и проверяет каталоги на наличие новых файлов.

Создает превью фотографий и сохраняет их в базу данных.

Общается с BTSync. Вот его основные задачи.

Для реализации этих задач я использовал следующие пакеты:

Проверив все необходимые функции в демо-проекте, я начал собирать это все в рабочую версию.

Получение заняло около двух дней готовый результат .

Как это работает? eazyphotod запускается через выскочку (в будущем планирую переконвертировать в супервизорд).

После запуска он загружает все альбомы в память и начинает сканировать каталоги на наличие новых фотографий.

Параллельно с этим запускается горутина для отслеживания изменений в файловой системе и обработки HTTP-запросов (обновление метаинформации альбома и добавление нового альбома в очередь загрузки).

Все запросы (изменение размера, обновление метаинформации, событие создания нового файла) объединены в один.

очередь :

   

var SyncQueue = make(chan *SyncItem) type SyncItem struct {

Теги: #хостинг фото #golang #bittorrent sync #разработка сайтов #php #Go
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.