Skip to content

Instantly share code, notes, and snippets.

@261shimizu
Last active June 22, 2017 09:14
Show Gist options
  • Save 261shimizu/5f8ef0c93e814bc6326ec05e4cba1c1d to your computer and use it in GitHub Desktop.
Save 261shimizu/5f8ef0c93e814bc6326ec05e4cba1c1d to your computer and use it in GitHub Desktop.
chefとか、rubyとか

Capistrano3触ってみた


事前準備


sudo yum install -y git gcc gcc-c+ openssl-devel readline-devel

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

rbenv --verison

git clone https://github.com/sstepehenson/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenv install 2.3.0
rbenv local 2.3.0

Capistranoインストール&SSH設定


# SSH設定
ssh-keygen
ssh-copy-id vagrant@xxx.xx.xx.xx

gem install capistrano

mkdir capistrano_practice && cd capistrano_practice

cap install

Capistranoデフォルトタスク削除。 以下をdeploy.rbに追記。

framework_tasks = [:starting, :started, :updating, :updated, :publishing, :published, :finishing, :finished]

framework_tasks.each do |t|
  Rake::Task["deploy:#{t}"].clear
end

Rake::Task[:deploy].clear

config/deploy/ステージ名.rbを編集

server 'xxx.xx.xx.xx', user: 'vagrant', roles: %w{web}

↑xxx.xx.xx.xxサーバを対象にする。そのユーザはvagrantでログインする。そのサーバにはwebサーバというロールを与える。

config/deploy.rbを編集

task :タスク名 do
    on roles(:web) do
        output = capture "sudo cat /etc/passwd | grep ○○"
        info output
    end
end


taskでタスク名と、do~endでこのタスクで何をするのかを記述。
on roles で、どのロールに対する処理かを記述。
captureは、コマンド実行結果を保存する。
それをoutputに代入して、info outputで出力するようにしている。

ちなみに、on rolesをrun_locally doにすると、自分に対して処理。

タスク実行

cap test タスク名

capコマンドの第一引数が、/config/deploy/○○.rbの○○に対応。
第二引数が、deploy.rb内の、task :タスク名に反応。

参考


入門 Capistrano 3

chef勉強

どうにかchefを使わないで良い方法が無いか考えていたが、いよいよ逃げられなくなってきたので、しっかり学ぶことに。 ぐぐるとchef-soloとかで説明しているものが多いが、chef-zeroに移行している。 さらにknifeが絡んできてなおややこしい。。。

chef(シェフ)とは


  • サーバ設定や更新を自動化するツール。
  • 「あるべき姿」を記述し、その通りになる様に管理するツールらしい。
  • 従来での手順書でのサーバ構築・管理の負担を軽減する。というか手順書をコード化(Ruby)したものらしい。
  • OSの差異を吸収してくれるありがたいフレームワーク

簡単な用語説明


chefは学習コストが高い(気がする。。。理解できないだけか。) その一端を担っているのが用語、概念。 用語は毎回ナンノコッチャわからなくなるので、一旦まとめておく。

  • Recipi(レシピ)

    • 従来の手順書に当たるもの。recipesディレクトリはその名の通り手順書を集めたもの。
    • あらゆるパッケージ、サーバの状態に対してレシピを用意することで管理を自動化できる。
    • しかも、これをgitなんかで管理してgithubなんかに上げたりすると!超ベンリ。
  • cookbooks(クックブック)

    • レシピ(及びレシピを適用するためのディレクトリ群)集。つまりrecipesディレクトリが主であるが、その他適用に必要なものが入っている。
    • site-cookbooksというディレクトリに自作のレシピを入れるというのが主流らしいが、chef-zeroのローカルモードではデフォルトでcookbookの中しか見ないらしく、苦労した。 (確か/etc/chef/client.rbだったか何かを編集するか、真似て設定ファイルを作って-cで指定しないとだめっぽい)
  • kichen(キッチン)

    • cookbook集。ただ単にリポジトリと呼ばれることも。
    • chef-repoというのがよく使われているが、これは=kichen。kichenの名前をchef-repoと言っているだけ。

基本はこの3つ。構造はそれぞれで説明した通り、kichen∋cookbooks∋recipeとなる。

が、結局使って覚えるしか無い。慣れて覚えるべし。

始め方


chefDKを使うと良いらしい(というかrbenvとかgemとかbundleとか意味不明だしあんまり使いたくないから。)

  • とりあえずリポジトリ作成

    • chef-solo init だか chef init だかのコマンドは使えなくなっていて、
    • chef generate repo リポジトリ名
    • とするらしい。
  • とりあえずクックブック作成

    • 同様に、
    • chef generate cookbook クックブック名
    • これでcookbooksの中に名前がついたクックブックが出来る。
    • knife cookbook create クックブック名 -o ./
    • は、実行出来るかわからない。違いもわからない。どうやら必須でないディレクトリも含めて作られるみたい。ただ、chef generateと違ってspecなんかのテスト系のディレクトリは作られない模様。
    • chef exec knife cookbook create ~
    • とかなら実行出来るかも(chefDK必須?)

後は、レシピ編集して実行して~を繰り返すべし。 (vagrant の sandbox機能使うと良い ex: vagrant sandbox on → rollback → commit or off)

  • 実行(ローカルモード)

    • sudo chef-client -z
    • -j localhost.jsonとか、-c client.rbとかがよく使うオプション。

補足


  • 用語
    • Resource
    • Attribute
    • data_bags
    • environment
    • node
    • role
    • client
    • Berksfile

※ knifeについてはまた今度。

CentOS+VirtualBox+Vagrant+rbenv+chefで保険環境を自動的に作るまで

手順


  1. VirtualBoxインストール
  2. Vagrantインストール
  3. rbenv用意
  4. chef用意

VirtualBoxインストール


まずはdkmsインストールすべし。
そのためにepelを使えるようにすべし。

yum install epel-release
yum install dkms
(もしかすると以下の2コマンドも必要かも)
(yum install kernel-devel kernel-headers)
(yum groupinstall "Development Tools")

cd /etc/yum.repos.d/
sudo wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
(もしくは、-oオプションで/etc/yum.reposd.d/virtualbox.repoとする)

yum list | grep VirtualBox

yum install VirtualBox-4.3

sudo usermod -a -G vboxusers username
(↑これはいらないかもしれない)
(↓こっちをやれば大丈夫かも)
service vboxdrv setup

(SELinuxは無効にしないとこける)

Vagrantインストール


sudo rpm -Uvh http://files.vagrantup.com/packages/a40522f5fabccb9ddabad03d836e120ff5d14093/vagrant_1.3.5_x86_64.rpm

rbenv用意


その前に必要なパッケージをそろえる。

sudo yum install -y git gcc gcc-c++ openssl-devel readline-devel

rbenvリポジトリクローン

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

rbenv --version

rubyインストール

  • ruby-buildプラグインの追加
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
  • rubyインストール
rbenv install -l
rbenv install 2.1.0
rbenv versions
rbenv global 2.1.0
ruby -v
rbenv rehash

これでchefを流す準備は完了。以降はredmine参照。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment