介绍
让我们自动化的东西。 一切。
让我们还想出一个方法来使用一个单一的工具。 一个是易于编程,易于使用。 为什么不这样做所有这一切,只有SSH安装在远程机器上 - 所有命令脚本在一个位置执行本地或任何数量的各种服务器。
它不健全的辉煌和晶圆厂 ? 我们同意。
在这种DigitalOcean文章, Fabric - [系统]的管理和应用程序部署精简库 -是我们的主题。 我们将学习如何安装这个奇妙的工具,看看简单的事情可以通过简单的自动化的平凡的管理任务,否则将需要跳过通过bash黑客和难以维护,复杂的脚本。
词汇表
什么是Fabric?
- Fabric和Python编程语言
- 系统/服务器管理
- 应用程序部署
2.如何在运行Ubuntu / Debian的Droplet上安装Fabric
3. Fabric的特性和与SSH的集成
-
run
(fabric.operations.run) -
sudo
(fabric.operations.sudo) -
local
(fabric.operations.local) -
get
(fabric.operations.get) -
put
(fabric.operations.put) -
prompt
(fabric.operations.prompt) -
reboot
(fabric.operations.reboot)
Fabric助手:上下文管理器
-
cd
(fabric.context_managers.cd) -
lcd
(fabric.context_managers.lcd) -
path
(fabric.context_managers.path) -
settings
(fabric.context_managers.settings) -
prefix
(fabric.context_managers.prefix)
5.示例fabfile用于自动管理任务
什么是Fabric?
Fabric是用于与SSH和计算机系统交互的Python库(即建立在一个工具)[易]自动执行各种任务,从应用程序部署到不同一般的系统管理。
虽然是基于Python的,但并不意味着它被严格用于处理其他Python应用程序或工具。 事实上,Fabric是有你为了实现任何东西,无论特定的语言或系统。 只要满足非常基本的要求,就可以利用这个优秀的库。
Fabric脚本是基本的Python文件。 他们使用的是运行fab
附带Fabric工具。 这一切都为包括(即import ..
)你的脚本(即指令执行)和执行提供程序。
说“Hello Fab!” 用布( fabfile.py
):
# def hello(who="world"):
# print "Hello {who}!".format(who=who)
$ fab hello:who=Fab
Hello Fab!
Fabric和Python编程语言
正如我们已经简要如上所述,虽然Fabric可以在一个超大规模的场景中使用,它是一个基于Python的图书馆和fabfile的需要使用Python编程语言进行编程。
无论你使用任何其他编程语言(包括Python)的经验,当你通过我们的Fabric文章,你将学习如何使用这个工具,它不会花你很长时间来看看它是多么简单和美妙。
Python是一种非常受欢迎,广泛采用的通用目的(即不是为解决特定问题而创建的)编程语言。 它可以很容易地区分它对代码可读性和简单性的重要性。 要了解Python中,检查出很短的Python增强提案(政治公众人物)20 Python中的禅 ,其次是有点长风格指南Python代码 。
为了有一个什么样的编程在Python可能会像一个整体的了解,你可以读一些在列出的大文章的Python的新手指南 。
系统/服务器管理
使用Fabric的关键领域之一是自动化系统(和服务器)管理的日常任务。 这些工作几乎包括涉及到的一切:
构建服务器;
其维护,
监控。
当你开始使用自己的Droplet(这是一个完全成熟的虚拟化服务器,具有完全的控制/访问)时,看起来像一个谜的东西很快就会开始变得熟悉。 当您部署应用程序并开始处理其维护时,很自然地期望您将遇到一些问题。 然而,当你的应用程序获得普及和事情开始增长,管理多个Droplet和重复一遍又一遍的需要不再变得有趣。
这正是当你希望你在几年前遇到织物。
应用程序部署
部署应用程序(不管是网站,API还是服务器)通常意味着从头开始设置系统(或从时间拍摄的快照),通过更新一切,准备下载依赖关系,设置文件结构和权限,最后上传您的代码库 - 或者使用SCM(如Git)下载它。
在开发过程中,您还可能需要常规执行的命令(例如:在进入部署周期之前)。
能够以逻辑组织和最重要的可编程方式在这些任务(本地和远程)上脚本化这些任务在你意识到浪费了多少时间不断地重复相同的步骤之后被证明是非常有价值的,使得一切都容易出错在过程中。
这正是当Fabric涉及到一个Python文件,将知道做什么和在哪里做它的形式你的帮助。
如何在运行Ubuntu / Debian的Droplet上安装Fabric
安装Fabric方便和凝聚力的方法是使用默认的操作系统包管理aptitude
。
为了使用安装布aptitude
,运行以下命令:
sudo aptitude install fabric
# Alternatively, you can also use *pip*:
# pip install fabric
Fabric的特性和与SSH的集成
开箱即用,任何Python命令(或过程)和模块都可以通过Fabric使用 - 假定Fabric确实是一个Python库。
什么Fabric真正带来的表是它与SSH,允许使用简单的脚本简化一切(即广泛和良好的整合fabfile.py
)。
在本部分中,您可以找到Fabric随附的一些工具(例如功能),这些工具可用于与您指定的命令执行的环境进行交互。
注意:您可以看到和访问的文档了解Fabric的业务上的主题 。
运行(fabric.operations.run)
Fabric的run
过程用于在一个或多个远程主机执行shell命令。
运行的输出结果可利用的变量被捕获。
如果命令是成功还是失败可以通过检查
.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
,使用最广泛的Fabric命令可能是sudo
。 它允许一组给定的远程主机上使用sudo命令和参数(即超级用户 )权限的执行。
如果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")
local(fabric.operations.local)
正如我们在介绍中提到的,一个Fabric脚本(fabfile)可以用于在本地机器和远程系统上执行操作。 为了这个目的,织物提供local
操作以在本地运行的命令。
不像运行或Sudo,但是,与输出相互作用local
相同的方式是不可能的。 无论是输出可被捕获或打印-开关可以设置capture
的说法。
本地佣工如lcd
上下文管理器(用于为本地工作目录)很荣幸能与local
,以同样的方式run
(或sudo
)荣誉的cd
上下文管理。
用法示例:
# Create a source distribution tar archive (for a Python App.)
local("python setup.py sdist --formats=gztar", capture=False)
# Extract the contents of a tar archive
local("tar xzvf /tmp/trunk/app.tar.gz")
# Remove a file
local("rm /tmp/trunk/app.tar.gz")
get(fabric.operations.get)
该get
命令的存在是为了从远程系统下载(即拉)文件(S)到正在使用的Fabric计算机。 它类似于如何scp
作品和派上用场的时候,你需要下载备份,日志数据或其他一些服务器相关的项目。
您可以指定与远程路径
remote_path
参数。您可以指定本地-下载-与路径
local_path
说法。
用法示例:
# Download some logs
get(remote_path="/tmp/log_extracts.tar.gz", local_path="/logs/new_log.tar.gz")
# Download a database back-up
get("/backup/db.gz", "./db.gz")
put(fabric.operations.put)
当你需要上传的文件, put
命令可以非常类似于用来get
。 您可以再次访问命令的执行结果.failed
或.succeeded
。
local_path
-设置本地路径。remote_path
-设置远程路径。use_sudo
-用一记漂亮的把戏上传文件到任何地方远程机器上:上传到一个临时位置,然后移动。mode
-设置文件模式(标志)。mirror_local
-通过读取本地文件的模式中自动设置文件的标志(即做出可执行文件)。
用法示例:
# Upload a tar archive of an application
put("/local/path/to/app.tar.gz", "/tmp/trunk/app.tar.gz")
# Use the context manager `cd` instead of "remote_path" arg.
# This will upload app.tar.gz to /tmp/trunk/
with cd("/tmp"):
put("local/path/to/app.tar.gz", "trunk")
# Upload a file and set the exact mode desired
upload = put("requirements.txt", "requirements.txt", mode=664)
# Verify the upload
upload.succeeded
提示符(fabric.operations.prompt)
当你发现自己需要一些额外的灵活性与Fabric的工作, prompt
会来拯救你。 此命令完全符合其名称建议,并要求用户(即运行脚本的用户)在连续执行期间输入要使用的特定数据。
如果您正在使用一个单独的文件与多个应用程序来管理,例如,你可以使用prompt
设置一个执行的操作。
与任何启动之前, prompt
也可被用于查询的端口号来使用。
用法示例:
# Prompt the user
port_number = prompt("Which port would you like to use?")
# Prompt the user with defaults and validation
port_number = prompt("Which port?", default=42, validate=int)
重启(fabric.operations.reboot)
在reboot
命令也自我解释:它是用来重新引导远程系统。 默认情况下,等待两分钟(即120秒- > wait=120
)做的工作了。
用法示例:
# Reboot the remote system
reboot()
# Reboot after 30 seconds
reboot(wait=30)
Fabric的助手:上下文管理器
Fabric的上下文管理器用来与Python的with
说明。 这样做的原因是怎么命令的执行之间的会话不会保留壳的连接之间。
注意:您可以看到和访问的文档了解Fabric的上下文管理者的主题 。
cd(fabric.context_managers.cd)
cd
方面Manager允许保持目录状态(即那里的意见如下块将被执行)。 它类似于一个SSH会话中运行cd命令和运行的各种不同的命令。
用法示例:
# The *cd* context manager makes enwrapped command's
# execution relative to the stated path (i.e. "/tmp/trunk")
with cd("/tmp/trunk"):
items = sudo("ls -l")
# It is possible to "chain" context managers
# The run commands gets executed, therefore at "/tmp/trunk"
with cd("/tmp"):
with cd("/trunk"):
run("ls")
lcd(fabric.context_managers.lcd)
该lcd
上下文管理(本地CD)的作品一个以上(CD)非常相似; 然而,它只影响本地系统的状态。
用法示例:
# Change the local working directory to project's
# and upload a tar archive
with lcd("~/projects/my_project"):
print "Uploading the project archive"
put("app.tar.gz", "/tmp/trunk/app.tar.gz")
路径(fabric.context_managers.path)
path
上下文管理改变PATH变量。
设置(fabric.context_managers.settings)
当你需要暂时(即有一定的命令链),您可以使用settings
语句(即覆盖env
值)。
用法示例:
# Perform actions using a different *user*
with settings(user="user1"):
sudo("cmd")
前缀(fabric.context_managers.prefix)
prefix
声明做什么它的名字一样,并给出包裹run
和sudo
用指定的命令。
用法示例:
with prefix("cmd arg."):
run("./start")
# cmd arg. && ./start
示例fabfile用于自动管理任务
要开始学习如何编程fabfile s到自动执行简单的管理任务,让我们创建一个空的fabfile.py
。
运行以下命令来创建一个fabfile.py
使用文本编辑器nano:
nano fabfile.py
附加以下代码块更新系统并安装memcached:
# Fabfile to:
# - update the remote system(s)
# - download and install an application
# Import Fabric's API module
from fabric.api import *
env.hosts = [
'server.domain.tld',
# 'ip.add.rr.ess
# 'server2.domain.tld',
]
# Set the username
env.user = "root"
# Set the password [NOT RECOMMENDED]
# env.password = "passwd"
def update_upgrade():
"""
Update the default OS installation's
basic default tools.
"""
run("aptitude update")
run("aptitude -y upgrade")
def install_memcached():
""" Download and install memcached. """
run("aptitude install -y memcached")
def update_install():
# Update
update_upgrade()
# Install
install_memcached()
使用CTRL + X保存并退出,然后使用Y确认。
现在,您可以使用此处介绍的Fabric及其功能来启动自动化的平凡服务器管理任务。
# Automate everything!
fab update_install