そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

Dockerのプライベートリポジトリを立てる

またDockerまわりを色々いじる機会があったのでメモ。

ホスト一台だけで使うだけならともかく複数台ホストがある環境で運用しようという場合、 プライベートリポジトリを立ててそこから各ホストにイメージを配信したくなる。

幸いにしてプライベートリポジトリ自体がイメージとして配布されており、 鍵を用意して適切に設定することにより簡単にプライベートリポジトリを立てることができる。

docs.docker.com

続きを読む

Dockerでデータ可視化環境をサクッと用意する

先週に引き続きBitcoin関連で週末コーディング。

blue1st.hateblo.jp

取引アルゴリズムを考える前に、とりあえずは可視化(と仮説の検証)が必要だろうということで。


ポート管理やら各種パスやら環境変数やらに煩わされたくない怠惰系のアプリケーションエンジニアとしては、 この手のツールがDockerで用意されてると簡単に試せて本当に助かる。

以下Docker Compose導入後という前提で。

blue1st.hateblo.jp

続きを読む

今週気になった技術ネタ

Linuxサーバの情報を確認するコマンド

Linuxのシステムやハードウェア情報を取得するコマンドを集めてみた

個人的にはガリガリ新しいコードを書くよりはリファクタリングしたりチューニングしたり、あるいは新しいミドルウェアを導入したりする仕事が中心になってきたここ数ヶ月。

muninのグラフの推移を見守るのが基本だけれども、詳細を検討するにはやはり各サーバに入っていって個別に確認する必要はあったりする。

それにしても、そろそろSystemd系に慣れておかないといけない気がする。


にわかに情報が出てきたAngular2

qiita.com

色々な情報をみる限り無印Angularとは結構変わるみたいだから、感覚的にすぐに移行できるとは思わない方が良さそうですな。

paiza.hatenablog.com

最近のJS界隈でもう一つ見逃せないトレンドとして仮想DOMがあるけれど、聞いた話ではAngular2にもそれに近い発想があるらしいのが気になるところ。

React.jsの評判の良さは気になるけれど、どうにも仮想DOMって発想にまどろっこしさを感じてしまって手を出すのに躊躇してしまっている現状なのだが、これが天下のAngularがやるなら無視するわけにもいくまい。


ナレッジ共有システムLodge

lodge/lodge · GitHub

身も蓋もない説明をするとQiita::Teamのクローン。

最近うちの部署でも試しに使い始めてみた。

Wikiでいいじゃんとかそういう反対意見もあったんだけど、個人的にはWikiってみんな好き勝手に書いた挙句とっちらかってしまう印象が強くて、それだったらブログ的に皆が流し見できる方が良いかなーと思っている。

というか↓のツイートが大体代弁してくれてる感ある。

全文検索できないとかデザインがイケてないとかそれなりに不満もあるけれど、Markdownでちゃっちゃと書けてなかなか快適。

とりあえず進捗報告用って名目で皆に利用してもらいつつ、色々な記事を投稿して僕なりに有用性をアピールしていってる感じ。

あとはIRCなりメールなりに更新流せれば良いなーなんて思ったりもする。


Lodgeに限らずRails製アプリ全般なんだけど、ポート転送で動かしてると初回接続時にやたらと遅かったので↓のソケット使う記述に変えたら劇的に改善された!

Redmine を nginx + Unicorn で動かしてみる | cocoa*life

2014年の個人的なWeb系技術ネタまとめ

今年はあまり期限に追われなくてもよいポジションになったこともあり、本業に直接は関係ない部分にも色々と手を出すことができた。

そんなわけで世間的には必ずしも「今年のネタ」ではないが、個人的に得るものが大きかったネタについて。

Redis

memcachedと比べると単純な速度では劣るものの、データファイルがバックアップされるため永続性を求められる用途にも使用しやすく、様々なデータ型を活かせば非常に便利だったりする。

仕事では昨年からソート済みセット型を使ってリアルタイムランキングなんかを作ってもいたが、今年はセット型をユーザ属性の解析なんかでよく活用した。

Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)

Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)


セット型は順不同で同一値は重複しない形でデータを保存する。

そして、あるセット型データと別のセット型データとの和集合や差集合などを簡単に取得することができる。

