Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

EazyPhoto: комфортабельный фотохостинг для своего сервера

Anna | 31.05.2014 | нет комментариев

В недалекие времена, когда flickr ещё не предлагал терабайт под хранение фотографий, а BitTorrent Sync только вышел на экраны интернета в своей небезопасной альфа-версии, была у меня надобность: делиться фотографиями с друзьями и не только. Но как обыкновенно у программистов это бывает, под словом «делиться» стоит значительно огромнее, чем выложить фоточки во ВКонтактик. А именно:

  • Выложить куда-нибудь фотографии на свой сервер с прекрасным и простым web-интерфейсом.
  • Легко и массово заливать и скачивать оригиналы изображений.
  • Иметь вероятность разграничить доступ к определенным альбомам.
  • Попытаться связать это с локальным сетевым хранилищем, Дабы не дублировать фотографии.
  • По вероятности удалять оригиналы фотографий с сервера через какое-то время и оставлять только фотографии с измененным размером.
  • По-максимуму даром! :)

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

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

Гугл обнаружил дюже много облачных сервисов для выкладывания фотографий, предуготовленных в основном для фотографов (и не только). Суть всех сервисов сводится к тому, что начиная с определенного объема нужно платить фиксированную сумму в месяц. Если за полгода сумма не выглядит огромный, то через два года она будет неприятным напоминанием. Параллель дозволено провести с оплатой ru-доменов по 600 рублей в год в nic.ru и с непрерывным напоминанием себе, что нужно бы перевести теснее эти домены к иным регистраторам :) .

С иной стороны, если у вас теснее есть какой-нибудь сервер, то нужно применять его по максимуму. Я обнаружил два плана, которые в тезисе бы сумели подойти под мои задачи. Это Piwigo (прежний phpWebGallery) и Koken. Конечный план вообще дюже крепко порадовал. Но познакомившись с ними поближе, осознал, что это мне тоже не подходит.

Dropbox, Skydrive, Google (Picasa), Яндекс.Фотки — вот эти ребята отменно исполняли свои функции до тех пор, пока места хватало.

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

Хочу подробнее рассказать о том, что значит для меня термин «поделиться». Позже какого-то события (будь то поездка на природу либо прогулки по городу), в котором принимают участие несколько человек, возникает много фоток. Позже обработки фотки (300-700 МБ) отправляются на здешний NAS (Synology DS210j). И вот эту папку с NAS нужно бы выложить в Интернет, Дабы её скачали те самые друзья, которые есть на фотках.
Загружать/скачивать через браузер такой объем — не для меня.

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

Самое основное, обязаны быть оригиналы фотографий и типичный ресайз без фильтров (не то, что теперь предлагают VK и остальные). Потом, когда у всякого будет 4К телевизор (как теперь FullHD), будет дюже здорово полистать свой фотоархив и ещё раз порадоваться.

BitTorrent Sync

Позже того, как я прочитал новости о выходе первой версии BTSyncа под все платформы — я все понял. В моей голове Отчетливо выстроился алгорифм работы:

  1. Изначальная заливка фотографий происходит через BitTorrent Sync.
  2. Пользователь неважно где расшаривает папку и получает readonly secret key, при этом он может сделать это на NAS либо у себя локально.
  3. Дальше пользователь идет в веб-интерфейс управления и добавляет альбом через readonly secret key.
  4. Веб-интерфейс посылает команду BTSync скачать вот эту папку на сервере. Понемногу начинается скачивание на сервер.
  5. В это время в кроне либо ещё где идет проверка, скачалось ли все либо нет (а-ля индексация файлов). Все файлы, скажем, добавляются в БД, и к ним создается уменьшенная копия (т.е. каждая мета-информация попадает из подлинных файлов в базу данных).
  6. Через какое-то время мы удаляем оригиналы с сервера (но! они сохраняются у пользователей, которые поспели скачать).

