社内で slack のようなやつ使いたいから Let's Chat 使ってみる
Intro
Slack 使いたい。でも社外に社内の情報おくのってどうなのーっていう理由で、社内サーバの導入可能なチャットアプリをデプロイできるようにしてみた。
本題
Slack 使いたいけど社内の情報を SaaS に上げるのってどうなのよオーラが出ている 会社でつらい。 環境だと、自社サーバー(または VM)で使えるものじゃないと使えないという制約がありますよね。だからといっていきなり HipChat はおたかい。
っていうわけで、色々探してみるとやっぱり同じこと考えている人はいるようです。
このサイトの中で自社サーバーで動かすもの、いわば Bring your own Server(BYOS)のオープンソースは次の3つぐらい。
- sdelements/lets-chat · GitHub
- kandanapp/kandan · GitHub
- HashNuke/mogo-chat · GitHub
- echoplexus v0.2.6
ひかくなう
- kandan
- よさげ。
- Hubot との連携可能。
- 商用ライセンス版があるらしい。
- コード読めばそれ以外に特徴もあるかもしれない。
- Let's Chat
- 非常に良さげ。
- 機能は例えばこんな感じ。
- Security Compass · Security Compass で、稼働 10 % は自由に使っていいみたいなアレのプロジェクトで作られているものらしい。
- 認証がしっかりしているのは多分 Security Compass さんがセキュリティにうるさい体質なんだろうという憶測。
- SaaS じゃだめで S3 はいいの?っていうツッコミはナシで。その辺り、また次の記事に書こうかなーと。
- mogo-chat
- github のコミットのグラフを見ると、開発が終わっている模様。
- echoplex
- ぼちぼち。コード読めば特徴でるかも。
というわけで、Let's Chat を使ってみようという決断しましたとさ。
Deploy
なぜか CentOS 好きが周りに多い それでUbuntu 使いたいけど使えない ので、CentOS に Ansible で Let's Chat を構築するスクリプトを書いてみました。galaxy にも初登録。
Ken24/ansible-lets-chat · GitHub Ansible Galaxy | Find, reuse, and share the best Ansible content
LDAP とか kerberos とか S3 とかのモジュール追加はまだやってないし、なかで使う MongoDB を他のサーバーと共用して使うとかなるとまた別途設定が必要。 とりあえず、お試し的に使うとか、チームごとに物理的にも仮想的にも独立した用途で VM ガーッと作っちゃうっていう分にはいいかも。
ちなみに、Ubuntu だと Docker とか Vagrant で設定してまうコードが提供されています。Ansible のスクリプト作る意味あるんでしたっけーっていうのは、ほら、MongoDB とか他に追加するかもだし、Kerberos サーバーとの連携もしたいですし(震え声)。
イメージ
こんな感じ。写真はサムネイルが表示される。設定しだいではエクセルとか pdf とか色々アップロード可能(サムネイルはもちろん無し)。
Outro
HipChat のサーバ版使いたい←
Chef だと面倒くさいけど Ansible だとできること:踏み台構成
前提
本業で本格的に ansible 使うようになるんだけれども、本業では次のよーなサーバ構成になっている。
(操作端末)→(踏み台)→(サーバ郡)
これで ansible 使えるんだっけーっていうの調べてた。ついでに Chef も。 この踏み台がなんのためにあるかってのは、DeMilitarized Zone と Militarized Zone を分かつためにあるってことで*1。
本題
で、こんな環境で構成管理ツール使う場合、おそらく次のようになると思う。
構成 | Chef | Ansible |
---|---|---|
操作端末だけで可能 | knife-zero, knife-solo のみ? | ○ |
サーバ郡に構成管理サーバを導入 | ○ | ○ |
サーバ郡に構成管理サーバを導入すればできるってのは、例えば通信が(Install で download すること以外)MZ 内のみで閉じるっていうことなんでほぼ当たり前ですね。
多段 SSH
そもそも踏み台があるなかで直接サーバ群にアクセスするには
- netcatコマンドを利用
- sshの-Wオプションを利用
をすれば多段 ssh がかんたんにできるよう。
ちなみに -W の説明はこんな感じ
-W host:port Requests that standard input and output on the client be forwarded to host on port over the secure channel. Implies -N, -T, ExitOnForwardFailure and ClearAllForwardings. Works with Protocol version 2 only.
つまり、踏み台サーバには
- netcat コマンドが使える
- SSHv2 に対応
という条件がそれぞれ必要。
参考になるぺーじ
netcat コマンドを利用する場合は、
-W
オプションで行う場合には
が参考になるっぽい。(2015/3/1 追記:リンク間違えてたので修正しました)
余談
Hatena Engineer Seminar #4 参加レポ
まえがき
求人倍率 3 倍の Hatena Engineer Seminar にあたってしまったので参加レポを報告するんだってばよ!なぜかこの口調に慣れたんだってばよ!
セミナーそれぞれの感想
Goで書かれたmackerel-agentのOSS化や自動化にまつわるあれこれ
感想
- 「ソース公開するだけではうまく回らない」
- 「プルリクは公平に」
などなど,多分オープンソース業界では当たり前のことなんだろう.でも,その当たり前を知らない身としては非常に参考になる情報.ただ作ってポーイでは無いんだね(当然)
- 「自動化するツールもテストしないと,結局誰もメンテできなくなるよ」
う……心がいたい……
その他
「Go は素朴,Scala むずかしい」
はてなのサービスの開発環境
感想
Vagrant 導入後の話が非常に有益.いやほら,「自動化イェイイェイ」みたいなノリで自動化しても結局誰もメンテできなくなるって,結局意味あったんだっけってなるでしょ.
- 「(Vagrant でプロビジョニングのコード書いても)頬って置くと壊れる」
それで Ansible とか chef の出番かと思ったんだけれども,(Kernel とか PostgraSQL とかの)バージョンアップの対応していかないとそうなるのね.っていうのは自動化して運用してみないとわかんないでしょ.
ところで,「本番と別個に構成管理するコストかかる」とおっしゃっていたのが気になった.Chef とかだと開発環境用と本番環境用とでプロビジョニングのコード分けられるはずなんだけれども,それでも別個にかかるもんなのかなー.もともと一緒にやっちゃえ一緒にドンドコドンみたいなノリだったような気もするので.
その他
いたるところに出てくる余談の切れ味がすごい.
はてなブックマークの新機能における自然言語処理の活用
一番聞きたかった内容.むかーし Finding Scientific Topics という論文まねて,年ごとの論文盛り上がりトピック抽出したことがあって,それと同じノリだと思ってんだけれどももっと泥臭かった.とりあえず ES 便利.
だんだんレポート書く元気がなくなってきてるのは秘密,ではなく,本当は,多分書いたらまずい内容も喋ってくれている気がするっていうぐらい濃い内容.
はてなのiOSアプリとSwift
Objective-C は三日坊主なのでよくわからんが,さわるなら Swift ということがわかった.
TypeScript で実現する MVP アーキテクチャパターン
今やってるプロジェクトで TypeScript 使いたくなるようなセミナーだった.ひたすら生 javascript つらい→学習コストほぼなし+移行コストはコード 5 行で TypeScript 移ってはっぴーだと言われたら使いたくなるじゃないですか. からの,はやりは違うやつって言われて,ズコッってなったのは秘密.
まとめ
自社にだいたい技術があるって素晴らしい,ということをしみじみ感じたセミナーでした.こんな会社いいよなー.
配列の凍結?
今動かしてるプログラム(Ruby, non rails *1)で,
can't modify frozen Array
っていうエラーが出てくる.なぜかごくたまに.配列が凍結ってなんやねん,と思いいろいろ調べたら,例えばコマンドラインから受け取る引数とか,よーく考えなくても変更ができない配列については frozen になっているらしい.そーゆー場合は,
list = ARGV[0].dup
とか duplicate しましょうっていうことで.
ipython notebook behind nginx
ipython notebook を nginx のリバースプロキシ経由で使おうとしたら,けっこー手こずったのでメモ.なんでそげなことするのか,っていうのは,通信路を暗号化させるためだけに SSL を設定するのに ipython notebook とか gitbukect ごとにオレオレ認証局たてるのはちょっとどうなのっていうことで,SSL の部分はすべて nginx にまるなげさせようって目的です.
環境
(ずっと同じだけど一応)
- Ubuntu 14.04
- nginx 1.6.2 (
add-apt-repository ppa:nginx/stable
で最新の安定版追加) - python 2.7.6
- ipython 2.3.1
- tornado 3.2.0 (pip で指定した)
症状
↓こんな感じでエラーがでる.
WebSocket connection failed
A WebSocket connection could not be established. You will NOT be able to run code. Check your network connection or notebook server configuration.
↓ここに載ってるやつ試してもダメだった.
解決方法
ここを読むと対処法が分かった.
で,設定例
location /ipython {
# redirect
proxy_pass http://localhost:9999;
# setting for ipython
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "http://localhost:9999";
}
WebSocket での,http ヘッダ?内?の? origin と host が違って?相違があると ipython/zmqhandlers.py at master · ipython/ipython · GitHub の 123 行目からのブロックの処理で弾いてる感満載,という感じらしい.
なんで origin と host とかが違うとダメやねん,ていうのは多分 WebSocket とか HTTP とかの勉強せなアカン感じ.ぐぬぬ.
でもまだバグがある.
safari v8.0 ではやっぱりエラーが出ます.
ここみたら,tornado 3.2 を指定してるしーーなんだが,おかしい.chrome で動くからまーいーやってことで.
chef Server on Ubuntu 14.04
Chef Server 12 を cloudn にインストールしようと思ったら,なぜか動かなかったので,メモ.
症状
おもいっきりエラーのテキストをメモり忘れたんだが,
STOUT: Waiting for rabbit@localhost
(中略)
STERR: process_not_running chef server
みたいなものが出ていたはず.なぜか RabbitMQ が動いてないっぽい.
対処
/etc/hosts に 127.0.0.1 localhost を追加した,だけ.cloudnさんェ…….
経緯としては,
chef-server-ctl tail
ってうったら,empd で localhost に繋がんないよ〜〜って怒られ続けていた.もしかしてーと思い
とかやっても localhost 見つかりません〜〜って出た.まじか.
追記
ここChef Server Installation on EC2 Ubuntu 14.04 - 2014によると,ubuntu14.04 じゃ chef server は動かないらしい.まじか.
しけん
Docker を調べるなら CloudFoundry との比較もしなきゃなーと思いつつスルー.続いてそろそろまじめに Unit Test をやんないといけないし,諸事情で Ruby から python に移るのも今のうちだ,と思ったので,python の unit test について調べた.
unit testing - Python - doctest vs. unittest - Stack Overflow
いろいろ調べたけれども,このコメントが一番秀逸.ドキュメントも書きつつ,unittest は nose 使って分離を行うっていう.それぞれの一長一短を考えて,両方の長所だけを使ってますっていうことですね.それにしても doctest すごく便利だな.
あと,このスライドシェアがザクザクくるので一応メモ程度に保存.