これを用いて特定の属性のユーザをリストアップしたり、逆に特定のユーザの動向を調査する上で有効だった。

Fluentd

もはや業界標準な感すらあるログ収集ツール

職場的にはもうすでに各種ゲームサーバからのログを集積サーバに集約するために用いてはいたが、更にそのログを(ほぼ)リアルタイムで解析スクリプトにかませる術を身につけたことで色々とできることの幅が広がった。


そこそこサイズ感あるサービスだとサーバの台数も多くなり、後追いで時系列に依存した解析をするのは困難になってくる。

ましてや刻々と変化するユーザステータスなんかと絡めた解析をしたい場合、通常ならシステム側への仕込みなんかも必要になる。

しかし現実には(ソシャゲ屋さんにはありがちだと思うけど)工数かつかつで開発メンバーに依頼しづらかったりもするわけだが、その辺リアルタイム解析ではシステム側とは完全に独立して作れる気楽さがある。

Docker

昨年はChefに手を出してみたものの、正直覚えることが多くてしんどかったのと、本業的には接点が少なく個人的にもバーチャルマシンをガンガン立てられるような環境でもなかったのですっかり熱が冷めてしまった。

とはいえ「アプリ環境の管理」みたいなとこへの欲求はあった所で、ちょうど良く話題になっていたのがDocker。

今更ながらCentOS6.4にDocker導入してみる - そんな今日この頃でして、、、

VirtualBox的なハードウェアレベルでエミュレートするもの(ハイパーバイザ型)と異なり、アプリケーション環境のみを作成する(コンテナ型)ため、パフォーマンス的にも操作の気楽さ的にも要求にマッチしていた。


王道はDockerfileで全てまかなうことなのだろうけれど僕はまだそこまで行けてなくて、必要に応じて仮想環境に入ってコミットするような使い方になっているが、それでも便利さは実感するところ。

PhantomJS

PhantomJSはJavaScript APIにより操作できるヘッドレスなWebKitブラウザ

個人的にはより簡潔に操作できるユーティリティであるところのCasperJS越しに使用したりする。

CasperJSで動的ページをスクレイピング、あるいは毎月100円ゲットする方法について - そんな今日この頃でして、、、


Webkit内蔵ということで昨今のAjaxガリガリのページをスクレイピングすることもできるし、そういった機能のテストに使用することもできる。

AngularJS

何のかんので今じゃJavascriptフレームワークのど本命な感すらある。

AngularJSリファレンス

AngularJSリファレンス

僕個人としてはそこまで本格的なアプリを組むとこまではいってなくてインタラクティブな管理画面を作成するのに使う程度だけれど、それでもデータバインディングは非常に楽だし、ディレクティブなんかのおかげでソースも見通しやすくもなり、工数削減とメンテナンス性の向上に大いに役立っている。

特に要素数が不定なものを設定するような管理画面では、jQueryでシコシコとDOM生成してた時に比べると10倍は作成の効率が上がった気がする。


もっとも、本職のJavascriptおじさん達は蛇蝎の如く嫌ってたりするし、僕自身用途的に過剰な気はしているので、来年は評判の良いVueJSあたりに手をだしてみたいところ。

最近目にする機会が増えてきたReactも気になるところではあるが、イマイチ仮想DOMという発想自体が周りくどいものに思えて食指が動かない。

それでも良さそうなネタがあれば触ってみようとは思うけどね。

番外

個別に書くほどでもないけど、シェルでフォアグラウンド・バックグラウンドの切り替えとか、引数をループで動かしながらのスクリプト実行とか、スクリプト書くまでもない程度の抽出をawkで記述するなんてのをできるようになったことで裏方業務の効率が凄く上がった気がする。

あと、CasperでのECサイトのだったり炎上サイトの謝罪ページだったりと若干アレなチョイスではあるけど、他人の書いたコードを読むというのは勉強になるなと感じた。

非実在小学4年生の謝罪ページのJSを読む - そんな今日この頃でして、、、


業務上非エンジニアと関わるようなことが多くなってきたし、そういう人達との話し合いでは"見える部分"が重要だったりするわけで、裏方業務といえどもJavascriptまわりの技術は身につけとくと得だなーと痛感する昨今。

