少し時間ができたのでCouchDB 1.0の環境を1.2にアップグレードする事にしました。
手製ツールの稼働検証やら、DTIのVPSに作った郵便番号検索の仕組みを更新するとか、1.0から1.2への変化をキャッチアップするだけで、何だかぐったりするような作業で腰が重かったのですが、この機会に(現実逃避を兼ねて)とりかかることにしました。
私のcouchdbの使い方はバックエンドサーバーとして使うものなので、フロントエンドにcouchdbを使おうとする普通の使い方をする方はSSLなどのセキュリティ設定にもっと注力する必要がある事に
進め方の方針
アップグレードとはいっても現状の環境は止めるわけにいかないので、さくらのVPSに構築したtestingステータスのDebian wheezy上に新規にEarlang, CouchDB、その他の自前ツール等々をインストールをして、切り替えることにしました。
最終的にはCNAMEで設定しているwww.yadiary.netのレコードを書き換える事で対応する予定です。
対象の環境
現行のDTIのプランは490円のCPU: shared 1core, Memory: 256MB (max. 1GB)の構成で、 スペックをみる限りはリッチですが、このアプリケーションの性能にはほとんど変化ないだろうと考えています。
さくらVPSに構築しようとしている環境は次の通りです。
- VPSプラン: さくらのVPS 2G (CPU: shared 3core, Memory: 2GB)
- OS: Debian wheezy (次期stable、現testing), 64bit (x86_64)
- Earlang: OTP-R15B01
- CouchDB: 1.2.0
ちなみにDTIにある現行機は、Debian squeezeで、Earlang/OTP-R14B, CouchDB-1.0.2という構成です。
CouchDB 1.0系と1.2系の違いについて
1.1での変更も含めた完全なリストは apache-couchdb-1.2.0.tar.gz に含まれるCHANGESファイルにあります。
Native SSLサポートが含まれていたり、細かい点ではセキュリティ上の改善点もいくつか含まれています。
インストール手順
基本的な進め方はCouchDB: 1.0.1から1.0.2のリリースアップ手順 (xstow対応版)に従って進めていきます。
バージョンアップする時には/usr/local/etc以下に配置してある設定ファイルを退避して、新しいバージョンの設定ファイルをコピー、編集する事になりますが、1.2.0でも進め方に違いはありませんでした。
今回もxstowを使って/usr/local以下にインストールするため、/usr/local/stow以下にインストールしたcouchdb-1.2.0の直下からvarディレクトリは/usr/local/var以下に移動しています。 さらにスクリプトファイルから/usr/local/stow/couchdb-1.2.0/varを参照している個所を修正します。
確認するべき対象は次のコマンドで確認しました。
$ find . -type f | while read file ; do grep 1.2.0/var $file > /dev/null 2>&1 && echo $file ; done
以前はetcファイルも/usr/local/etcに直接展開していましたが、今回は止めました。 バージョンアップの頻度は思ったよりも多くはなくて、その度にlocal.iniをコピーしても手間ではなさそうですから。
VPSサーバでの稼働検証
普通にサーバーを立ち上げるとIPv4のloopbackアドレス(127.0.0.1)にバインドします。 手元にないサーバーへ接続する場合に、グローバルアドレスにいきなりバインドすると外部に対して無防備になってしまいます。
一般的にサービス前のサーバーに接続するために、いくつかの方法が考えられます。
- sshを使いlocal portとremote portを接続する
- iptables/ip6tablesを使い、クライアントマシンからの接続のみを有効にする
- stunnelを使い手元のクライアントとサーバーを接続する
稼働確認という意味では、sshが一番簡単だろうと思います。 サービスイン後も使い続けるのであれば、stunnelがお勧めです。
ただWebサーバーのVirtualHostや、SSLポートのように、アクセス時に指定するサーバー名も重要な要素となる場合には、そうも簡単にはいきません。 今後のためにはiptablesを使った方法も、見当しておく必要があります。
というわけで、今回はiptables/ip6tablesを使ってグローバルアドレスにバインドさせてみる事にします。
iptablesを使った接続制御
iptables/ip6tablesを使う場合には、既にあるルールを汚染せずに追加、削除を行なう必要があります。 ここではポート番号を5985にして、このポート番号に対する制御は事前にされていない前提で作業を行ないます。
local.iniファイルの編集
IPv6アドレスを使っていますが、IPv4アドレスを使う場合には、アドレスの他にip6tablesをiptablesに読み替えてください。
port = 5985 bind_address = 2001:xxxx:31d5:87d3::1
サーバー起動前:iptablesへのルール追加
デフォルトのINPUTルールが、ACCEPTでなければ2行目は不要ですが、明示的に1行目で指定した以外のIPv6アドレスからの接続を拒否しています。
$ sudo ip6tables -A INPUT -p tcp --dport 5985 -s 2001:3e0:a32:xxxx:8d45:678a:2fe8:xxxx -j ACCEPT $ sudo ip6tables -A INPUT -p tcp --dport 5985 -j DROP
稼働確認
サーバー上の設定が反映されている事を確認します。
$ sudo ip6tables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp 2001:3e0:a31:1:7d44:6780:2fd9:ca43/128 anywhere tcp dpt:5985 DROP tcp anywhere anywhere tcp dpt:5985
設定が反映されていれば、サーバーを起動します。
$ sudo /usr/local/etc/init.d/couchdb start
これでWebサーバからアクセスする事ができます。 IPv6アドレスを使う場合にはURLが http://[2001:3e0:a32:xxxx:8d45:678a:2fe8:xxxx]:5985/_utils/のように[]で囲む点に注意が必要です。
で、いろいろ作業が終ったらサーバを停止しておきます。
$ sudo /usr/local/etc/init.d/couchdb stop
サーバー停止後:iptablesルールの削除
偶然サーバーが起動してしまう可能性もありますが、将来的にこの方法を使う事はないので、ip6tablesルールを削除しておきます。
$ sudo ip6tables -D INPUT -p tcp --dport 5985 -s 2001:3e0:a32:xxxx:8d45:678a:2fe8:xxxx -j ACCEPT $ sudo ip6tables -D INPUT -p tcp --dport 5985 -j DROP
作業が終ったところで、 $ sudo ip6tables -L で追加したルールが残っていない事を確認します。
まとめ
とりあえず、これで動くところまでは確認できました。 ここからはいままで作ってきたパッチを1.2に対応させていきます。
参考文献
CouchDBについては公式Webサイトは宣伝要素が強いので、CouchDB Wikiがより実践的で、役に立つと思います。
0 件のコメント:
コメントを投稿