Maison >développement back-end >Tutoriel Python >Un guide simple pour démarrer avec l'outil de déploiement automatisé Python Fabric

Un guide simple pour démarrer avec l'outil de déploiement automatisé Python Fabric

高洛峰
高洛峰original
2017-01-16 17:43:161420parcourir

Fabric est un outil Python basé sur le protocole SSH. Par rapport à la méthode traditionnelle ssh/scp, l'écriture de commandes de gestion dans la syntaxe Python est plus lisible et plus facile à développer. La gestion d'une ou plusieurs machines est comme une opération locale.

Adresse du site Web officiel : http://fabfile.org

Installation
Omettre le processus d'installation des outils de gestion Python et pip

pip install fabric

Vérifier si l'installation est réussi
Entrez dans le mode d'édition python et entrez le code S'il n'y a pas d'erreur, cela signifie une installation réussie

from fabric.api import local

version fabric hello world
fichier par défaut de fabric fabfile.py Bien sûr. , si vous ne souhaitez pas utiliser ce nom, vous devez ajouter le paramètre -f

Créer le fichier fabfile.py

vim fabrile.py

Modifier le code

#coding:utf-8
from fabric.api import local#
def hello():
   # local函数用来执行本地命令
   local('echo "hello wolrd!"')

Exécutez le code

fab hello

Vous pouvez utiliser fab -l pour afficher la tâche exécutable, actuellement bonjour la fonction
Exécuter le résultat

[localhost] local: echo "hello world!"
hello world!
Done.

Méthode de maintenance traditionnelle :

$ ssh x.x.x.x 'uname -a' -- 输出略

Exemple de Fabric :

$ cat fabfile.py
from fabric.api import run
def uname():
  run('uname -a')
$ fab -H x.x.x.x uname -- 输出略

Intuitivement, il semble que beaucoup de code doit être écrit par rapport à la méthode ssh, mais il y a moins de liens contrôlables dans la méthode ssh Par exemple, si vous souhaitez déterminer si un service a été démarré, démarrez-le s'il n'a pas été démarré, etc. L'approche impérative ssh est un peu plus gênante. (Bien sûr, vous pouvez écrire un script sur la machine exploitée et appeler ce script via ssh)

Parlons de quelques avantages de Fabric :

Définition du rôle

Facile à coder Lire

encapsule les opérations locales et distantes (avez-vous toujours besoin d'encapsuler vous-même les opérations système/popen/ssh ?)

Paramètres flexibles (spécifier dynamiquement l'hôte/le rôle, etc., et exécution simultanée basée sur le multitraitement)

Sortie complète du journal

En fait, ceux répertoriés dans le travail quotidien ont essentiellement une encapsulation similaire, mais il existe un outil mature prêt à l'emploi, pourquoi ne pas l'utiliser ? Droite.

Configurations couramment utilisées :

env.host — IP de l'hôte, bien sûr, vous pouvez également spécifier le paramètre -H

env.password — Mot de passe, veuillez l'ignorer si vous avez créé un canal

env.roledefs - Regroupement de rôles, par exemple : {'web' : ['x', 'y'], 'db' : ['z']>

fab -l -- Afficher les tâches (commandes) disponibles

fab -H -- Spécifier l'hôte, prendre en charge plusieurs hôtes séparés par des virgules

fab -R -- Spécifier le rôle, prendre en charge plusieurs

fab -P                                                                                                                                                                                                                                                               Le fichier d'entrée par défaut est : fabfile/fabfile.py

Pour plus d'informations, veuillez vous référer à : fab --help

Fonctions couramment utilisées :

local('pwd')      — Commande locale

lcd('/tmp') - Changer de répertoire local

cd('/tmp') - Changer de répertoire distant

run('uname -a ') - Exécutez la commande à distance

Sudo ('/ETC/Init.d/Nginx Start ') -Endonnez le SUDO à distance, faites attention à l'option PTY

Exemple 1 : Gérer le service Nginx distant

Exemple 2 : Basé sur les rôles
$ 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 -- 启动 nginx

Exemple 3 : Mélanger les opérations locales et à distance
$ cat fabfile.py
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

Est-ce qu'ils ressemblent tous à des locaux ? Droite.

$ cat fabfile
Exemple 4 : Plusieurs serveurs cibles
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') # 远程解压
Même mot de passe ou saisie manuelle :


env.hosts = ['root@ip1:22',root@ip2:22]
Mots de passe différents ou ne souhaitez pas saisir manuellement (ce méthode également Un ensemble de serveurs avec différents rôles peut être défini) :


Pour plus d'articles connexes sur le guide de démarrage simple de Fabric, l'outil de déploiement automatisé Python, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn