anybuild/hosting casual #1

25
共用ホスティングでのLL管理 Ryo Kuroda @lamanotrama

Upload: ryo-kuroda

Post on 25-Dec-2014

606 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: anybuild/Hosting casual #1

共用ホスティングでのLL管理Ryo Kuroda @lamanotrama

Page 2: anybuild/Hosting casual #1

所属

GMOペパボ 技術基盤チーム

Page 3: anybuild/Hosting casual #1

経歴• ~30才 郵便局の窓口に座ってた

• 京都のWebホスティング会社で4年弱

• ペパボで5年弱 • ヘテムル • Sqale • 他いろいろ

Page 4: anybuild/Hosting casual #1

本題LL(lightweight language)をそこそこ効率的に監理、運用でき

るツールを作りました。

Page 5: anybuild/Hosting casual #1

http://heteml.jp/

共用Webホスティングサービス ApacheのVirtual Host

動的コンテンツはCGI

Page 6: anybuild/Hosting casual #1

求められる仕様 !契約して直ぐに好きな言語で色々さくっと動く環境

• 色々使える

• PHP、Perl、Ruby、Pyhton

• それぞれ複数のバージョンから選択できる

• モジュール(ライブラリ)が最初からそれなりに揃っている

• お客んさんは中でコンパイルできないしね

!

Page 7: anybuild/Hosting casual #1

現場の声

• 大量のRPMつくるのは辛い

• ビルド、インストールに時間かかるの辛い

• リポジトリ(yum|puppet)が太るの辛い

• サーバ毎の仕様差を生まないようにするには…

• 履歴監理…

!そこで、

Page 8: anybuild/Hosting casual #1

https://github.com/paperboy-heteml/anybuild

anybuild

Page 9: anybuild/Hosting casual #1

xbuild使って設定ファイルベースでばんばんインストール出来る君

!

+ 差分同期スクリプト

Page 10: anybuild/Hosting casual #1

xbuildとは

モヒカン界の至宝 @tagomoris 氏作

https://github.com/tagomoris/xbuild !

hoge-install <version> <install_path> !な感じで、本番環境のLLをセットアップできるやつ

!

Page 11: anybuild/Hosting casual #1

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

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

./any-install !

ビルドサーバ上で実行

1. 各言語のversions.txtの各行をxbuildの引数に渡して、ビルドしまくる

2. cpanfileとかGemfileとか読んでモジュールをインストールしまくる

Page 14: anybuild/Hosting casual #1

./sync-lang push|pull

1. any-install実行前にビルド済みデータをrsyncサーバからローカルにpull

2. any-installで(差分)ビルド、インストールしたものをrsyncサーバにpush

3. 本番サーバで実行してrsyncサーバからデータをpull

Page 15: anybuild/Hosting casual #1

こんな感じ+----------+ +--------------+ 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

Vagrant + Puppet + anybuild

Page 17: anybuild/Hosting casual #1

anybuildの設定、依存RPM

(*-devel)等はpuppetで管理

Page 18: anybuild/Hosting casual #1

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

現場の声(再掲)

• 大量のRPMつくるのは辛い

• ビルド、インストールに時間かかるの辛い

• リポジトリ(yum|puppet)が太るの辛い

• サーバ毎の仕様差を生まないようにするには…

• 履歴監理…

!

Page 20: anybuild/Hosting casual #1

現場の声(再掲)

• 大量のRPMつくらずrsyncでファイル同期するだけ

• ビルド、インストールに時間かかるの辛い

• リポジトリ(yum|puppet)が太るの辛い

• サーバ毎の仕様差を生まないようにするには…

• 履歴監理…

!

Page 21: anybuild/Hosting casual #1

現場の声(再掲)

• 大量のRPMつくらずrsyncでファイル同期するだけ

• ビルド、インストールはビルドサーバで一回だけ

• リポジトリ(yum|puppet)が太るの辛い

• サーバ毎の仕様差を生まないようにするには…

• 履歴監理…

!

Page 22: anybuild/Hosting casual #1

現場の声(再掲)

• 大量のRPMつくらずrsyncでファイル同期するだけ

• ビルド、インストールはビルドサーバで一回だけ

• リポジトリ(puppet)にはanybuildの設定だけ

• サーバ毎の仕様差を生まないようにするには…

• 履歴監理…

!

Page 23: anybuild/Hosting casual #1

現場の声(再掲)

• 大量のRPMつくらずrsyncでファイル同期するだけ

• ビルド、インストールはビルドサーバで一回だけ

• リポジトリ(puppet)にはanybuildの設定だけ

• サーバの仕様はsync-lang pullで揃う

• 履歴監理…

!

Page 24: anybuild/Hosting casual #1

現場の声(再掲)

• 大量のRPMつくらずrsyncでファイル同期するだけ

• ビルド、インストールはビルドサーバで一回だけ

• リポジトリ(puppet)にはanybuildの設定だけ

• サーバの仕様はsync-lang pullで揃う

• 履歴がpuppetのリポジトリに集約される

!

Page 25: anybuild/Hosting casual #1

やったね!