anybuild/hosting casual #1
DESCRIPTION
TRANSCRIPT
![Page 1: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/1.jpg)
共用ホスティングでのLL管理Ryo Kuroda @lamanotrama
![Page 2: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/2.jpg)
所属
GMOペパボ 技術基盤チーム
![Page 3: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/3.jpg)
経歴• ~30才 郵便局の窓口に座ってた
• 京都のWebホスティング会社で4年弱
• ペパボで5年弱 • ヘテムル • Sqale • 他いろいろ
![Page 4: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/4.jpg)
本題LL(lightweight language)をそこそこ効率的に監理、運用でき
るツールを作りました。
![Page 6: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/6.jpg)
求められる仕様 !契約して直ぐに好きな言語で色々さくっと動く環境
• 色々使える
• PHP、Perl、Ruby、Pyhton
• それぞれ複数のバージョンから選択できる
• モジュール(ライブラリ)が最初からそれなりに揃っている
• お客んさんは中でコンパイルできないしね
!
![Page 7: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/7.jpg)
現場の声
• 大量のRPMつくるのは辛い
• ビルド、インストールに時間かかるの辛い
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!そこで、
![Page 9: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/9.jpg)
xbuild使って設定ファイルベースでばんばんインストール出来る君
!
+ 差分同期スクリプト
![Page 10: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/10.jpg)
xbuildとは
モヒカン界の至宝 @tagomoris 氏作
https://github.com/tagomoris/xbuild !
hoge-install <version> <install_path> !な感じで、本番環境のLLをセットアップできるやつ
!
![Page 11: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/11.jpg)
anybuild
.|-- README.md|-- any-install|-- any-perl-install|-- any-php-install|-- any-python-install|-- any-ruby-install|-- functions`-- sync-lang
![Page 12: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/12.jpg)
anybuild - configuration /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
![Page 13: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/13.jpg)
./any-install !
ビルドサーバ上で実行
1. 各言語のversions.txtの各行をxbuildの引数に渡して、ビルドしまくる
2. cpanfileとかGemfileとか読んでモジュールをインストールしまくる
![Page 14: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/14.jpg)
./sync-lang push|pull
1. any-install実行前にビルド済みデータをrsyncサーバからローカルにpull
2. any-installで(差分)ビルド、インストールしたものをrsyncサーバにpush
3. 本番サーバで実行してrsyncサーバからデータをpull
![Page 15: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/15.jpg)
こんな感じ+----------+ +--------------+ 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 | +--------------+---------------+
![Page 16: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/16.jpg)
Vagrant + Puppet + anybuild
![Page 17: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/17.jpg)
anybuildの設定、依存RPM
(*-devel)等はpuppetで管理
![Page 18: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/18.jpg)
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
![Page 19: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/19.jpg)
現場の声(再掲)
• 大量のRPMつくるのは辛い
• ビルド、インストールに時間かかるの辛い
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
![Page 20: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/20.jpg)
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールに時間かかるの辛い
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
![Page 21: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/21.jpg)
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
![Page 22: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/22.jpg)
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(puppet)にはanybuildの設定だけ
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
![Page 23: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/23.jpg)
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(puppet)にはanybuildの設定だけ
• サーバの仕様はsync-lang pullで揃う
• 履歴監理…
!
![Page 24: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/24.jpg)
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(puppet)にはanybuildの設定だけ
• サーバの仕様はsync-lang pullで揃う
• 履歴がpuppetのリポジトリに集約される
!
![Page 25: anybuild/Hosting casual #1](https://reader033.vdocuments.net/reader033/viewer/2022060106/549c26dfb47959d9318b4691/html5/thumbnails/25.jpg)
やったね!