序章


物事を自動化しましょう。 すべての。

また、単一のツールを使用してこれを行う方法を考えてみましょう。 プログラムしやすく、使いやすいもの。 そして、リモートマシンにSSHをインストールするだけで、これらすべてを実行してみませんか。すべてのコマンドは、ローカルまたは任意の数のさまざまなサーバーで実行するために単一の場所でスクリプト化されています。

見事なとファブに聞こえませんか? 私達は同意します。

このDigitalOceanの記事では、 Fabric [システム]管理およびアプリケーション展開の合理化ライブラリ–が私たちの主題です。 このすばらしいツールをインストールする方法を学び、bashハックや保守が難しい複雑なスクリプトを使ってフープを飛び越える必要がある日常的な管理タスクを自動化するだけで簡単にできることを確認します。

用語集


1. ファブリックとは何ですか?


  1. ファブリックとPythonプログラミング言語
  2. システム/サーバー管理
  3. アプリケーションの展開

2. Ubuntu/Debianを実行しているドロップレットにファブリックをインストールする方法


3. ファブリックの機能とSSHとの統合


  1. run (fabric.operations.run)
  2. sudo (fabric.operations.sudo)
  3. local (fabric.operations.local)
  4. get (fabric.operations.get)
  5. put (fabric.operations.put)
  6. prompt (fabric.operations.prompt)
  7. reboot (fabric.operations.reboot)

4. ファブリックのヘルパー:コンテキストマネージャー


  1. cd (fabric.context_managers.cd)
  2. lcd (fabric.context_managers.lcd)
  3. path (fabric.context_managers.path)
  4. settings (fabric.context_managers.settings)
  5. prefix (fabric.context_managers.prefix)

5. 管理タスクを自動化するためのfabfileの例


ファブリックとは何ですか?


ファブリックはPythonライブラリです(つまり SSHおよびコンピュータシステムとの対話に使用されるon)を構築するためのツールであり、アプリケーションの展開から一般的なシステム管理まで、さまざまなタスクを自動化します。

Pythonベースですが、他のPythonアプリケーションやツールを操作するために厳密に使用されているわけではありません。 実際、Fabricは、特定の言語やシステムに関係なく、ほぼすべてを達成するためにあります。 非常に基本的な要件が満たされている限り、この優れたライブラリを利用できます。

ファブリックスクリプトは基本的なPythonファイルです。 これらは、Fabricに付属のfabツールを使用して実行されます。 これはすべて含まれています(すなわち import ..)スクリプト(つまり 実行するための指示)そして提供された手順を実行します。

「HelloFab!」と言ってくださいファブリックの使用(fabfile.py):

# def hello(who="world"):
#    print "Hello {who}!".format(who=who)
    
$ fab hello:who=Fab
Hello Fab!

ファブリックとPythonプログラミング言語


上で簡単に述べたように、Fabricは非常に大規模なシナリオで使用できますが、Pythonベースのライブラリであり、fabfileはPythonプログラミング言語を使用してプログラミングする必要があります。

他のプログラミング言語(Pythonを含む)の経験に関係なく、Fabricの記事を読み進めるうちに、このツールの操作方法を学び、それがどれほど単純で素晴らしいかを理解するのにそれほど時間はかかりません。

Pythonは非常に人気があり、広く採用されている汎用(つまり、 特定の問題を解決するために作成されたものではありません)プログラミング言語。 コードの可読性と単純さを重視することで、簡単に区別できます。 Pythonを理解するには、非常に短いPython拡張提案(PEP)20 Pythonの禅に続いて、少し長いPythonコードのスタイルガイドを確認してください。

Pythonでのプログラミングがどのようなものかを全体的に理解するために、Python初心者向けガイドにリストされているいくつかの優れた記事を読むことができます。

システム/サーバー管理


Fabricを使用するための重要な領域の1つは、システム(およびサーバー)管理の日常的なタスクを自動化することです。 これらの仕事には、以下に関連するほとんどすべてが含まれます。

  • サーバーの構築;

  • そのメンテナンス、および;

  • モニタリング。

