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