こんにちは!
GMOアドマーケティング入社2年目のH.Kです。
私は大学院で機械学習を触っていました。
入社して、「はい、これ最適化して」みたいな世界を想像してたのですが、実際は泥臭い作業が色々と。
とりあえずログに関するタスクを振ってもらえるようお願いしました。
そこでログの集計ミスの修正処理にCapistranoを使用しました。
理解のため手元で0から作ってみたので、インストールから実行するまでにやったことを書いていこうと思います。
Capistranoとは
Capistranoは複数のサーバーでスクリプトを実行するためのツールです。
主にデプロイの自動化で使われています。
弊社でもデプロイツールとしてCapistranoを使用しています。
私は、弊社プロダクトReeMoのログを複数サーバーで処理するためにCapistranoを使用しました。
Capistranoを使えるようにする
CapistranoはRubyで書かれており、Rubyが必要です。Rubyのライブラリ管理ツールBundlerを使用してCapistranoを導入しました。
まずはCapistranoで使用するディレクトリにGemfileを用意します。
1 2 3 4 |
source 'https://rubygems.org' group :development do gem 'capistrano' end |
そしてそのディレクトリで bundle install でインストールできます。
その後 bundle exec cap install をするとファイル群が生成されます。
Capistranoをローカルで実行する
今回テストのためにローカルで実行したのでそれについて書きます。
生成されたファイル群の、 config/deploy に接続するサーバーの設定を記述したファイルを置きます。
そこにlocal用のファイルを追加します。
1 2 3 |
server( 'localhost', ) |
そして config/deploy.rb に下記を追加します。
1 2 3 4 5 |
namespace :hogehoge do task :hello_world do puts "hello world!" end end |
その後、Gemfileがあるディレクトリで bundle exec cap local hogehoge:hello_world とすると、 hello world! が表示されます。
Capistarnoをサーバー上で実行する
今回試しにローカルPCでCapistranoのコマンドを叩きサーバー上で実行しました。
先程local用のファイルを置いた場所に、下記設定を書いた test.rb を置きます。
1 |
role :app, %w{server_name}, no_release: true |
server_name にはssh接続するサーバーの名前を入れます。
そして、 config/deploy.rb を書き換えます。
1 2 3 4 5 6 7 |
namespace :hogehoge do task :test do on roles :all do execute "touch test_cap.txt" end end end |
これで bundle exec cap local hogehoge:testを行うと・・・下記エラーが。
NotImplementedError: OpenSSH keys only supported if ED25519 is available
Gemfileを少し書き換え。
1 2 3 4 5 6 |
source 'https://rubygems.org' group :development do gem 'capistrano' gem 'ed25519' gem 'bcrypt_pbkdf' end |
bundle install し直し、再度実行するとサーバー上に test_cap.txtが出来ました!
終わりに
今回はCapistranoを実行するまでを書きました。
デプロイツールと言うと難しそうだと思っていましたが、基本的な仕組みは思っていたよりシンプルですね。
参考リンク
Capistranoで簡単デプロイ
OpenSSH <= 7.8 と knife zero の落とし穴