anybuild/Hosting casual #1

1,443 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,443
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

anybuild/Hosting casual #1

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

×