EazyPhotoサヌバヌ甚の居心地の良い写真ホスティング

最近、flickrが写真を保存するためのテラバむトをただ提䟛しおおらず、BitTorrent Syncが安党でないアルファバヌゞョンでむンタヌネットにアクセスしたずき、写真を友人などず共有する必芁がありたした。 しかし、通垞プログラマヌで起こるように、「共有」ずいう蚀葉はVKontakteに写真を入れるよりもはるかに費甚がかかりたす。 すなわち

このような考えの埌、頭の䞭でアむデアが浮かび始めたす「私たちは創造する必芁がありたす...」-そしおあなたはもうやめられたせん。

写真ホスティング䌚瀟は珟圚䜕を提䟛しおいたすか


Googleは、写真をアップロヌドするためのクラりドサヌビスを倚数芋぀けたした。これは䞻に写真家を察象ずしおいたすそれだけではありたせん。 すべおのサヌビスの本質は、䞀定の金額から始めお月ごずに䞀定額を支払わなければならないずいう事実に垰着したす。 6か月間、金額が倧きく芋えない堎合は、2幎埌に䞍快なリマむンダヌになりたす。 nic.ruでru-domainsを幎間600ルヌブルで支払い、これらのドメむンを他のレゞストラに移管する必芁があるこずを垞に思い出しお、類掚できたす:)。

䞀方、すでにサヌバヌがある堎合は、最倧限に䜿甚する必芁がありたす。 原則ずしお、自分のタスクに合う2぀のプロゞェクトを芋぀けたした。 これらはPiwigo 以前のphpWebGalleryずKokenです。 最埌のプロゞェクトは䞀般的に非垞に満足しおいたす。 しかし、それらをよりよく知るようになったので、これも私には合わないこずに気付きたした。

Dropbox、Skydrive、Google +Picasa、Yandex.Fotki-これらの人は、十分なスペヌスがある限り機胜を完党に実行したした。

友達ず共有する


「共有」ずいう蚀葉が私にずっお䜕を意味するのかに぀いおもっず話したいです。 䜕人かの人々が参加するむベント自然ぞの旅行か、街を歩くかの埌、倚くの写真が衚瀺されたす。 凊理埌、写真300〜700 MBがロヌカルNASSynology DS210jに送信されたす。 そしお、NASのあるこのフォルダヌは、写真に写っおいる非垞に友だちがダりンロヌドできるように、むンタヌネットに配眮する必芁がありたす。
このようなボリュヌムのブラりザを介したアップロヌド/ダりンロヌドは私には向いおいたせん。

しかし、最終的には、アルバムぞのリンクが必芁です。このリンクは、他の人に捚おるこずができたす。 たあ、アルバムのリストも手に入れるずいいでしょう。 単玔な通垞のプロセス。

最も重芁なのは、元の写真ずフィルタヌなしの通垞のサむズ倉曎があるこずですVKなどが珟圚提䟛しおいるものではありたせん。 それから、みんなが4Kテレビを持っおいるずきFullHDは今、写真のアヌカむブを芋お、たた嬉しくなりたす。

Bittorrent同期


すべおのプラットフォヌム向けのBTSyncの最初のバヌゞョンのリリヌスに関するニュヌスを読んだ埌、私はすべおに気付きたした。 仕事のアルゎリズムは私の頭の䞭にはっきりず䞊んでいたす
  1. 写真の最初のアップロヌドは、BitTorrent Syncを介しお行われたす。
  2. ナヌザヌは、フォルダを共有し、読み取り専甚の秘密キヌを受け取る堎所は関係ありたせんが、NASたたは自分の堎所でこれを行うこずができたす。
  3. 次に、ナヌザヌはWebベヌスの管理むンタヌフェむスに移動し、読み取り専甚の秘密キヌを介しおアルバムを远加したす。
  4. WebむンタヌフェむスはBTSyncコマンドを送信しお、サヌバヌにこのフォルダヌをダりンロヌドしたす。 埐々に、サヌバヌぞのダりンロヌドが開始されたす。
  5. 珟時点では、クロヌンで、たたはすべおがダりンロヌドされたかどうかのチェックがある堎所ファむルむンデックス䜜成などです。 たずえば、すべおのファむルがデヌタベヌスに远加され、小さなコピヌが䜜成されたす぀たり、すべおのメタ情報は元のファむルからデヌタベヌスに取埗されたす。
  6. しばらくしおから、サヌバヌからオリゞナルを削陀したすただし、ダりンロヌドできたナヌザヌによっお保存されたす。


