Docker Couchbase Server の起動スクリプト
Docker で Couchbase Server のコンテナを作成し、サービスを起動するスクリプトです。
sudo /etc/init.d/couchbase-server start # waiting for finishing to start couchbase-server sleep 30s # Setup Administrator username and password curl -v -X POST http://localhost:8091/settings/web -d 'password=password&username=admin&port=8091' sleep 5s # Setup Bucket curl -u admin:password -v -X POST http://localhost:8091/pools/default/buckets \ -d 'flushEnabled=1&threadsNumber=3&replicaIndex=0&replicaNumber=0&evictionPolicy=valueOnly&ramQuotaMB=597&bucketType=membase&name=default&authType=sasl&saslPassword=' sleep 5s # Setup Index RAM Quota curl -u admin:password -X POST http://localhost:8091/pools/default \ -d 'memoryQuota=5000' -d 'indexMemoryQuota=269'
Couchbase Server を起動し、REST API にて admin 用のユーザーとパスワードを設定。
その後、Bucket も作るようにしているのですが、いくつかの sleep が散見されます。
最初はこの sleep 置いてなかったのですが、Couchbase Server 起動コマンドを叩いた直後は、REST API が使えないので、Bucket のセットアップ以降が失敗していました。
とはいえ、適当に固定した時間を sleep させるのは不安定なので、retry function を設けました。
sudo /etc/init.d/couchbase-server start function retryRequest () { count=0 retry_upper_limit=5 request=$1 while : do command="curl -L ${request} -o /dev/null -w %{http_code}\n -s" res=$(${command}) if [ $res = 200 ] || [ $res = 202 ] ; then break fi count=$(expr $count + 1) if [ ${count} -gt ${retry_upper_limit} ] ; then exit -1 fi sleep 5s done } # waiting for finishing to start couchbase-server retryRequest "http://localhost:8091" # Setup Administrator username and password retryRequest "-X POST http://localhost:8091/settings/web -d password=password&username=admin&port=8091" # Setup Bucket retryRequest "-u admin:password -v -X POST http://localhost:8091/pools/default/buckets -d flushEnabled=1&threadsNumber=3&replicaIndex=0&replicaNumber=0&evictionPolicy=valueOnly&ramQuotaMB=597&bucketType=membase&name=default&authType=sasl&saslPassword=" # Setup Index RAM Quota retryRequest "-u admin:password -v -X POST http://localhost:8091/pools/default -d memoryQuota=2000&indexMemoryQuota=269"
各REST API を取り合えず叩いてみて、成功コードが返ってこなかったら、5秒待ってリトライするようにしました。
環境に依存すると思いますが、REST API が使えるようになるまで4回ほどリトライしているので、20秒ほど要しているようです。