狠狠撸

狠狠撸Share a Scribd company logo
共用ホスティングでのLL管理
Ryo Kuroda @lamanotrama
所属
GMOペパボ
技術基盤チーム
経歴
? ~30才 郵便局の窓口に座ってた
? 京都のWebホスティング会社で4年弱
? ペパボで5年弱
? ヘテムル
? Sqale
? 他いろいろ
本題
LL(lightweight language)をそこそこ効率的に監理、運用でき
るツールを作りました。
http://heteml.jp/
共用Webホスティングサービス
ApacheのVirtual Host
動的コンテンツはCGI
求められる仕様
!
契約して直ぐに好きな言語で色々さくっと動く環境
? 色々使える
? PHP、Perl、Ruby、Pyhton
? それぞれ複数のバージョンから選択できる
? モジュール(ライブラリ)が最初からそれなりに っている
? お客んさんは中でコンパイルできないしね
!
現場の声
? 大量のRPMつくるのは辛い
? ビルド、インストールに時間かかるの辛い
? リポジトリ(yum|puppet)が太るの辛い
? サーバ毎の仕様差を生まないようにするには…
? 履歴監理…
!
そこで、
https://github.com/paperboy-heteml/anybuild
anybuild
xbuild使って設定ファイルベース
でばんばんインストール出来る君
!
+ 差分同期スクリプト
xbuildとは
モヒカン界の至宝 @tagomoris 氏作
https://github.com/tagomoris/xbuild
!
hoge-install <version> <install_path>
!
な感じで、本番環境のLLをセットアップできるやつ
!
anybuild
.	
|-- README.md	
|-- any-install	
|-- any-perl-install	
|-- any-php-install	
|-- any-python-install	
|-- any-ruby-install	
|-- functions	
`-- sync-lang
anybuild - con?guration
/etc/anybuild/	
"## perl	
$?? "## cpanfile	
$?? &## versions.txt	
"## php	
$?? "## definitions	
$?? $?? "## 5.3.19-heteml	
$?? $?? &## 5.4.11-heteml	
$?? "## pearfile	
$?? "## peclfile	
$?? &## versions.txt	
"## python	
"## ruby	
$?? "## Gemfile	
$?? &## versions.txt	
&## sync-lang
./any-install!
ビルドサーバ上で実行
1. 各言語のversions.txtの各行をxbuildの引
数に渡して、ビルドしまくる
2. cpan?leとかGem?leとか読んでモジュー
ルをインストールしまくる
./sync-lang push|pull
1. any-install実行前にビルド済みデータをrsyncサーバ
からローカルにpull
2. any-installで(差分)ビルド、インストールしたものを
rsyncサーバにpush
3. 本番サーバで実行してrsyncサーバからデータをpull
こんな感じ
+----------+ +--------------+ LL runtimes +--------------+----------+	
| build VM | built LL runtimes | | for Role A | Ahost001 | Ahost002 |	
| | <--------------------- | | -------------> | | |	
+----------+ | | +--------------+----------+	
| | lang server | LL runtimes ^	
| incremental update | (rsyncd) | for Role A |	
+-------------------------------> | | ---------------------------------+	
| |	
| |	
| | -+	
+--------------+ |	
| |	
| LL runtimes | LL runtimes	
| for Role B | for Role B	
v v	
+--------------+---------------+	
| Bhost001 | Bhost002 |	
+--------------+---------------+
Vagrant + Puppet +
anybuild
anybuildの設定、依存RPM
(*-devel)等はpuppetで管理
Vagrantのpuppet
provisionerでもろもろ完了
# 手元で	
[@mac puppet]# vi roles/web/files/etc/anybuild/perl/cpanfile	
[@mac puppet]# git commit -m ‘お客さんの要望でHoge.pmを追加’	
[@mac puppet]# VM_ROLE=web vagrant provision cent6_anybuild	
!
# 本番サーバ全台で	
[@web001 ~]# sudo /usr/local/anybuild/sync-lang pull
現場の声(再掲)
? 大量のRPMつくるのは辛い
? ビルド、インストールに時間かかるの辛い
? リポジトリ(yum|puppet)が太るの辛い
? サーバ毎の仕様差を生まないようにするには…
? 履歴監理…
!
現場の声(再掲)
? 大量のRPMつくらずrsyncでファイル同期するだけ
? ビルド、インストールに時間かかるの辛い
? リポジトリ(yum|puppet)が太るの辛い
? サーバ毎の仕様差を生まないようにするには…
? 履歴監理…
!
現場の声(再掲)
? 大量のRPMつくらずrsyncでファイル同期するだけ
? ビルド、インストールはビルドサーバで一回だけ
? リポジトリ(yum|puppet)が太るの辛い
? サーバ毎の仕様差を生まないようにするには…
? 履歴監理…
!
現場の声(再掲)
? 大量のRPMつくらずrsyncでファイル同期するだけ
? ビルド、インストールはビルドサーバで一回だけ
? リポジトリ(puppet)にはanybuildの設定だけ
? サーバ毎の仕様差を生まないようにするには…
? 履歴監理…
!
現場の声(再掲)
? 大量のRPMつくらずrsyncでファイル同期するだけ
? ビルド、インストールはビルドサーバで一回だけ
? リポジトリ(puppet)にはanybuildの設定だけ
? サーバの仕様はsync-lang pullで う
? 履歴監理…
!
現場の声(再掲)
? 大量のRPMつくらずrsyncでファイル同期するだけ
? ビルド、インストールはビルドサーバで一回だけ
? リポジトリ(puppet)にはanybuildの設定だけ
? サーバの仕様はsync-lang pullで う
? 履歴がpuppetのリポジトリに集約される
!
やったね!

More Related Content

anybuild/Hosting casual #1