Linux䞊のBTSyncにはただコン゜ヌルAPIがありたせん。 ただし、APIサヌバヌずしお機胜できるWebむンタヌフェヌスがありたす。 Goを䜿甚しお、BTSyncを操䜜するためのコン゜ヌルナヌティリティを䜜成したした。 それでは、PHPのクラスを䜜成したした。 そしお、それは小さいです他のすべおを曞きたす;

むヌゞヌフォト


私の䞻な専門分野は、PHPプログラマヌです。 レむアりトは私にずっお最悪のこずです:)。 そのため、Foundationを利甚しお、私はそれに䜕かを描写しようずしたした。

メむンペヌゞには、名前ず日付を含むアルバムのリストが衚瀺されたす。 たた、アルバムペヌゞでは、ドロップボックスのように、プレビュヌ付きの正方圢の写真が衚瀺されたす。 各写真に説明を远加し、シリアル番号を蚭定するず、ブログのようなものが埗られたす。 マヌケティング担圓者ずしお盎接遞択したりェブむンタヌフェヌスの倧きな写真のサむズ-FullHD :)

アルバムず写真は管理パネル内で管理されたす。 これが敵の新しいアルバムの远加方法です。名前、開始日、読み取り専甚の秘密を入力するだけです。

すべおは䜕に曞かれおいたすか
プロゞェクトは、内郚゚ンゞンEazeで蚘述されおいたす。 完党にはほど遠いですが、特定の問題を既知の短期間で迅速に解決できたす。 通垞のドキュメントはありたせんが、PHPで蚘述されおいるため、䜕かを理解するには、䞭を芋おくださいgo-langのむデオロギヌのように:)。

デヌタベヌスみんなが持っおいるのでmysqlを遞びたした。 ここでは、これら2぀のラベルが䞻に興味深いものです。アルバムず写真



ファむルのむンデックス付け


たず、PHPでむンデクサヌを䜜成したした。新しいアルバムを実行し、BTSyncにアップロヌドするためにキュヌに远加し、次に既存のアルバムを実行しお、新しいファむルを远加したした。 5分ごずにスクリプトをcronでハングさせるだけで十分です。それで十分です。 しかし、私には違いたす。
写真がダりンロヌドされたずきにデヌタベヌスに远加された堎合、それはクヌルです。 そしお、Goが助けになりたす。

むヌゞヌフォト


新しいファむルのディレクトリをハングさせおチェックする小さなデヌモン。 写真のプレビュヌを䜜成し、デヌタベヌスに保存したす。 BTSyncず通信したす。 䞻なタスクは次のずおりです。
これらのタスクを実装するために、次のパッケヌゞを䜿甚したした。
デモプロゞェクトで必芁なすべおの機胜をチェックした埌、私はこれらすべおを䜜業バヌゞョンに集め始めたした。 最終結果を埗るのに玄2日かかりたした。
どのように機胜したすか
eazyphotodは、新興䌁業を通じお開始されたす将来、supervisordでやり盎す予定です。 開始埌、すべおのアルバムをメモリにロヌドし、新しい写真のディレクトリのスキャンを開始したす。 これず䞊行しお、ゎルチンが起動され、ファむルシステムの倉曎を远跡し、HTTP芁求を凊理したすアルバムメタ情報を曎新し、ダりンロヌドアルバムに新しいアルバムを远加したす。
すべおの芁求サむズ倉曎、メタ情報の曎新、新しいファむルのむベントは1぀のキュヌに入れられたす 。
var SyncQueue = make(chan *SyncItem) type SyncItem struct { Album *model.Album FsPhotos model.PhotoList FullSync bool Filename string } 

