English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Fabric è un ottimo strumento di automazione e distribuzione sviluppato in Python, che può interagire automaticamente con server remoti tramite SSH, ad esempio trasferire file locali sui server, eseguire comandi shell sui server.
Di seguito è riportato un esempio di部署 Django progetto automatizzato
# -*- coding: utf-8 -*- # Il nome del file deve essere salvato come fabfile.py from __future__ import unicode_literals from fabric.api import * # Utente di login e nome dell'host: env.user = 'root' # Se non è impostato, fabric richiede l'input durante il login env.password = 'youpassword' # Se ci sono più host, fabric si installa automaticamente in sequenza env.hosts = ['www.example.com'] TAR_FILE_NAME = 'deploy.tar.gz' def pack(): """ Definisci un compito di pacchetto, crea un pacchetto tar :return: """ tar_files = ['*.py', 'static/*', 'templates/*', 'vue_app/', '*/*.py', 'requirements.txt'] exclude_files = ['fabfile.py', 'deploy/*', '*.tar.gz', '.DS_Store', '*/.DS_Store', '*/.*.py', '__pycache__/*' exclude_files = ['--exclude=\'%s\'' % t for t in exclude_files] local('rm -f %s' % TAR_FILE_NAME) local('tar -czvf %s %s %s' % (TAR_FILE_NAME, ' '.join(exclude_files), ' '.join(tar_files))) print('Crea un file di pacchetto nella directory corrente: %s' % TAR_FILE_NAME) def deploy(): """ Definisci un compito di distribuzione :return: """ # 先进行打包 pack() # 远程服务器的临时文件 remote_tmp_tar = '/tmp/%s' % TAR_FILE_NAME run('rm -f %s' % remote_tmp_tar) # 上传tar文件至远程服务器, local_path, remote_path put(TAR_FILE_NAME, remote_tmp_tar) # 解压 remote_dist_base_dir = '/home/python/django_app' # 如果不存在, 则创建文件夹 run('mkdir -p %s' % remote_dist_dir) # cd 命令将远程主机的工作目录切换到指定目录 with cd(remote_dist_dir): print('解压文件到目录: %s' % remote_dist_dir) run('tar -xzvf %s' % remote_tmp_tar) print('安装 requirements.txt 中的依赖包') # Sto sviluppando utilizzando python3 run('pip3 install -r requirements.txt') remote_settings_file = '%s/django_app/settings.py' % remote_dist_dir settings_file = 'deploy/settings.py' % name print('Carica il file settings.py %s' % settings_file) put(settings_file, remote_settings_file) nginx_file = 'deploy/django_app.conf' remote_nginx_file = '/etc/nginx/conf.d/django_app.conf' print('Carica il file di configurazione nginx %s' % nginx_file) put(nginx_file, remote_nginx_file) # Carica il file di configurazione supervisor nella sottocartella 'deploy' del directory corrente supervisor_file = 'deploy/django_app.ini' remote_supervisor_file = '/etc/supervisord.d/django_app.ini' print('Carica il file di configurazione supervisor %s' % supervisor_file) put(supervisor_file, remote_supervisor_file) # Ricarica il file di configurazione di nginx run('nginx -s reload') run('nginx -t') # Elimina il file di pacchetto locale local('rm -f %s' % TAR_FILE_NAME) # Carica il file di configurazione più recente, ferma i processi esistenti e avvia tutti i processi secondo la nuova configurazione run('supervisorctl reload') # Eseguire 'restart all', 'start' o 'stop fabric' genererà un errore e interromperà l'esecuzione # Ma controllando i log del server, supervisor si è riavviato # riavvia tutti i servizi di supervisione
Eseguire l'operazione pack
fab pack
Eseguire l'operazione deploy
fab deploy
Condivido con voi un altro esempio di distribuzione automatizzata del codice utilizzando Fabric
#coding=utf-8 from fabric.api import local, abort, settings, env, cd, run from fabric.colors import * from fabric.contrib.console import confirm env.hosts = ["[email protected].×××××"] env.password = "×××××" def get_git_status(): git_status_result = local("git status", capture=True) if "Nessun file da depositare, area di lavoro pulita" not in git_status_result: print red("****Ci sono file non depositati nella branch corrente") print git_status_result abort("****Operazione interrotta") def local_unit_test(): with settings(warn_only=True): test_result = local("python manage.py test") if test_result.failed: print test_result if not confirm(red("****Test unitari falliti, continuare?")): abort("****Operazione interrotta") def server_unit_test(): with settings(warn_only=True): test_result = run("python manage.py test") if test_result.failed: print test_result if not confirm(red("****Test unitari falliti, continuare?")): abort("****Operazione interrotta") def upload_code(): local("git push origin dev") print green("****Il caricamento del codice è stato completato con successo") def deploy_at_server(): print green("****ssh al server per eseguire le seguenti operazioni") with cd("/var/www/××××××"): #print run("pwd") print green("****Il codice verrà scaricato dal repository remoto") run("git checkout dev") get_git_status() run("git pull origin dev") stampa verde("****I test unitari verranno eseguiti sul server") server_unit_test() run("service apache2 restart", pty=False) stampa verde("****Riavvio di apache2 riuscito") stampa verde("********Codice distribuito con successo********") def deploy(): get_git_status() local("git checkout dev", capture=False) stampa verde("****Passaggio alla branch dev") get_git_status() stampa verde("****Inizieranno i test unitari") local_unit_test() stampa verde("****Test unitari completati, inizio upload del codice") upload_code() deploy_at_server()
Fabric può consolidare i comandi di distribuzione automatizzata o di operazioni multi-macchina in uno script, riducendo le operazioni manuali. Questo è quello che ho scritto dopo il mio primo contatto con questa cosa oggi, è davvero utile. Esegui semplicemente 'fab deploy'.
La logica principale è eseguire i test unitari locali sulla branch dev locale, quindi inviarli al server, accedere al server tramite ssh, quindi scaricare e eseguire di nuovo i test unitari, quindi riavviare apache2. La prima volta potrebbe sembrare semplice, ma continueremo a migliorare.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è di proprietà del rispettivo autore, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, il sito web non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito web eliminerà immediatamente il contenuto sospetto di violazione del copyright.