SlideShare a Scribd company logo
1 of 28
Download to read offline
minaについて
そろそろ語っておくか

                   shibuya.rb
      SEO Naotoshi (@sonots)
                2013/04/17
自己紹介
describe Sonots do
 its(:last_name} { should == ”瀬尾” }
 its(:twitter) { should == ”@sonots” }
 its(:company) { should == :DeNA }
 its(:job_title) { should == ”Infra Engineer” }

 it_should_behave_like ”DeNA employee”
end

shared_examples_for ”DeNA employee” do
 it { should write(:perl) } #=> fail
end
最近やってること



 なにか画像が
 あった気がす
    る     Haikanko
Haikanko
 なにか画像があった気がする




-配管工-
Haikanko
• Fluentd クラスタ管理ツール
• sinatra / erb / mina
• 詳しくはブログで http://blog.livedoor.jp/
 sonots/archives/25694161.html
mina
(ミーナ?ミナ?)
Yet another

Capistrano
Mina works really fast because it’s a
deploy Bash script generator.

It generates an entire procedure as a
Bash script and runs it remotely in the
server.

    シェルスクリプトを生成して、
     リモートサーバで実行する
Compare this to the likes of Vlad or
Capistrano, Mina only creates one SSH
session per deploy, minimizing the
SSH connection overhead.


    Capistrano と違って、
  1度しかSSHセッションを開かない
            速い
サンプル
config/deploy.rb                          $   gem install mina
require 'mina/git'                       $   mina init
require 'mina/bundler'                   $   mina deploy
require 'mina/rails'                     $   mina restart

set :domain, 'your.server.com'
set :user,   'your_username'
set :repository, 'https://github.com/xxx/repo.git’

task :deploy do
  deploy do
    invoke :'git:clone'
    invoke :'deploy:link_shared_path'
    invoke :'bundle:install'
  end
end

task :restart do
  queue! %[sudo service restart nginx]
end
サンプル(2)
                                        $ mina setup #=>
config/deploy.rb
                                        !"" current
                                        !"" releases
require 'mina/rbenv'
                                        #"" shared
                                            !"" config
task :environment do
                                            $   #"" database.yml
  invoke :'rbenv:load'
                                            #"" log
  # invoke :'rvm:use'
end