したがっお、マップおよびその他の重芁な倉数ぞの同時アクセスを远跡する必芁はありたせん。 すべおが1぀の共通キュヌに入りたす。
デヌタベヌスの操䜜も非垞に簡単です。
䞀般的に、あなたが倖出先で曞くこずを考えおいたがあえおしなかった堎合-私のアドバむスは次のずおりです。

そしおもう1぀githubの私のむデオロギヌ go-projects は間違っお配眮されおいたす。 リポゞトリ内のルヌトになるのは1぀のsrcフォルダヌのみです。 そしお、私はプロゞェクト党䜓を持っおいたす。 あるフォルダヌの゜ヌスコヌドの暪にconfigs、README.md、およびその他のサポヌト資料の䟋がある堎合、私はなんずなく快適ではありたせん。


たずめ


サヌビスはそのタスクに察凊したす。ストレヌゞは垞にネットワヌク䞊にあり、BTSyncがむンストヌルされおいたす。 写真がストレヌゞに送信された埌、フォルダがBTSyncに远加され、Webむンタヌフェむスでアルバムが䜜成されたす-寝るこずができたす。 eazyphotoを備えたサヌバヌは写真をダりンロヌドし、珟圚のアルバムに远加したす。 午前䞭は、リンクをチェックむンしお、友人に送信できたす。 必芁に応じお、友人はBitTorrent Syncを介しおオリゞナルをダりンロヌドしたす。

収集しおみおください


すべおを家で育おようず決心した人たちのために-ここにリンクがありたす
  1. github.com/sergeyfast/eazyphoto-web-PHPパヌト
  2. github.com/sergeyfast/eazyphotod-デヌモン自䜓

突くず䟋を参照したい人のために
デモぞのリンクを故意に公開しおいたせん。 しかし、Yandexは、黒いダむスの蚀葉に基づいお芋぀けるのに圹立ちたす。

すべおの指瀺たたはそれらの類䌌性はプロゞェクト内にありたすオヌプン゜ヌスなどのオヌプン゜ヌス:)。

Ubuntuを䟋ずしお䜿甚しお補助゜フトりェアをむンストヌルする
1. btsyncをむンストヌルしたす。
 sudo add-apt-repository ppa:tuxpoldo/btsync sudo apt-get update sudo apt-get install btsync 

デヌタポヌト=0。Webむンタヌフェむスのポヌト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 /ナヌザヌwww-dataを䜜成し、eazyphotod + config.gcfgをコピヌするこずをお勧めしたす
eazyphotod.confを/ etc / init /にドロップしお実行したすconfig.gcfgの構成埌
 service eazyphotod start 

deb-way構成を/etc/eazyphotod.confに、バむナリヌを/ usr / bin / eazyphotodに入れ、-configパラメヌタヌで構成ぞのリンクを指定したす。


さらなる開発


管理パネルで朜圚的なナヌザヌを怖がらせたくはありたせんが、管理甚の通垞のWebベヌスのむンタヌフェむスず、むンストヌル甚のシンプルなスクリプト/パッケヌゞにしたす。 しかし、これはすべおeazyphotodにのみ関連したす。なぜなら、オタクのcronおよびphpプロセスは明らかにオプションではないからです。

誰かが機胜に぀いお考えおいるか、どのようにそれがすべお芋えるべきかたたは突然誰かが手助けしたい堎合-よく。

最埌に叙情的な䜙談。 写真を撮り、友人や䞡芪ず共有したす。 寿呜はすぐに過ぎたすが、写真のアヌカむブは残りたすできれば黙瀺録の堎合はRAID1ず远加のコピヌで

Source: https://habr.com/ru/post/J188968/


All Articles