Heim > Artikel > Backend-Entwicklung > Eine einfache Anleitung für den Einstieg in das automatisierte Python-Bereitstellungstool Fabric
Fabric ist ein Python-Tool, das auf dem SSH-Protokoll basiert. Das Schreiben von Verwaltungsbefehlen in Python-Syntax ist besser lesbar und einfacher zu erweitern. Die Verwaltung einer einzelnen oder mehrerer Maschinen ähnelt einer lokalen Operation.
Offizielle Website-Adresse: http://fabfile.org
Installation
Überspringen Sie den Installationsprozess von Python- und Pip-Verwaltungstools
pip install fabric
Überprüfen Sie, ob die Installation erfolgt ist ist erfolgreich
Rufen Sie den Python-Bearbeitungsmodus auf und geben Sie den Code ein. Wenn keine Fehler vorliegen, bedeutet dies eine erfolgreiche Installation
from fabric.api import local
Fabric-Version Hallo Welt
Fabric-Standarddatei fabfile.py Natürlich , wenn Sie diesen Namen nicht verwenden möchten, müssen Sie den Parameter -f hinzufügen
Erstellen Sie die Datei fabfile.py
vim fabrile.py
Bearbeiten Sie den Code
#coding:utf-8 from fabric.api import local# def hello(): # local函数用来执行本地命令 local('echo "hello wolrd!"')
Führen Sie den Code aus
fab hello
Sie können fab -l verwenden, um die ausführbare Aufgabe anzuzeigen, derzeit Hallo-Funktion
Ergebnis ausführen
[localhost] local: echo "hello world!" hello world! Done.
Traditionelle Wartungsmethode:
$ ssh x.x.x.x 'uname -a' -- 输出略
Fabric-Beispiel:
$ cat fabfile.py
from fabric.api import run def uname(): run('uname -a')
$ fab -H x.x.x.x uname -- 输出略
Intuitiv scheint es, dass viel mehr Code geschrieben werden muss als bei der SSH-Methode, aber es gibt weniger kontrollierbare Links die SSH-Methode: Wenn Sie beispielsweise feststellen möchten, ob ein Dienst gestartet wurde, starten Sie ihn, wenn er nicht gestartet wurde usw. Der SSH-Imperativ-Ansatz ist etwas problematischer. (Natürlich können Sie ein Skript auf der zu bedienenden Maschine schreiben und dieses Skript über ssh aufrufen)
Lassen Sie uns über ein paar Vorteile von Fabric sprechen:
Rollendefinition
Einfach zu codierendes Lesen
kapselt lokale und Remote-Vorgänge (müssen Sie System-/Popen-/SSH-Vorgänge noch selbst kapseln?)
Flexible Parameter (Host/Rolle usw. dynamisch angeben usw.) gleichzeitige Ausführung basierend auf Multiprocessing)
Vollständige Protokollausgabe
Wie oben aufgeführt, gibt es in der täglichen Arbeit zwar grundsätzlich ähnliche Kapselungen, aber es gibt ein ausgereiftes Tool, das man nicht verwenden sollte Es? Rechts.
Häufig verwendete Konfigurationen:
env.host – Host-IP, natürlich können Sie auch den -H-Parameter angeben
env.password – Passwort, bitte ignorieren Sie es, wenn Sie haben einen Kanal eingerichtet
env.roledefs – Rollengruppierung, zum Beispiel: {'web': ['x', 'y'], 'db': ['z']}
fab -l – Verfügbare Aufgaben (Befehle) anzeigen
fab -H – Host angeben, mehrere durch Kommas getrennte Hosts unterstützen
fab -R – Rolle angeben, mehrere
fab -p Die Standardeintragsdatei lautet: fabFile/fabFile.pyWeitere Informationen finden Sie unter: Fab -Help
häufig verwendete Funktionen:
local('pwd') – Lokaler Befehl lcd('/tmp') – Lokales Verzeichnis wechseln cd('/tmp') – Remote-Verzeichnis wechseln run('uname -a ') 🎜> Beispiel 2: Rollenbasiert
Beispiel 3: Lokal mischen und Fernoperationen
$ cat fabfile.py
from fabric.api import * @task def nginx_start(): ''' nginx start ''' sudo('/etc/init.d/nginx start') @task def nginx_stop(): ''' nginx stop ''' sudo('/etc/init.d/nginx stop')
$ fab --list -- 查看可用命令 Available commands: nginx_start nginx start nginx_stop nginx stop $ fab -H x.x.x.x nginx_start -- 启动 nginxSehen sie alle wie Einheimische aus? Rechts. Beispiel 4: Mehrere Zielserver
$ cat fabfile.pyGleiches Passwort oder manuelle Eingabe:
from fabric.api import * env.roledefs = {'nginx': ['x.x.x.x', 'y.y.y.y'], 'mysql': 'z.z.z.z'} @task def mysql_start() ''' mysql start ''' sudo('/etc/init.d/mysql start')
$ fab --list -- 查看可用命令 Available commands: nginx_start nginx start nginx_stop nginx stop mysql_start mysql start $ fab -R nginx nginx_start -- 启动 nginx $ fab -R mysql mysql_start -- 启动 mysql
$ cat fabfile
def hello(): ''' test hello ''' with lcd('/tmp'): # 切换到 /tmp 目录下 local('svn co http://xxx xxx') # check 代码到本地 local('tar czf xxx.tar.gz xxx/') # 压缩本地包 put('xxx.tar.gz', '/tmp') # 上传压缩包到远程 /tmp 目录下 with cd('/tmp'): # 切换到远程 /tmp 目录 run('tar zxf xxx.tar.gz') # 远程解压Unterschiedliche Passwörter oder Sie möchten nicht manuell eingeben (dies Methode auch Es kann eine Reihe von Servern mit unterschiedlichen Rollen definiert werden):
Weitere verwandte Artikel zum einfachen Leitfaden für die ersten Schritte von Fabric, dem automatisierten Python-Bereitstellungstool, finden Sie auf der chinesischen PHP-Website !