尝试使用Dokku Redis插件

    http://udzura.hatenablog.jp/entry/2014/05/29/121741

我写了这个,但还需要逐渐验证持久化层。因此尝试使用Redis插件。

介绍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应用程序,尽管可以更改名称,但是由于链接插件的行为令人不太放心,所以我建议放弃这个想法。

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

这样做会自动将redis和应用程序进行链接,并设置一个名为REDIS_URL的环境变量。

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

只需启用redis-brain.coffee,这个环境变量内容就能够直接为其使用。

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

写一个简单的备忘录功能并试一试。

# 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仅在容器内部存储数据,那么数据会被删除。不过,似乎并不是这样的情况:

    https://github.com/luxifer/dokku-redis-plugin/blob/master/commands#L31-L50

通过查看该行前后的内容,可以看到Redis数据目录会被挂载到`/home/dokku/.redis/volume-${APP_NAME}/`附近。因此,根据设置,即使发生服务器重新启动,数据仍然会保留下来。根据查看https://github.com/luxifer/dokku-redis-dockerfiles中的内容,Redis本身的设置似乎是按照Ubuntu Quantal的默认包进行的。


MariaDB插件貌似因为基础映像出现异常状态而无法正常运行,但这个运行得很好。使用纯粹自己创建的映像,我认为可以在其他数据库上制作插件也会很好。

广告
将在 10 秒后关闭
bannerAds