またDockerまわりを色々いじる機会があったのでメモ。
ホスト一台だけで使うだけならともかく複数台ホストがある環境で運用しようという場合、 プライベートリポジトリを立ててそこから各ホストにイメージを配信したくなる。
幸いにしてプライベートリポジトリ自体がイメージとして配布されており、 鍵を用意して適切に設定することにより簡単にプライベートリポジトリを立てることができる。
続きを読むまたDockerまわりを色々いじる機会があったのでメモ。
ホスト一台だけで使うだけならともかく複数台ホストがある環境で運用しようという場合、 プライベートリポジトリを立ててそこから各ホストにイメージを配信したくなる。
幸いにしてプライベートリポジトリ自体がイメージとして配布されており、 鍵を用意して適切に設定することにより簡単にプライベートリポジトリを立てることができる。
続きを読む先週に引き続きBitcoin関連で週末コーディング。
取引アルゴリズムを考える前に、とりあえずは可視化(と仮説の検証)が必要だろうということで。
ポート管理やら各種パスやら環境変数やらに煩わされたくない怠惰系のアプリケーションエンジニアとしては、 この手のツールがDockerで用意されてると簡単に試せて本当に助かる。
以下Docker Compose導入後という前提で。
続きを読むLinuxのシステムやハードウェア情報を取得するコマンドを集めてみた
個人的にはガリガリ新しいコードを書くよりはリファクタリングしたりチューニングしたり、あるいは新しいミドルウェアを導入したりする仕事が中心になってきたここ数ヶ月。
muninのグラフの推移を見守るのが基本だけれども、詳細を検討するにはやはり各サーバに入っていって個別に確認する必要はあったりする。
それにしても、そろそろSystemd系に慣れておかないといけない気がする。
色々な情報をみる限り無印Angularとは結構変わるみたいだから、感覚的にすぐに移行できるとは思わない方が良さそうですな。
最近のJS界隈でもう一つ見逃せないトレンドとして仮想DOMがあるけれど、聞いた話ではAngular2にもそれに近い発想があるらしいのが気になるところ。
React.jsの評判の良さは気になるけれど、どうにも仮想DOMって発想にまどろっこしさを感じてしまって手を出すのに躊躇してしまっている現状なのだが、これが天下のAngularがやるなら無視するわけにもいくまい。
身も蓋もない説明をするとQiita::Teamのクローン。
最近うちの部署でも試しに使い始めてみた。
Wikiでいいじゃんとかそういう反対意見もあったんだけど、個人的にはWikiってみんな好き勝手に書いた挙句とっちらかってしまう印象が強くて、それだったらブログ的に皆が流し見できる方が良いかなーと思っている。
というか↓のツイートが大体代弁してくれてる感ある。
Web上から取得できる文書群の正確さは、懇親的なユーザーが更新し続けることによって成立してるのではなく、新陳代謝しまくってる文書を Google 様の検索で成立してる。なんで、ましてやWebよりも利用者の少ない社内文書を、正確に更新し続けるなんて無理という前提に立つ派
— Naoya Ito (@naoya_ito) February 25, 2015
なので、社内文書は wiki 的な文書が正しく更新され続けることを望むのではなく、フロー的に流れる新しい文書をいかに負荷なく発見できるようにするか、また、フロー的に流れる文書の粒度をいかに適切になるようにマネージするか、そこがコツだと思う。
— Naoya Ito (@naoya_ito) February 25, 2015
全文検索できないとかデザインがイケてないとかそれなりに不満もあるけれど、Markdownでちゃっちゃと書けてなかなか快適。
とりあえず進捗報告用って名目で皆に利用してもらいつつ、色々な記事を投稿して僕なりに有用性をアピールしていってる感じ。
あとはIRCなりメールなりに更新流せれば良いなーなんて思ったりもする。
Lodgeに限らずRails製アプリ全般なんだけど、ポート転送で動かしてると初回接続時にやたらと遅かったので↓のソケット使う記述に変えたら劇的に改善された!
今年はあまり期限に追われなくてもよいポジションになったこともあり、本業に直接は関係ない部分にも色々と手を出すことができた。
そんなわけで世間的には必ずしも「今年のネタ」ではないが、個人的に得るものが大きかったネタについて。
memcachedと比べると単純な速度では劣るものの、データファイルがバックアップされるため永続性を求められる用途にも使用しやすく、様々なデータ型を活かせば非常に便利だったりする。
仕事では昨年からソート済みセット型を使ってリアルタイムランキングなんかを作ってもいたが、今年はセット型をユーザ属性の解析なんかでよく活用した。
Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)
セット型は順不同で同一値は重複しない形でデータを保存する。
そして、あるセット型データと別のセット型データとの和集合や差集合などを簡単に取得することができる。
これを用いて特定の属性のユーザをリストアップしたり、逆に特定のユーザの動向を調査する上で有効だった。
職場的にはもうすでに各種ゲームサーバからのログを集積サーバに集約するために用いてはいたが、更にそのログを(ほぼ)リアルタイムで解析スクリプトにかませる術を身につけたことで色々とできることの幅が広がった。
サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
そこそこサイズ感あるサービスだとサーバの台数も多くなり、後追いで時系列に依存した解析をするのは困難になってくる。
ましてや刻々と変化するユーザステータスなんかと絡めた解析をしたい場合、通常ならシステム側への仕込みなんかも必要になる。
しかし現実には(ソシャゲ屋さんにはありがちだと思うけど)工数かつかつで開発メンバーに依頼しづらかったりもするわけだが、その辺リアルタイム解析ではシステム側とは完全に独立して作れる気楽さがある。
昨年はChefに手を出してみたものの、正直覚えることが多くてしんどかったのと、本業的には接点が少なく個人的にもバーチャルマシンをガンガン立てられるような環境でもなかったのですっかり熱が冷めてしまった。
とはいえ「アプリ環境の管理」みたいなとこへの欲求はあった所で、ちょうど良く話題になっていたのがDocker。
今更ながらCentOS6.4にDocker導入してみる - そんな今日この頃でして、、、
VirtualBox的なハードウェアレベルでエミュレートするもの(ハイパーバイザ型)と異なり、アプリケーション環境のみを作成する(コンテナ型)ため、パフォーマンス的にも操作の気楽さ的にも要求にマッチしていた。
王道はDockerfileで全てまかなうことなのだろうけれど僕はまだそこまで行けてなくて、必要に応じて仮想環境に入ってコミットするような使い方になっているが、それでも便利さは実感するところ。
PhantomJSはJavaScript APIにより操作できるヘッドレスなWebKitブラウザ。
個人的にはより簡潔に操作できるユーティリティであるところのCasperJS越しに使用したりする。
CasperJSで動的ページをスクレイピング、あるいは毎月100円ゲットする方法について - そんな今日この頃でして、、、
Webkit内蔵ということで昨今のAjaxガリガリのページをスクレイピングすることもできるし、そういった機能のテストに使用することもできる。
何のかんので今じゃJavascriptフレームワークのど本命な感すらある。
僕個人としてはそこまで本格的なアプリを組むとこまではいってなくてインタラクティブな管理画面を作成するのに使う程度だけれど、それでもデータバインディングは非常に楽だし、ディレクティブなんかのおかげでソースも見通しやすくもなり、工数削減とメンテナンス性の向上に大いに役立っている。
特に要素数が不定なものを設定するような管理画面では、jQueryでシコシコとDOM生成してた時に比べると10倍は作成の効率が上がった気がする。
もっとも、本職のJavascriptおじさん達は蛇蝎の如く嫌ってたりするし、僕自身用途的に過剰な気はしているので、来年は評判の良いVueJSあたりに手をだしてみたいところ。
最近目にする機会が増えてきたReactも気になるところではあるが、イマイチ仮想DOMという発想自体が周りくどいものに思えて食指が動かない。
それでも良さそうなネタがあれば触ってみようとは思うけどね。
個別に書くほどでもないけど、シェルでフォアグラウンド・バックグラウンドの切り替えとか、引数をループで動かしながらのスクリプト実行とか、スクリプト書くまでもない程度の抽出をawkで記述するなんてのをできるようになったことで裏方業務の効率が凄く上がった気がする。
あと、CasperでのECサイトのだったり炎上サイトの謝罪ページだったりと若干アレなチョイスではあるけど、他人の書いたコードを読むというのは勉強になるなと感じた。
非実在小学4年生の謝罪ページのJSを読む - そんな今日この頃でして、、、
業務上非エンジニアと関わるようなことが多くなってきたし、そういう人達との話し合いでは"見える部分"が重要だったりするわけで、裏方業務といえどもJavascriptまわりの技術は身につけとくと得だなーと痛感する昨今。
Javascriptの比重が上がってきた割に今だにフロントのパッケージ管理とかはさっぱりなことに危機感を覚えてたりもするので、来年(というか正月休み中に)はYeomanあたり身につけたい。
買って以来かなり多目的に使っている自宅サーバ。
"MicroServerN54L" - 記事一覧 - そんな今日この頃でして、、、
CPUパワーはそれほど必要とする用途には使ってないが、起動するサービスが多くなってきてメモリの枯渇が気になってきたし、メディアサーバとしてもTime MachineサーバとしてもHDD容量は気になるところなので、勉強も兼ねてリソース監視ツールmuninを導入してみた。
ハッキリ言ってほとんどyum一発なんで記事にするほどでもないのだけど、記録ということで一つ。
兎にも角にも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認証をする形で設定されるが、僕の場合は家庭内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のメモリを増設した - そんな今日この頃でして、、、
自分で自由にいじれる環境だと、各パラメータの意味が掴みやすくて良いと思う。
サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus)
ウェブアプリ開発用の各種ミドルウェア、NAS、Redmine、Gitlab、Time Machine...etcと、何かとハードに活用しているN54L。
MicroServerN54L カテゴリーの記事一覧 - そんな今日この頃でして、、、
実用としても学習用という意味でも良い買い物だった気がする。
HP ProLiant MicroServer N54L 4GB 500GB x2モデル
しかし、好き放題に追加していったため、普通に動かしている分にはそれほど弊害を感じることはないものの、topコマンドを確認するとswapも生じていたもよう。
メモリは一頃に比べると円安傾向で高くなってしまったが、DDR4も登場してこれ以上待っていても安くはならなそうなので、思い切って上限いっぱい8GB(4GB×2)を増設することにした。
簡易パッケージ版は専用の封筒の中に薄いダンボールで発送されてくる。
よくあるプラスチック圧着包装って開けるだけで一苦労だったりする(下手すると怪我するし)ので、そのへんストレス無くて良い。
久々にフロントパネルを開ける。
(青色のLEDが眩しいので付箋で覆ってる)
PCIスロットを外せるようにしておく。
(実はこの構造忘れてて、しばらくマザーボード引き出せなくて困った。)
ネジを緩め、ケーブルの固定を外し・・・
端子を慎重に抜きながらマザーボードを引き出す。
元のメモリを外して購入したメモリに換装。
金色のヒートシンクが美しい。
あとは元通りに収め、ちゃんと動作するのを確認して終了。
増設前はメモリ不足のせいだとは思っていなかったのだけれど、心なしsamba上の動画ファイルの再生もスムーズになった気がする。
現在愛用しているMac book Airも気づけば今年で3年選手。
SSDによる快適さの恩恵なのか普段使っていて問題を感じることはないが、そうはいってもPCの寿命の目安は3年といわれるわけで、そろそろ無バックアップ運用も怖くなってきた。
Macには「Time Machine」という外付けHDDやネットワーク上のストレージに自動で差分をバックアップしてくれる便利な機能がある。
しかし、ネットワーク越しのバックアップ機能を使うには通常はお高いTime Cupsuleを買うか、もしくは互換機能のついたNASを購入する必要がある。
APPLE AirMac Time Capsule - 2TB ME177J/A
BUFFALO リンクステーション RAID機能搭載 ネットワーク対応HDD 4TB LS420D0402
でも自宅サーバで何とかしたい!
以前、ローカル上でディスクイメージを作成して共有サーバ上に配置する方法も試してみた。
確かに最初の数回は上手くバックアップされるものの、気が付くとディスクイメージファイルが破損してバックアップできなくなってしまった。
(バックアップ途中にネットワークが切れてしまうことがあるのが原因ではないかと推定。実運用を考えると厳しい。)
今回新たに別の方法の記事を見つけ、前回チャレンジした時の領域もちょうそのまま残っているので再度挑戦してみた。
Linux に Time Machine 用バックアップサーバを構築する
さて、結論から言うと記事に従えば、ほとんど引っかかるところもなく導入できてしまった。
一応必要だった手順だけ抜き出すと
になる。
Time Machine用に使用したい領域に下記オプションを追記。
[領域] [マウントパス] ext4 defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,user_xattr 1 2
マウント・再マウント・確認。
# umount [マウントパス] # mount -a # mount
mountコマンドで表示された領域に、先ほど追記したオプションが追加されていれば成功。
# 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からのイントールができる。
Netatalk 3.1.6 SRPMs for Fedora/RHEL/Scientific Linux/CentOS - Netatalk Wiki
(余談だけどVNC越しでブラウジングできるようにChromiumインストールした。今時ブラウザ無いと何かと差し支えるね。
CentOS に Chromium ブラウザをインストールする : まだプログラマーですが何か?
)
/usr/local/etc/afp.confにTime Machine用の記述を追加
[My Time Capsule] path = [パス] time machine = yes
あとiptablesを止めるなりポート開けるなり。
# service netatalk start # chkconfig netatlk on
とりあえず一度Macbookから領域につないでみる。
$ open afp://[サーバのIP]
あとはTime Machineの設定画面から設定して終了。
初回バックアップは結構な時間がかかるのと、中断してしまうとまた最初からになるので注意!
2・3日運用して現在に至るが、今のところ正常に稼働している。
良い機会なのでgitlabを再インストールした。
前にやったときはえらく苦労した記憶があるけど、今はrpmが用意されている。
GitLab | Omnibus package downloads for GitLab CE
gitユーザが既に存在しているとダメだったり、内部的に8080ポートが使用されてて既存のほうのポートを変更したりといった面倒はあったけど、概ね手順の数コマンドだけで導入できた。
すげー楽。