2013年5月17日金曜日

自前でWevDAVサーバを立てて、DropboxをWebDAV化する

さくら VPS に Dropbox をインストールして WebDAV 化する | 澍法雨に感動した。一言で言うと、LinuxサーバをDropboxのWevDAVゲートウェイにするという技である。記事タイトルにはさくらVPSとあるが、別にさくらVPSでなくても、普通のLinuxサーバでよい。
この手を使えば、OtixoとかDropDavとかの有料サービスを使わなくても、DropboxにWebDAV経由でアクセスできる。
WebDAVの何がイイかって、普通のDropboxクライアントアプリと違ってPCのローカルにファイルが残らないし、Proxyだって超えられちゃう。
Windows7ならWebDAVをネットワークドライブとしてマウントできるので、使い勝手もローカルフォルダと同じ。こいつぁすげえ。
早速、手持ちのCentOSサーバでやってみた。
LinuxのCLI版Dropboxクライアントを入れる
CLI版Dropboxはユーザー単位でインストールする仕様である。 Dropbox をダウンロード - Dropbox に従いインストールする。ちなみに今回は32bit。
$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf -
管理用CLIスクリプトもダウンロードし、PATHが通ってるとこ(/usr/binとか)に置く。
$ wget https://www.dropbox.com/download?dl=packages/dropbox.py
$ chmod +x dropbox.py
$ mv dropbox.py /usr/bin/
サーバ起動時にDropboxデーモンを自動起動させるため、 DropboxをLinuxで利用する方法 - maruko2 Note.から /etc/init.d/dropbox と /etc/sysconfig/dropbox を頂戴する。

chkconfigで自動起動をonにする。
$ chkconfig --add dropbox
$ chkconfig --list dropbox
dropbox         0:off   1:off   2:on    3:on    4:on    5:on    6:off
起動してみる。
$ service dropbox start
dropboxd を起動中                                        [  OK  ]
Dropboxを使う時のお約束として、lansync(LAN同期)をOffにする。lansyncとは同一セグメント内のDropbox間でファイルを同期するという機能だが、こいつがOnになっていると周囲にUDP17500番のブロードキャストを撒き散らしてお行儀が悪いため、自宅などの狭い環境で使う時以外は必ずOffっておくのがマナーだ。
設定は、Dropboxクライアントが動いている状態で、ユーザー毎に行う。設定内容は~/.dropboxの下のDBに書き込まれている模様(暗号化されててDBの中は見れない)。
$ dropbox.py lansync n
ここまででDropbox側の設定は終わり。
Dropbox同期ディレクトリを、WebDAV用ディレクトリに移す
WebDAV化する前に少し下準備をする。
CLI版のDropboxクライアントは、ユーザーホーム(~/)の下にDropboxというディレクトリを作って、そこがDropboxサーバと同期する仕様になっている。
これではWebDAV化するには色々と不都合なので、WebDAV用ディレクトリ配下に移すこととする。
今回は、/data/webdav/ ディレクトリをWebDAVとして公開し、その配下にユーザー別のディレクトリを、さらにその配下にDropboxディレクトリを作る方針とした。
例えば、dsp74118ユーザのDropbox同期ディレクトリは、/data/webdav/dsp74118/Dropbox/ となる。
Linux版で同期ディレクトリの場所を変える方法はいくつかあるようだが、ひとまず単純にシンボリックリンクを使う方法を採用。
Dropboxクライアントを止めた状態で~/Dropboxを/data/webdav/dsp74118 に移動させ、ユーザーホームからシンボリックリンクを張ってやる。
$ service dropbox stop
dropboxd を停止中                                          [  OK  ]
$ mkdir -p /data/webdav/dsp74118
$ mv /home/dsp74118/Dropbox /data/webdav/dsp74118/
$ ln -s /data/webdav/dsp74118/Dropbox /home/dsp74118/
$ service dropbox start
dropboxd を起動中                                        [  OK  ]
このディレクトリには、利用ユーザー本人とapacheの両方が読み書きアクセスできる必要があるので、オーナーとパーミッションを変更する。
$ chown -R dsp74118:apache /data/webdav/dsp74118
$ chmod -R 770 /data/webdav/dsp74118
ApacheでWebDAVを動かす
ではいよいよWebDAVを動かす。 今回はポートベースのバーチャルホストでWebDAVを動かすことにした。
httpd.confに↓みたいに書いて
(snip)
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
(snip)
<VirtualHost *:30080>
    ServerName hogedav
    DocumentRoot /data/webdav
    <Directory /data/webdav>
         DAV on
    </Directory>
</VirtualHost>
(snip)
Apacheを再起動する。
$ service httpd restart
※本当はアクセス制御をしたり、httpsにするべきだと思うけど、とりあえずテストなのでその辺は手抜き(本稿の趣旨でもないので)。
早速試してみる
では、WindowsマシンにてWebDAVなDropboxを体験してみる。 まずはネットワークドライブとしてマウントする。
Figure.1 WebDAVをネットワークドライブとしてマウント
マウントしたドライブを開く。ちゃんと"Dropbox"ディレクトリが見える。
Figure.2 WebDAV内のDropboxフォルダ
Dropboxフォルダの中はというと…。ちゃんとDropboxと同期されていることが分かる。
Figure.3 中身はバッチリDropboxと同期されている
では、書き込みのテストをする。"WebDavTest"フォルダを作成し、"てすてす.txt"ファイルを保存してみる。
Figure.4 テストファイルを作成
作成したファイルがちゃんとサーバに同期されたか、DropboxのWeb UIで確認してみる。
Figure.5 テストファイルをWeb UIで確認
OK、OK。 この後、ファイル削除もやってみたが、何の問題もなく成功した。
まとめ
それほど手間もかからず、DropboxがWebDAVストレージになった。うーん便利。
あ、実際に使う時は、https化とアクセス制御は絶対にやってください。でないとDropbox内のファイルが世間にフルオープンになっちゃうので。

まあ、ライバルのSkyDriveは元からWebDAVが使えたりするんだけど…。

0 コメント:

コメントを投稿