ユーザ用ツール

サイト用ツール


fabric

fabric

python製のデプロイツール。複数のサーバに対してアップロードしたり、複数のサーバで一気にコマンドを実行したりできる。

インストール

pipでインストールする

  $ easy_install pip
  $ pip install fabric

接続ユーザ情報の設定

sshでサーバを操作するのでssh情報が必要なのでどっかに書かないとだめ

fabfile.pyに直接設定を書く

from fabric.api import env
 
env.key_filename = ['~/.ssh/id_rsa']
env.user = 'nullpon'
env.password = 'nullpon_password'

.ssh/configを読むようにする

from fabric.api import env
 
env.use_ssh_config = True

fabricを実行するマシンから操作対象のマシンへ。鍵認証のときはパスフレーズなしにするなり、agent起動するなりでno pass実行可能にしておくと良い。

タスクのファイル分割

$ fab content.deploy   # 静的コンテンツデプロイ
$ fab app.deploy       # アプリのデプロイ

のようにタスクを呼べるようにする方法

pythonスクリプト用のディレクトリを掘って

fabfile.py
fabtask/
  content.py
  app.py
  __init__.py

ファイルの中身は…

# fabfile.py
import fabtask.content as content
import fabtask.app as app
 
# fabtask/content.py
from fabric.api import task
 
@task 
def deploy():
    pass
 
 
# fabtask/app.py
from fabric.api import task
 
@task 
def deploy():
    pass

QA

サーバプロセスが起動できない

以下のようにしても起動できない

run('node hoge.js >hoge.log &')

sshの切断時に端末からsighupが送られて速攻でプロセス終了してるのが原因なので、ssh接続時に疑似端末を作らないようにする

run('node hoge.js >hoge.log &', pty=False)

nohup付けても何故か効かなかった…

fabric.txt · 最終更新: 2014/09/11 05:21 by nullpon