task :setup => :environment do
  queue! %[mkdir -p "#{deploy_to}/shared/log"]
  queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/log"]

  queue! %[mkdir -p "#{deploy_to}/shared/config"]
  queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/config"]

  queue! %[touch "#{deploy_to}/shared/config/database.yml"]
  queue %[echo "-----> Be sure to edit 'shared/config/
database.yml'."]
end
シェルスクリプト臭
シェルスクリプト臭

   だがそれ
    がいい
  (なにか画像があ
   った気がする)
• queue or queue! でコマンドを enqueue
• task を実行すると :domain に指定したホ
  ストでシェルスクリプトを生成して実行

• mina {task_name} --simulate # dry-run
• mina {task_name} --verbose
 • queue! で指定したコマンドを echo
 • queue! だけでおk
ここから
(個人的に)
  本題
Haikanko で
    どのように
mina を使っているか
設定ファイル                                     Fluentdクラスタ
<source>
  type forward
  port <%= port %>
</source>

<% archivers.each do |archiver| %>
<match raw.<%= archiver.agent_tag %>.**>
  type copy

  <store>
    stdout
  </store>

  <store>                                        deploy
    type file_alternative
    path <%= archiver.path %>
    output_include_time false
    output_include_tag false
    output_data_type attr:message
    add_newline true
    compress gz
  </store>

  <%= erb :'_flowcounter' %>
</match>
<% end %>
ディレクトリ構造
                 require ‘boot.rb’のみ

config
`-- deploy.rb
pipework         通常ファイル
|-- boot.rb
|-- files/
|-- mina/                 mina レシピ
`-- templates/



                    erb ファイル
remote_file               拡張メソッド
def remote_file(target_path, source_path = nil)
  if block_given?
    contents = yield
    source_path = create_tempfile(contents)
  elsif source_path
    source_path = File.expand_path(source_path, files_dir)
  end
  queue! %[sudo mkdir -p $(dirname #{target_path})]
  queue! %[sudo rsync -a #{localhost}:#{source_path} #{target_path}]
end


template_file
def template_file(target_path, template_path, options = {})
  remote_file(target_path) do
    template_path = "#{template_path}.erb" unless File.extname(template_path) == ".erb"
    template_path = File.expand_path(template_path, templates_dir)
    Tilt.new(template_path).render(self, options[:locals])
  end
end

remote_directory
def remote_directory(target_path, source_path)
  source_path = File.expand_path(source_path, files_dir)
  queue! %[sudo mkdir -p $(dirname #{target_path})]
  queue! %[sudo rsync -a --delete #{localhost}:#{source_path}/ #{target_path}/]
end
chef
インスパイア
       :D
multistage 対応
capistrano/ext            config/haikanko.yml
multistage                defaults: &defaults
                            repository: ‘haikanko’
config                      branch: 'master'
|-- deploy.rb
`-- deploy                development:
    |-- staging.rb          <<: *defaults
    |-- sandbox.rb          host: localhost
    `-- production.rb
                          test:
                            <<: *defaults
                            host: localhost

                          staging:
                            <<: *defaults
                            host: xxxxxxx


       https://github.com/ngmoco/bootloader
コマンドオプション
• mina は rake ベース
 task :deploy, :host, :hoge do |t, args|
   set :domain, args[:host]
   puts args[:hoge]
 end                              \(^0^)/
 $ mina ”deploy[localhost,foobar]”




    環境変数で         ※なんとかしたいとは思っている

 task :deploy
   set :domain, ENV[‘HOST’]
   puts ENV[‘HOGE’]
 end

 $ HOST=localhost HOGE=foobar mina deploy
複数サーバ
multi_invoke
def multi_invoke(task, domains, args = [])
  isolate do
    domains.each do |domain|
      set :domain, domain
     yield if block_given?
     run! if commands.any?
     Rake::Task.tasks.each {|t| t.reenable }
    end
  end
end


            rake タスクは1度実行するとフラグが立って、実行できなくなる
            複数ホストに対して実行できるようなメソッドを用意
まとめ
良いところ
• SSHセッション1回
• シェルスクリプト脳(個人的な意見)
• シェルスクリプトノウハウ詰まってる
悪いところ
• rake のオプションキモい
• 途中に処理挟めない
  task :setup => :environment do
    queue! %[cd]
    a = Tempfile.new #=> 最初に実行
    queue! %[ls]
  end
Haikankoでは
• デプロイツールなのに、プロビジョニン
 グツール(chef)っぽく使っている

• こういうプロビジョニングツールあって
 もいいかもね

• なんか作りたい
お知らせ
• haikanko を github におきました
• テスト足りてない ^^;
   https://github.com/sonots/haikanko

• プルリク歓迎

More Related Content

What's hot

Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Yoshinori Nakanishi
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugTakeshi Komiya
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudyTakeshi Komiya
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalkBIGLOBE Tech Talk
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalkBIGLOBE Tech Talk
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)CLARA ONLINE, Inc.
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)佐久本正太
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Daisuke Ikeda
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 

What's hot (20)

Apache Module
Apache ModuleApache Module
Apache Module
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
 
Yohes kitchen
Yohes kitchenYohes kitchen
Yohes kitchen
 
NDS#31
NDS#31NDS#31
NDS#31
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
Puppetのススメ
PuppetのススメPuppetのススメ
Puppetのススメ
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Haikara
HaikaraHaikara
Haikara
 

Similar to Mina 20130417

恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE辰徳 斎藤
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChefMasahiro NAKAYAMA
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理博文 斉藤
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみたTakahiro Hidaka
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016Yu Ito
 
カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜Nobuhide Watanabe
 

Similar to Mina 20130417 (20)

恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
Capistrano
CapistranoCapistrano
Capistrano
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
 
カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
 
zsh とわたし
zsh とわたし zsh とわたし
zsh とわたし
 

More from Naotoshi Seo

HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話Naotoshi Seo
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Naotoshi Seo
 
Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014Naotoshi Seo
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbNaotoshi Seo
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415Naotoshi Seo
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraNaotoshi Seo
 
Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Naotoshi Seo
 
Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013Naotoshi Seo
 
Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531Naotoshi Seo
 
Fluentdcasual 02-haikanko
Fluentdcasual 02-haikankoFluentdcasual 02-haikanko
Fluentdcasual 02-haikankoNaotoshi Seo
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-streamNaotoshi Seo
 

More from Naotoshi Seo (13)

HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
 
Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
 
Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3
 
Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013
 
Yohoushi
YohoushiYohoushi
Yohoushi
 
Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531
 
Fluentdcasual 02-haikanko
Fluentdcasual 02-haikankoFluentdcasual 02-haikanko
Fluentdcasual 02-haikanko
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 

Recently uploaded

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 

Recently uploaded (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

Mina 20130417

  • 1. minaについて そろそろ語っておくか shibuya.rb SEO Naotoshi (@sonots) 2013/04/17
  • 2. 自己紹介 describe Sonots do its(:last_name} { should == ”瀬尾” } its(:twitter) { should == ”@sonots” } its(:company) { should == :DeNA } its(:job_title) { should == ”Infra Engineer” } it_should_behave_like ”DeNA employee” end shared_examples_for ”DeNA employee” do it { should write(:perl) } #=> fail end
  • 5. Haikanko • Fluentd クラスタ管理ツール • sinatra / erb / mina • 詳しくはブログで http://blog.livedoor.jp/ sonots/archives/25694161.html
  • 8. Mina works really fast because it’s a deploy Bash script generator. It generates an entire procedure as a Bash script and runs it remotely in the server. シェルスクリプトを生成して、 リモートサーバで実行する
  • 9. Compare this to the likes of Vlad or Capistrano, Mina only creates one SSH session per deploy, minimizing the SSH connection overhead. Capistrano と違って、 1度しかSSHセッションを開かない 速い
  • 10. サンプル config/deploy.rb $ gem install mina require 'mina/git' $ mina init require 'mina/bundler' $ mina deploy require 'mina/rails' $ mina restart set :domain, 'your.server.com' set :user, 'your_username' set :repository, 'https://github.com/xxx/repo.git’ task :deploy do deploy do invoke :'git:clone' invoke :'deploy:link_shared_path' invoke :'bundle:install' end end task :restart do queue! %[sudo service restart nginx] end
  • 11. サンプル(2) $ mina setup #=> config/deploy.rb !"" current !"" releases require 'mina/rbenv' #"" shared !"" config task :environment do $   #"" database.yml   invoke :'rbenv:load' #"" log # invoke :'rvm:use' end task :setup => :environment do   queue! %[mkdir -p "#{deploy_to}/shared/log"]   queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/log"]   queue! %[mkdir -p "#{deploy_to}/shared/config"]   queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/config"]   queue! %[touch "#{deploy_to}/shared/config/database.yml"]   queue %[echo "-----> Be sure to edit 'shared/config/ database.yml'."] end
  • 13. シェルスクリプト臭 だがそれ がいい (なにか画像があ った気がする)
  • 14. • queue or queue! でコマンドを enqueue • task を実行すると :domain に指定したホ ストでシェルスクリプトを生成して実行 • mina {task_name} --simulate # dry-run • mina {task_name} --verbose • queue! で指定したコマンドを echo • queue! だけでおk
  • 16. Haikanko で どのように mina を使っているか
  • 17. 設定ファイル Fluentdクラスタ <source>   type forward   port <%= port %> </source> <% archivers.each do |archiver| %> <match raw.<%= archiver.agent_tag %>.**>   type copy <store> stdout </store>   <store> deploy     type file_alternative     path <%= archiver.path %>     output_include_time false     output_include_tag false     output_data_type attr:message     add_newline true     compress gz   </store> <%= erb :'_flowcounter' %> </match> <% end %>
  • 18. ディレクトリ構造 require ‘boot.rb’のみ config `-- deploy.rb pipework 通常ファイル |-- boot.rb |-- files/ |-- mina/ mina レシピ `-- templates/ erb ファイル
  • 19. remote_file 拡張メソッド def remote_file(target_path, source_path = nil)   if block_given?     contents = yield     source_path = create_tempfile(contents)   elsif source_path     source_path = File.expand_path(source_path, files_dir)   end   queue! %[sudo mkdir -p $(dirname #{target_path})]   queue! %[sudo rsync -a #{localhost}:#{source_path} #{target_path}] end template_file def template_file(target_path, template_path, options = {})   remote_file(target_path) do     template_path = "#{template_path}.erb" unless File.extname(template_path) == ".erb"     template_path = File.expand_path(template_path, templates_dir)     Tilt.new(template_path).render(self, options[:locals])   end end remote_directory def remote_directory(target_path, source_path)   source_path = File.expand_path(source_path, files_dir)   queue! %[sudo mkdir -p $(dirname #{target_path})]   queue! %[sudo rsync -a --delete #{localhost}:#{source_path}/ #{target_path}/] end
  • 21. multistage 対応 capistrano/ext config/haikanko.yml multistage defaults: &defaults   repository: ‘haikanko’ config   branch: 'master' |-- deploy.rb `-- deploy development: |-- staging.rb   <<: *defaults |-- sandbox.rb   host: localhost `-- production.rb test:   <<: *defaults   host: localhost staging:   <<: *defaults   host: xxxxxxx https://github.com/ngmoco/bootloader
  • 22. コマンドオプション • mina は rake ベース task :deploy, :host, :hoge do |t, args| set :domain, args[:host] puts args[:hoge] end \(^0^)/ $ mina ”deploy[localhost,foobar]” 環境変数で ※なんとかしたいとは思っている task :deploy set :domain, ENV[‘HOST’] puts ENV[‘HOGE’] end $ HOST=localhost HOGE=foobar mina deploy
  • 23. 複数サーバ multi_invoke def multi_invoke(task, domains, args = [])   isolate do     domains.each do |domain|     set :domain, domain      yield if block_given?      run! if commands.any?      Rake::Task.tasks.each {|t| t.reenable } end end end rake タスクは1度実行するとフラグが立って、実行できなくなる 複数ホストに対して実行できるようなメソッドを用意
  • 26. 悪いところ • rake のオプションキモい • 途中に処理挟めない task :setup => :environment do   queue! %[cd] a = Tempfile.new #=> 最初に実行   queue! %[ls] end
  • 27. Haikankoでは • デプロイツールなのに、プロビジョニン グツール(chef)っぽく使っている • こういうプロビジョニングツールあって もいいかもね • なんか作りたい
  • 28. お知らせ • haikanko を github におきました • テスト足りてない ^^; https://github.com/sonots/haikanko • プルリク歓迎