Ткань – это библиотека Python, используемая для оптимизации и автоматизации рабочих процессов SSH. Это может быть очень полезно при автоматизации и сценариях утомительных, повторяющихся или сложных задач, развертываний, установок и конфигураций на удаленных серверах.
В этой статье мы вводим ткань, и покажу, как автоматизировать развертывание веб-приложения Flask в Alibaba Cloud Elastic Compute Service.
Ткань – введение
Ткань – это инструмент, который мы можем использовать для развертывания или синхронизации наших локальных проектов на удаленный сервер. Мы также можем автоматизировать все операции, которые мы можем достичь через SSH – мы можем настроить наш сервер, установить или обновить наш состав программного обеспечения, запуска, остановки, обновления или перезагрузки нашего приложения.
В этой статье предполагается, что читатель уже создал и настроил сервер на облаке Alibaba для обслуживания веб-приложения Flask, и что он работает.
В Этот блог пост Мы можем найти полную руководство для настройки сервера Ubuntu на Alibaba ECS для обслуживания приложения Flask. Если мы будем следовать этому руководству, наше приложение будет жить под/var/www/flaskapp (мы будем использовать flaskapp
для имени каталога здесь, но он может быть изменен на что-нибудь еще).
Согласно связанному руководству, наша флоскапп будет содержать два файла – uwsgi.ini и app.py.
Настройка развертывания
App.py Файл будет содержать что-то простое, как это:
from flask import Flask application = Flask(__name__) @application.route('/') def hello_world(): return 'Hello World!'
Теперь, чтобы оптимизировать наше развертывание, мы подумаем одинаковую структуру документов как на нашей локальной машине развития, так и на сервере. Мы также предполагаем, что на нашей местной машине мы используем командную строку Bash или что-то подобное – на MS Windows мы будем использовать оболочку WSL.
Если мы начнем наше (очень простое) приложение локально, делая Флэк бежит
В нашем Флоскапп
Каталог, мы получим простой Привет мир!
Веб-страница на нашем localhost:
Теперь нам нужно установить ткань – нам нужно только установить его на месте, наши серверы производства или разработки не нужно ничего устанавливать:
pip install fabric
В зависимости от ОС мы работаем, мы также можем быть в состоянии установить его с
sudo apt-get install fabric
Тканевые зависимости являются версиями Python 2.7 или 3.4+; Вызвать библиотеку выполнения задач; и Paramiko SSH Библиотека. Как только мы устанавливаем ткань, мы должны быть в состоянии запустить Fab
Команда в нашем терминале:
Как мы видим, Fab
Команда немедленно жалуется на (отсутствие) наличия Fabfile
В текущем каталоге, который должен содержать конфигурацию и инструкцию для ткани для запуска его команд.
Мы будем CD
в родительский каталог нашего Флоскапп
Проект и создать наши Fabfile
Отказ FabFile – это простой файл Python с некоторыми импортами, переменными и определениями функций:
import sys from fabric2 import Connection, task from fabric2.config import Config PROJECT_NAME = "fabtut" REMOTE_PATH = "/var/www/flaskapp" LOCAL_PATH = "/var/www/flaskapp" def get_connection(ctx): try: with Connection(ctx.host, ctx.user, connect_kwargs=ctx.connect_kwargs) as conn: return conn except Exception as e: return None @task def staging(ctx): ctx.user = "root" ctx.host = "xxx.xxx.xxx.xxx" ctx.connect_kwargs.key_filename = "/home/user/.ssh/id_rsa" @task def production(ctx): ctx.user = "root" ctx.host = "yyy.yyy.yyy.yyy" ctx.connect_kwargs.key_filename = "/home/user/.ssh/id_rsa_2" @task def push(ctx): ctx.run("rsync -avzh --exclude '.git' -e 'ssh -i {}' {}/ {}@{}:{}/".format(ctx.connect_kwargs.key_filename, LOCAL_PATH, ctx.user, ctx.host, REMOTE_PATH)) @task def pull(ctx): ctx.run("rsync -avzh -e 'ssh -i {}' {}@{}:{}/ {}/".format(ctx.connect_kwargs.key_filename, ctx.user, ctx.host, REMOTE_PATH, LOCAL_PATH))
Как только мы сохраним этот файл, в том же каталоге мы можем запустить потрясающий промежуточный толчок
И наш локальный каталог Flakapp будет синхронизирован с одним на нашей постановке ECS Server от Alibaba.
Некоторые заметки о настройке
Для этого руководства на нашу Fabfile
нужно будет содержать реальные IP-адреса в ctx.host
Переменные в Постановка
и Производство
Функции.
В этом примере Fabfile мы показываем одну из функций ткани – мы можем настроить несколько сред, от разработки до постановки и производства.
Мы также можем использовать несколько ключей SSH для нескольких серверных сред.
Эта настройка также демонстрирует, как мы можем цепи и объединять команды, поэтому в нашем случае мы можем использовать Постановка
и Производство
взаимозаменяемо и комбинируйте их с тянуть
или толчок
по мере необходимости.
Мы также могли бы определить другие задачи (в Fabfile мы украсим их с помощью @Task
Декоратор), будь то преформационные предварительные задачи localy или на сервере или сделать некоторую очистку после основной задачи.
Если бы мы работали с Framework Django, мы могли бы здесь определить задачи для выполнения миграций, или, если наши задачи изменяют конфигурацию сервера веб/приложений, мы могли бы перезагрузить или перезагрузить сервер после завершения нашей задачи.
Здесь придумывается цепочка задач, а также позволяет определять очень декларативные и высокоуровневые рабочие процессы.
Поскольку мы полагаемся на аутентификацию SSH в этом руководстве, нам нужно будет загрузить наш открытый ключ SSH на сервере ECS. Облако Alibaba имеет больше документирования о том, как настроить аутентификацию SSH здесь Отказ
Вывод
В этом кратком направлении мы настроили инструмент развертывания ткани, чтобы определить рабочие процессы развертывания к серверу Alibaba ECS, и мы объясняем, как работать с тканью. Мы используем синтаксис Bash в сочетании с rsync.
Здесь, но мы могли бы использовать любые другие команды Linux, такие как awk, Sed и т. Д.
Сама ткань позволяет еще более декларативными рабочими процессами, но мы находим, что использование команд Linux & Bash позволяет гораздо большей гибкостью и более сложными рабочими процессами.
У вас есть что-нибудь, чтобы добавить к этому? Дайте нам знать об этом в комментариях.
Оригинал: “https://dev.to/tyaakow/deploying-python-web-app-to-alibaba-ecs-with-fabric-2ld1”