Рубрики
Без рубрики

Развертывание веб-приложения Python в Alibaba ECS с тканью

Ткань – это библиотека Python, используемая для оптимизации и автоматизации рабочих процессов SSH. Это может быть очень полезно в … Теги с Python, тканью, колбой.

Ткань – это библиотека 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”