独自のドロップレット(完全な制御/アクセスを備えた本格的な仮想化サーバー)で作業を開始すると、謎のように見えるものがすぐに馴染み始めます。 アプリケーションをデプロイしてメンテナンスに取り掛かるとき、いくつかの問題が発生することを予期するのは自然なことです。 ただし、アプリケーションの人気が高まり、物事が成長し始めると、複数のドロップレットを管理し、すべてを何度も繰り返す必要がなくなります。

それはまさにあなたが何年も前にFabricに会ったことを望む時です。

アプリケーションの展開


アプリケーションのデプロイ(Webサイト、API、サーバーに関係なく)は通常、システムを最初から(または時間内に取得したスナップショットから)セットアップし、すべてを更新して準備し、依存関係をダウンロードし、ファイルをセットアップすることを意味します構造と権限、最後にコードベースをアップロードするか、GitなどのSCMを使用してダウンロードします。

開発プロセス中に、定期的に実行する必要のあるコマンドが発生する可能性もあります(例:展開サイクルに入る直前)。

これらのタスク(ローカルとリモートの両方)を論理的に編成され、最も重要なこととしてプログラム可能な方法でスクリプト化できることは、同じ手順を繰り返し繰り返すのにどれだけの時間が浪費されているかを理解した直後に非常に貴重であることがわかります。処理する。

これはまさに、Fabricが何をするかどこでそれを行うかを知っているPythonファイルの形であなたの助けになるときです。

Ubuntu/Debianを実行しているドロップレットにファブリックをインストールする方法


Fabricをインストールする簡単でまとまりのある方法は、デフォルトのオペレーティングシステムパッケージマネージャーaptitudeを使用することです。

aptitudeを使用してFabricをインストールするには、以下を実行します。

sudo aptitude install fabric

# Alternatively, you can also use *pip*:
# pip install fabric

ファブリックの機能とSSHとの統合


箱から出して、任意のPythonコマンド(またはプロシージャ)とモジュールをFabricを介して利用できます-Fabricが実際にPythonライブラリであることを前提としています。

Fabricが実際にテーブルにもたらすのは、SSHとの広範囲で優れた統合であり、単純なスクリプトを使用してすべてを合理化できます(つまり、 fabfile.py)。

このセクションでは、ツールの選択を見つけることができます(例: 機能)指定したコマンドが実行される環境と対話するために使用できるFabricに付属しています。

注:件名に関するドキュメントにアクセスすると、Fabricの操作について詳しく知ることができます。

実行(fabric.operations.run)


Fabricのrunプロシージャは、1つ以上のリモートホストでシェルコマンドを実行するために使用されます。

  • run の出力結果は、変数を使用してキャプチャできます。

  • コマンドが成功したか失敗したかは、.failed.succeededを使用して確認できます。

使用例:

# Create a directory (i.e. folder)
run("mkdir /tmp/trunk/")

# Uptime
run("uptime")

# Hostname
run("hostname")

# Capture the output of "ls" command
result = run("ls -l /var/www")

# Check if command failed
result.failed

sudo(fabric.operations.sudo)


runに加えて、最も広く使用されているファブリックコマンドはおそらくsudoです。 これにより、sudoを使用して特定のコマンドと引数のセットを実行できます(つまり、 リモートホストでのsuperuser)特権。

sudoコマンドが明示的に指定されたユーザーで使用される場合、実行はrootとしてではなく、別のユーザー(つまり、 UID 1010)。

使用例:

# Create a directory
sudo("mkdir /var/www")

# Create a directory as another user
sudo("mkdir /var/www/web-app-one", user="web-admin")

# Return the output
result = sudo("ls -l /var/www")

ローカル(fabric.operations.local)


はじめに説明したように、単一のファブリックスクリプト(fabfile)を使用して、ローカルマシンとリモートシステムの両方でアクションを実行できます。 この目的のために、Fabricはコマンドをローカルで実行するためのlocal操作を提供します。

ただし、runやsudoとは異なり、localの出力を同じように操作することはできません。 どちらの出力もキャプチャまたは印刷できます–スイッチはcapture引数で設定できます。

lcdコンテキストマネージャー(ローカル作業ディレクトリの設定に使用)などのローカルヘルパーは、localと同じように名誉になります[ X168X]