Javascriptの比重が上がってきた割に今だにフロントのパッケージ管理とかはさっぱりなことに危機感を覚えてたりもするので、来年(というか正月休み中に)はYeomanあたり身につけたい。

CentOSにmunin導入

買って以来かなり多目的に使っている自宅サーバ

"MicroServerN54L" - 記事一覧 - そんな今日この頃でして、、、

CPUパワーはそれほど必要とする用途には使ってないが、起動するサービスが多くなってきてメモリの枯渇が気になってきたし、メディアサーバとしてもTime MachineサーバとしてもHDD容量は気になるところなので、勉強も兼ねてリソース監視ツールmuninを導入してみた。


ハッキリ言ってほとんどyum一発なんで記事にするほどでもないのだけど、記録ということで一つ。

muninのインストール

兎にも角にもyumでインストール。

# yum install munin --enablerepo=epel


が、下記エラー。

Transaction Check Error:
  file /usr/share/man/man3/XML::SAX::Base.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch
  file /usr/share/man/man3/XML::SAX::Exception.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch


慌てず先にインストールし、

# yum install perl-XML-SAX-0.96-7.el.noarch


改めて

# yum install munin --enablerepo=epel

で終了。


muninはリソースの状況を報告するmunin-nodeとそれを表示するmuninとで動作するのだが、muninの方を入れればnodeもちゃんと入る。

Basic認証

デフォルトではBasic認証をする形で設定されるが、僕の場合は家庭内LANだけの公開なので、邪魔な認証設定は切っておくことに。


下記の設定ファイルより

# vi /etc/httpd/conf.d/munin.conf


認証回りの設定をコメントアウト

<directory /var/www/html/munin>

#AuthUserFile /etc/munin/munin-htpasswd
#AuthName "Munin"
#AuthType Basic
#require valid-user

監視開始

サービス開始。

# service munin-node start

特にエラー等無ければ、5分ほど待つとhttp://[サーバIP]/muninにアクセスすればmuninの画面が見られる。

(実行してすぐだとファイルが生成されていないので上手くページが表示されない。)


問題なければ自動起動設定。

# chkconfig munin-node on



munin自体が結構負荷があって自宅サーバ用としては過剰だったりするのだが、業務でも使っているし読み方の勉強ということで。

先日のメモリ増設なんか、顕著にグラフが動いていて観ていて楽しい。

Microserver N54Lのメモリを増設した - そんな今日この頃でして、、、

f:id:blue1st:20141027221059p:plain


自分で自由にいじれる環境だと、各パラメータの意味が掴みやすくて良いと思う。

Microserver N54Lのメモリを増設した

ウェブアプリ開発用の各種ミドルウェアNASRedmine、Gitlab、Time Machine...etcと、何かとハードに活用しているN54L。

MicroServerN54L カテゴリーの記事一覧 - そんな今日この頃でして、、、

実用としても学習用という意味でも良い買い物だった気がする。

しかし、好き放題に追加していったため、普通に動かしている分にはそれほど弊害を感じることはないものの、topコマンドを確認するとswapも生じていたもよう。

メモリは一頃に比べると円安傾向で高くなってしまったが、DDR4も登場してこれ以上待っていても安くはならなそうなので、思い切って上限いっぱい8GB(4GB×2)を増設することにした。



簡易パッケージ版は専用の封筒の中に薄いダンボールで発送されてくる。

よくあるプラスチック圧着包装って開けるだけで一苦労だったりする(下手すると怪我するし)ので、そのへんストレス無くて良い。

f:id:blue1st:20141026170317j:plain



久々にフロントパネルを開ける。

(青色のLEDが眩しいので付箋で覆ってる)

f:id:blue1st:20141026165308j:plain



PCIスロットを外せるようにしておく。

(実はこの構造忘れてて、しばらくマザーボード引き出せなくて困った。)

f:id:blue1st:20141026171334j:plain



ネジを緩め、ケーブルの固定を外し・・・

f:id:blue1st:20141026165737j:plain



端子を慎重に抜きながらマザーボードを引き出す。

f:id:blue1st:20141026170253j:plain