У BTSync под Linux консольного API до сих пор нет. Но есть веб-интерфейс, тот, что моvmk!очередь:

var  SyncQueue  = make(chan *SyncItem) 
type SyncItem struct {
	Album    *model.Album
	FsPhotos model.PhotoList
	FullSync bool
	Filename string
}

Следственно нет необходимости отслеживать одновременный доступ к map’ам и иным значимым переменным. Все идет в одной всеобщей очереди.
Работа с базой данных тоже получилась достаточно легкой.
Вообще, если вы думали писать на go, но все не решались — мой вам совет: возьмите и напишите теснее что-нибудь на нем :)

И ещё одно: мои go-планы на github по идеологии помещены ненормально, т.к. в репозитории должна быть корневой только одна папка src. А у меня — целиком план. Мне как-то не удобно, когда рядом с начальным кодом в одной папке лежат примеры конфигов, README.md и прочие вспомогательные материалы.

Вывод

Со своими задачами сервис абсолютно справляется: хранилище все время в сети, на нем установлен BTSync. Позже того, как фотографии отправлены на хранилище, папка добавлена в BTSync и веб-интерфейсе сделан альбом — дозволено лечь спать. Сервер с eazyphoto сам скачает фотографии и добавит их в нынешний альбом. Утром дозволено зайти, проверить, и отправить ссылку друзьям. А друзья теснее при необходимости скачают оригиналы к себе через BitTorrent Sync.

Испробуй собери

Для тех, кто решил испробовать поднять это все у себя — вот ссылки:

  1. github.com/sergeyfast/eazyphoto-web — php-часть
  2. github.com/sergeyfast/eazyphotod — сам демон

 

Для тех, кто хочет потыкать и посмотреть пример

Ссылку на демо осмысленно не публикую. Но Яндекс поможет обнаружить по словам на черной плашке.

Все инструкции (либо их подобие) находятся внутри планов (open source такой open source :) .

Установка вспомогательного софта на примере Ubuntu

1. Установим btsync:

sudo add-apt-repository ppa:tuxpoldo/btsync
sudo apt-get update
sudo apt-get install btsync

Порт с данными = 0. Порт для веб-интерфейса: 8888. IP: 127.0.0.1

2. Установим go
Рекомендую через godeb blog.labix.org/2013/06/15/in-flight-deb-packages-of-go
Минимальная версия go: 1.1

3. Установим eazyphotod

git clone git://github.com/sergeyfast/eazyphotod.git
cd eazyphotod
export GOPATH=`pwd`
go get code.google.com/p/gcfg github.com/disintegration/imaging github.com/go-sql-driver/mysql github.com/howeyc/fsnotify github.com/rwcarlsen/goexif/exif github.com/sergeyfast/btsync-cli/src/btsync
go build -o eazyphotod src/*.go

Позже этого у нас возник бинарник.
Рекомендую сделать /usr/local/eazyphotod/ (user www-data), туда скопировать eazyphotod config.gcfg
Закинуть eazyphotod.conf в /etc/init/ и запустить (заранее настроив config.gcfg):

service eazyphotod start

(deb-way: засунть конфиг в /etc/eazyphotod.conf, бинарник в /usr/bin/eazyphotod, и указать ссылку на конфиг через -config параметр).

Последующее становление

Хотелось бы не пугать возможных пользователей админкой, а сделать им типичный веб-интерфейс для управления и примитивный скрипт/пакет для установки. Но все это актуально только с eazyphotod, потому что cron и php-процесс для гиков — очевидно не выход ;)

Если у кого-нибудь есть мысли по функциональности либо тому, как должно это все выглядеть (либо внезапно кто-нибудь хочет подмогнуть ;) — велком.

Напоследок: лирическое отхождение. Фотографируйте, делитесь с друзьями и родителями. Жизнь стремительно проходит, а фотоархив остаётся (желанно в RAID1 и дополнительной копией на случай апокалипсиса :)

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB