Если вы выполните поиск по ключевому слову «Fabric», то обнаружите, что 90% информации устарело, потому что сейчас Fabric поддерживает Python3, но не совместим со старой версией Fabric. Итак, если вы будете следовать этим руководствам, это вообще не сработает. И эта статья подготовлена для студентов, которые используют Python3.
Если вы еще не использовали Fabric, эта статья поможет вам быстро начать работу с Fabric.Используете ли вы его сейчас или нет, он понадобится вам после того, как вы сначала разберетесь с ним.
Обычно наш процесс разработки выглядит так: после нескольких месяцев напряженной работы проект, наконец, разработан, и тестирование не вызывает проблем, мы отправляем код на хостинговую платформу, такую как GitHub, и готовимся к его развертыванию в официальной среде. Вы осторожно входите на производственный сервер, заходите в каталог проекта, извлекаете код из удаленного репозитория и запускаете программу. Каждый раз, когда выпускается новая функция или даже изменяется небольшая ошибка, вам приходится выполнять повторяющиеся операции, заходить на сервер, переключаться в указанный каталог, тянуть код и перезапускать сервис.
На самом деле, такого рода операции очень громоздки, имеют мало технического содержания и подвержены проблемам, поэтому появился Fabric. Fabric — это артефакт удаленного развертывания, который может выполнять команды с удаленных серверов локально.
Как это сделать? Это просто, всего несколько шагов.
Установить ткань
$ pip install fabric --upgrade
Обратите внимание, что если вы устанавливаете старую версию Fabric, новая версия Fabric несовместима со старой версией. В настоящее время существует три версии Fabric. Fabric1 — это предыдущая версия Fabric, которая поддерживает только Python2, что больше не рекомендуется. Fabric2 — это текущая Fabric, и в то же время она поддерживает Python2 и Python3, которые также настоятельно рекомендуются официальными.Существует также Fabric3, неофициальная версия, клонированная пользователями сети из старой версии Fabric1, но она совместима. с Fabric1, а также поддерживает Python2 и Python3.
Не требуется для последней версии Fabricfabfile.pyфайл, а команда fab не нужна, и почти все туториалы и материалы в Интернете по-прежнему написаны на основе Fabric 1. Когда вы смотрите эти туториалы, обратите внимание на скрининг. API, предоставляемый новой версией Fabric, очень прост.
Команда Run
Давайте рассмотрим пример, ниже приведен сценарий развертывания.
# deploy.py
# 1. 创建一个远程连接
# 2. 进入指定目录
# 3. 在指定目录下面执行重启命令
from fabric import Connection
def main():
# ip 我是随便填的
# 如果你的电脑配了ssh免密码登录,就不需要 connect_kwargs 来指定密码了。
c = Connection("root@232.231.231.22", connect_kwargs={"password": "youpassword"})
with c.cd('/var/www/youproject'):
c.run("git pull origin master")
c.run("/usr/bin/supervisorctl -c ../supervisor/supervisord.conf restart youproject")
if __name__ == '__main__':
main()
воплощать в жизнь
python deploy.py
После завершения выполнения последний код был развернут в официальной среде и перезапущен сервис.Это очень удобно?Мама,не волнуйся больше,что я набрал не ту команду в официальной среде для удаления базы данных и убегать.
Fabric не только поддерживает Linux, но и хорошо работает на платформе Windows.В небольших и средних проектах это очень хороший инструмент для эксплуатации и обслуживания.С Frabic не проблема управлять сотнями серверов.
построить соединение
class Connection(Context):
host = None
user = None
port = None
ssh_config = None
connect_timeout = None
connect_kwargs = None
...
Существуют разные способы создания объекта Connection, например, вы можете написать хост как «root@192.168.101.1:22» или вы можете написать его отдельно как 3 параметра. А connect_kwargs — это объект словаря, обычно заполняющий пароль или ключ для входа на сервер.
загрузить файлы
Метод run используется для выполнения команд, cd в указанную директорию, а метод put используется для загрузки файлов, например:
from fabric import Connection
c = Connection('web1')
c.put('myfiles.tgz', '/opt/mydata')
c.run('tar -C /opt/mydata -xzvf /opt/mydata/myfiles.tgz')
несколько серверов
Если вы хотите запустить команду на нескольких серверах, самый простой способ — использовать итерацию и выполнять команду на одном сервере за раз:
# web1,web2,mac1 都是服务器的名字,你也可以用ip代替
>>> from fabric import Connection
>>> for host in ('web1', 'web2', 'mac1'):
>>> result = Connection(host).run('uname -s')
... print("{}: {}".format(host, result.stdout.strip()))
...
web1: Linux
web2: Linux
mac1: Darwin
или используйте SerialGroup
from fabric import SerialGroup as Group
pool = Group('web1', 'web2', 'web3', connect_kwargs={"password": "youpassword"} )
pool.put('myfiles.tgz', '/opt/mydata')
pool.run('tar -C /opt/mydata -xzvf /opt/mydata/myfiles.tgz')
Описание параметра группы(*hosts, **kwargs):
- *hosts: можно передать несколько имен хостов или IP-адресов.
- Параметры, полученные **kwargs, могут быть такими же, как Connection, и может быть указан пароль
Ты понял? Для получения дополнительных статей, пожалуйста, подпишитесь на общедоступный аккаунт «Zen of Python».
Для получения дополнительной информации, пожалуйста, нажмите на официальный документ:www.fabfile.org/
Эта статья была впервые опубликована:foofish.net/fabric.html