元のメモリを外して購入したメモリに換装。

金色のヒートシンクが美しい。

f:id:blue1st:20141026170418j:plain



あとは元通りに収め、ちゃんと動作するのを確認して終了。

増設前はメモリ不足のせいだとは思っていなかったのだけれど、心なしsamba上の動画ファイルの再生もスムーズになった気がする。

CentOSサーバにMacバックアップ機能「Time Machine」を構築したよー

現在愛用しているMac book Airも気づけば今年で3年選手。

SSDによる快適さの恩恵なのか普段使っていて問題を感じることはないが、そうはいってもPCの寿命の目安は3年といわれるわけで、そろそろ無バックアップ運用も怖くなってきた。


Macには「Time Machine」という外付けHDDやネットワーク上のストレージに自動で差分をバックアップしてくれる便利な機能がある。

しかし、ネットワーク越しのバックアップ機能を使うには通常はお高いTime Cupsuleを買うか、もしくは互換機能のついたNASを購入する必要がある。

APPLE AirMac Time Capsule - 2TB ME177J/A

APPLE AirMac Time Capsule - 2TB ME177J/A

でも自宅サーバで何とかしたい!


以前、ローカル上でディスクイメージを作成して共有サーバ上に配置する方法も試してみた。

TimeMachineのバックアップ先をNASに設定

確かに最初の数回は上手くバックアップされるものの、気が付くとディスクイメージファイルが破損してバックアップできなくなってしまった。

(バックアップ途中にネットワークが切れてしまうことがあるのが原因ではないかと推定。実運用を考えると厳しい。)


今回新たに別の方法の記事を見つけ、前回チャレンジした時の領域もちょうそのまま残っているので再度挑戦してみた。

Linux に Time Machine 用バックアップサーバを構築する


さて、結論から言うと記事に従えば、ほとんど引っかかるところもなく導入できてしまった。

一応必要だった手順だけ抜き出すと

  1. 元々領域はあったので、/etc/fstabにオプションを追記して再マウント
  2. Netatalkを導入
  3. サーバ各種設定
  4. クライアント設定

になる。

1. マウントオプションの追加

Time Machine用に使用したい領域に下記オプションを追記。

[領域] [マウントパス]                   ext4    defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,user_xattr 1 2

マウント・再マウント・確認。

# umount [マウントパス]
# mount -a
# mount

mountコマンドで表示された領域に、先ほど追記したオプションが追加されていれば成功。

2. Netatlkの導入

必要なライブラリをyumからインストール

# yum install db4-devel
# yum install libgcrypt libgcrypt-devel
# yum install avahi nss-mdns avahi-tools avahi-devel
# yum install libacl-devel
# yum install quota-devel

rpmをダウンロードしてインストール

参考記事のコメントにあるようにrpmからのイントールができる。

Netatalk 3.1.6 SRPMs for Fedora/RHEL/Scientific Linux/CentOS - Netatalk Wiki

(余談だけどVNC越しでブラウジングできるようにChromiumインストールした。今時ブラウザ無いと何かと差し支えるね。

CentOS に Chromium ブラウザをインストールする : まだプログラマーですが何か?

)

3. サーバ各種設定

設定の記述

/usr/local/etc/afp.confにTime Machine用の記述を追加

[My Time Capsule]
path = [パス]
    time machine = yes

あとiptablesを止めるなりポート開けるなり。

サービス開始

# service netatalk start
# chkconfig netatlk on

4. クライアント側設定

とりあえず一度Macbookから領域につないでみる。

$ open afp://[サーバのIP]

あとはTime Machineの設定画面から設定して終了。


初回バックアップは結構な時間がかかるのと、中断してしまうとまた最初からになるので注意!


2・3日運用して現在に至るが、今のところ正常に稼働している。


余談

良い機会なのでgitlabを再インストールした。

前にやったときはえらく苦労した記憶があるけど、今はrpmが用意されている。

GitLab | Omnibus package downloads for GitLab CE

gitユーザが既に存在しているとダメだったり、内部的に8080ポートが使用されてて既存のほうのポートを変更したりといった面倒はあったけど、概ね手順の数コマンドだけで導入できた。

すげー楽。