LoginSignup
13
14

More than 5 years have passed since last update.

Dokku Redis Plugin を試す

Posted at

こうは書いたものの永続化層についても徐々に検証していかねばならぬ、ということでRedis Pluginを試す。

dokku-redis-pluginのご紹介

いくつかあるが、 luxifer/dokku-redis-plugin を試した。

インストール。Dokkuが動いているサーバでrootになっていれる必要がある。Dokku v0.2.3 だとSSH経由でインストールしようとしてもうまくいかなくて、なんなの感強い。

また、linkプラグインを一緒に入れる。

$ cd /var/lib/dokku/plugins
$ git clone https://github.com/rlaneve/dokku-link.git link
$ dokku plugin-install link
$ git clone https://github.com/luxifer/dokku-redis-plugin redis
$ dokku plugins-install redis

これで redis:create などのコマンドが打てる。最初に、redisのコンテナを作る。

$ ssh -t dokku@dokku001.example.local redis:create hubotest

同じ名前 で Hubot のアプリケーションを作る。名前を変えられるらしいけど、linkプラグインの挙動がいまいち不安なのでやめた方が良いと思う。

$ git remote add dokku dokku@dokku001.example.local:hubotest
$ git push dokku master

こうすると勝手にredisとappがリンクされる、んで REDIS_URL という環境変数がセットされる。

$ ssh -t dokku@dokku001.example.local config hubotest
=== hubotest config vars ===
REDIS_URL: redis://172.17.0.2:6379

この環境変数はそのまま redis-brain.coffee にとって利用できる内容なので、あとは redis-brain.coffee を有効にするだけである。

$ echo '["redis-brain.coffee"]' > hubot-scripts.json
$ git add . && git commit -m 'Activate brain!!'
$ git push dokku master

以下のようなシンプルなメモ機能を書いて試してみる。

memo-simple.coffee
# Description:
#   簡易メモ。
#
# Commands:
#   hubot memo <key> <内容> - <内容> を key に紐付けて保存する
#   hubot memo <key> - 紐づいたメモを閲覧する
#   hubot memo-delete <key> - 紐づいたメモを削除する
#

module.exports = (robot) ->
  robot.respond /memo (.*(?: +)?(?:.*))/, (msg) ->
    messages = msg.match[1].split(/\s+/)
    key = messages.shift()
    value = messages.join(' ')
    if value is ''
      value = robot.brain.get "memo::#{key}"
    else
      robot.brain.set "memo::#{key}", value
      msg.send 'Saved!'

    if value is '' or !value
      msg.send "Memo: #{key} に関連づいたメモはありません。"
    else
      msg.send "Memo: #{key} = #{value}"

  robot.respond /memo-delete (.*)/, (msg) ->
    key = msg.match[1]
    robot.brain.remove "memo::#{key}"
    msg.send "Memo: #{key} に関連づいたメモを削除しました。"
udzura | hubot-sample: help memo                                                      
    -- | Notice(hubot-sample): hubot-sample-sample memo <key> - 紐づいたメモを閲覧する
udzura | hubot-sample: memo ジャバ                                                    
    -- | Notice(hubot-sample): Memo: ジャバ に関連づいたメモはありません。            
udzura | hubot-sample: memo ジャバ あなたと                                               
    -- | Notice(hubot-sample): Saved!                                                 
    -- | Notice(hubot-sample): Memo: ジャバ = あなたと                                    
udzura | hubot-sample: memo ジャバ                                                    
    -- | Notice(hubot-sample): Memo: ジャバ = あなたと

良さそう。

コンテナ名とか

root@dokku001:/var/lib/dokku/plugins# docker ps
CONTAINER ID        IMAGE                     COMMAND                CREATED             STATUS              PORTS                     NAMES
dd0c81efe4e0        dokku/hubotest:latest     /bin/bash -c '/start   37 minutes ago      Up 37 minutes       0.0.0.0:49167->5000/tcp   dreamy_carson       
f3799752dcdb        redis/hubotest:latest     /bin/start_redis.sh    About an hour ago   Up About an hour    0.0.0.0:49165->6379/tcp   angry_hypatia       

とのこと。

永続化って言うけどサーバ自体リブートしたらどうなるの?

Redisがコンテナ内部だけでデータを保存していたら消える。けどそうはなっていないようで:

:arrow_up: の辺を見ると分かるけれども /home/dokku/.redis/volume-${APP_NAME}/ のあたりにRedisのデータディレクトリをマウントしてくれる。なので設定によるけどサーバ再起動がかかっても残る。Redis自体の設定は https://github.com/luxifer/dokku-redis-dockerfiles を見る限りUbuntu Quantalのパッケージのデフォルトのままみたい。


MariaDB Plugin とかはベースイメージが異常な状態っぽくてうまく動かなかったけど、これは動いて良かった。素直に作ったイメージを用いて、他のDBでもプラグインを作ると良さそうに思う。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14