前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习之认识fabric

python学习之认识fabric

作者头像
py3study
发布2020-01-07 10:08:13
3550
发布2020-01-07 10:08:13
举报
文章被收录于专栏:python3python3

fabric是啥?

Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.

这东西在批量化处理一些远程命令、任务,比较方便,稍微会点python(他是一个python库么,而且一般任务都写成pyton函数的形式)就可以上手,比较简单。

一、安装python

代码语言:javascript
复制
yum -y install zlib openssl-devel    ## (不执行有可能在安装pip时候报错)
wget --no-check-certificate 
tar xf Python-2.7.8.tar.xz  
cd Python-2.7.8
./configure --prefix=/usr/local/python
vim Modules/Setup
##找到下面这句,去掉注释#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz   否则安装pip时候报错
make
make altinstall
ln -s /usr/local/python/bin/python2.7 /usr/local/bin/python

二、安装pip

pip和easy_install类似是一个安装和管理python包的工具.

代码语言:javascript
复制
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
python get-pip.py
ln -fs /usr/local/python/bin/pip /usr/bin/pip

三、安装fabric

代码语言:javascript
复制
pip install fabric
ln -fs /usr/local/python2.7/bin/fab /usr/bin/fab
测试:
[eric@localhost ~]$ python
Python 2.7.8 (default, May 11 2015, 01:43:48) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import fabric

四、fabric使用实例

1、http://docs.fabfile.org/en/1.10/tutorial.html

2、批量做免密登录的一个例子fabfile.py:

代码语言:javascript
复制
#!/usr/bin/env python
# -- encoding: utf-8 --

from fabric.api import local, cd, run, env
from fabric.colors import red, green
from fabric.context_managers import cd
from fabric.operations import *
from fabric.api import *

env.roledefs = {
    'localhost':['localhost'],
    'vacproxy':['xx.xx.xx.xx','xx.x.x.x']
}
#env.user='xxxx'
#env.password = 'xxxxx'

@roles('vacproxy')
def checks():
    run('uname -a') 

###  get the sshkey from localhost
@roles('localhost')
def get_sshkey():
    run('cp /home/aimcpro/.ssh/id_rsa.pub /home/aimcpro')

### put the sshkey to remote server
@roles('vacproxy')        
def put_sshkey():
    with cd('/tmp'):
        put('/home/aimcpro/.ssh/id_rsa.pub','id_rsa.pub.master')
    run('cat id_rsa.pub.master >> /opt/aimcpro/.ssh/authorized_keys') 

def do_task():
    #execute(checks)
#    execute(get_sshkey)
    execute(put_sshkey)

执行方法及结果:

wKioL1VRwhOQUuTcAALeR8lzkC4337.jpg
wKioL1VRwhOQUuTcAALeR8lzkC4337.jpg

3、发布web包的一个例子deploy.py:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -* 
#添加中文注释的编码 
#fabfile.py
from fabric.api import *

env.user = 'root'
env.hosts = ['192.168.1.100']
#远程服务器的密码,这个建议不要填写,宁愿在运行的过程输入,因为这是明文显示的,不安全
#也可以将机子的ssh打通,这样就可以避免输入密码的麻烦
#env.password = 'testtest'

#从版本库取出,并删除.svn文件
def download():
    local('rm -rf /tmp/newer' )
    local('mkdir /tmp/newer')
    local('svn checkout svn://localhost/newer /tmp/newer')
    local('find /tmp/newer -name ".svn" | xargs rm -rf')

#压缩打包
def pack():
    with lcd('/tmp/'):
         local('tar czvf newer.tar.gz ./newer')

#部署远程服务器目录结构
def display():
    run('rm -rf /var/www/html/tmp')
    run('mkdir /var/www/html/tmp')
    # 将本地的压缩包发送到远程服务器
    put('/tmp/newer.tar.gz','/var/www/html/tmp')

    with cd('/var/www/html/tmp'):
         run('tar xvf newer.tar.gz')

    #部分目录进行特别处理
    with cd('/var/www/html/newer/public/'):
         run('cp -r ueditor ../../tmp')

    with cd('/var/www/html/'):
         run('rm -rf newer')
         run('cp -r /var/www/html/tmp/newer ./')

    with cd('/var/www/html/newer/public'):
         run('rm -rf ueditor')
         run('cp -r /var/www/html/tmp/ueditor ./')

# 执行部署
def go():
    download()
    pack()
    display()

执行方法:

fab -f deploy.py go

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档