Оптимизируйте развертывание серверной части Python с помощью автоматической непрерывной интеграции с помощью Github Actions
2 марта 2023 г.В этой статье вы не узнаете, как выполнить первое развертывание на любом VPS по вашему выбору. На чем он сосредоточен, так это на том, чтобы показать вам, как постоянно автоматизировать развертывание вашего внутреннего приложения Python. Приступим.
Недавно вы разработали приложение и развернули его, а команда клиента или продукта попросила вас добавить новую функцию. Или вы исправляете ошибку, и вам нужно, чтобы эти изменения отражались на рабочем сервере.
Чем ты занимаешься? Укусить пальцы? (Э-э…) Почесать затылок? Сказать, что нельзя? (Хорошо, а теперь давай!)
Скорее всего, у вас есть исходный код приложения на Github. Если это так, то вам не о чем беспокоиться. Я покажу вам, как легко автоматизировать процесс непрерывного развертывания приложений.
Действия на GitHub
Что такое GA?
GA, вероятно, означает бога Аврама. Кто знает? Нет?
Хорошо.
«GitHub Actions — это платформа непрерывной интеграции и непрерывной доставки (CI/CD), которая позволяет автоматизировать процесс сборки, тестирования и развертывания. Вы можете создавать рабочие процессы, которые создают и тестируют каждый запрос на включение в ваш репозиторий, или развертывать объединенные запросы на вытягивание в рабочей среде». - docs.github.com
Приведенное выше заявление говорит о том, что мы можем подготовить (запустить модульные тесты и т. д.) наше приложение перед его развертыванием на сервере разработки, промежуточной подготовки, подготовки к производству и даже на рабочем сервере.
Рабочий процесс действий
Рабочий процесс действия — это настраиваемый автоматизированный процесс, который запускает одно или несколько заданий. Рабочие процессы определяются файлом YAML, зарегистрированным в вашем репозитории, и будут запускаться при запуске по событию, вручную или по заданному расписанию.
Запустите новый сеанс терминала и напишите следующую команду, чтобы создать каталог рабочих процессов:
mkdir .github/workflows/
Создайте файл рабочего процесса и назовите его python-deploy.yml
. Скопируйте и вставьте следующие коды во вновь созданный рабочий процесс:
name: Pull Changes & Deploy
on:
push:
branches:
- dev
jobs:
pull_changes:
runs-on: ubuntu-latest
steps:
- name: Pull New Changes
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.SSH_HOST }}
port: ${{ secrets.SSH_PORT }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /path/to/project_dir
git pull origin dev
deploy_backend:
runs-on: ubuntu-latest
steps:
- name: Deploy Backend
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.SSH_HOST }}
port: ${{ secrets.SSH_PORT }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /path/to/project_dir
# ---------------------------------
# INSERT COMMAND(S) HERE
# ---------------------------------
Давайте разберем описанный выше рабочий процесс:
- название — это то, как вы хотели бы назвать этот рабочий процесс.
* on: — это триггер, который вы хотите прослушивать, чтобы сообщить этому рабочему процессу, когда его запускать. В нашем случае, когда есть новый пуш на ветку «dev».
* задания: это задания, для запуска которых вам нужен рабочий процесс.
* pull_changes: — это имя задания, которое будет отвечать за внесение новых изменений в наше приложение.
* deploy_backend: — это имя задания, которое будет отвечать за развертывание нашего приложения.
* runs-on: образ Docker, на котором должен выполняться этот рабочий процесс. Я бы порекомендовал ubuntu-latest, так как это предпочтительный контейнер для тестирования вашего кода и, скорее всего, того, на чем ваш код будет работать в производственной среде.
* шаги: это список шагов, которые должен выполнить рабочий процесс.
* имя: название шага.
* использует appleboy/ssh-action@v0.1.5: это действие позволит вам выполнять удаленные команды ssh в среде (dev, staging, pre-prod, prod) вы хотите. Подробнее читайте здесь
.* с: это обязательные конфигурации, необходимые для действия.
* host: IP-адрес сервера, к которому вы хотите подключиться по SSH.
* port: номер порта сервера, к которому вы хотите подключиться по SSH. Значение по умолчанию: 22
.* имя пользователя: пользователь сервера, к которому вы хотите подключиться по SSH. По умолчанию используется ubuntu
.* ключ: закрытый ключ сервера или файла pem для экземпляра ec2.
* сценарий: это список команд, которые вы хотите выполнить для действия. Замените /path/to/project_dir
на каталог, в котором находится код вашего приложения. Замените dev
на ветку, из которой вы хотите получить изменения.
Не забудьте добавить секреты: SSH_HOST, SSH_PORT, SSH_USERNAME и SSH_KEY в секреты вашего репозитория. .
В разделе, где вы видите: "ВСТАВЬТЕ КОМАНДЫ ЗДЕСЬ", пожалуйста, замените весь комментарий на команды, которые вы хотите выполнить.
Примеры команд развертывания Framework
1). Для Django обновите следующее:
# using docker - option: 1
# --------------------------------
# run database migrations, etc
sudo docker-compose run <compose_service_name> python manage.py makemigrations
sudo docker-compose run <compose_service_name> python manage.py migrate
# using gunicorn - option 2
# -----------------------------------
source venv/bin/activate
python manage.py makemigrations
python manage.py migrate
systemctl restart gunicorn # add other services like celery
Замените <compose_service_name>
именем службы.
2). Для FastAPI обновите следующее:
# using docker - option 1
# --------------------------------------------------------------------------
# run database migrations, etc
sudo docker-compose run <compose_service_name> alembic upgrade head
# without docker - option 2
# -------------------------------
# run database migrations, etc
# alembic upgrade head
# -------------------------------
Замените <compose_service_name>
именем службы.
3). Для Flask обновите следующее:
# using docker - option 1
# -----------------------------
# run database migrations, etc
sudo docker-compose run <compose_service_name> alembic upgrade head
# without docker - option 2
# -------------------------------
# run database migrations, etc
# alembic upgrade head
# -------------------------------
Замените <compose_service_name>
именем службы.
Секреты настройки и настройки Час истины
Час истины вот-вот наступит. Я буду использовать серверную систему бухгалтерской книги, которую я создал с помощью FastAPI для демонстрационных целей.
Вы можете следить за приложением, которое хотите повторно развернуть. Перейдите на вкладку настроек вашего репозитория, перейдите на вкладку «Безопасность» и нажмите «Действия». Найдите изображение ниже того, что вы увидите, если предпримете шаги:
Нажмите кнопку с надписью «Новый секрет репозитория» и добавьте секреты, необходимые для работы рабочего процесса действия.
Помните, что вы добавляете следующее: SSH_HOST, SSH_PORT, SSH_USERNAME и SSH_KEY.
Исходный код вашего приложения готов к повторному развертыванию. Когда вы сделаете новый толчок, вы увидите уведомление в виде желтого кружка в крайнем правом углу коммита. Если вы нажмете на нее, вы увидите задания, которые были поставлены в очередь на выполнение или выполняются в данный момент.
Нажмите на любую из вакансий «Подробнее». Если вы добавите секреты репозитория и обновите файл рабочего процесса python-deploy.yml
в соответствии со своими потребностями. Вы должны увидеть, что ваше приложение было успешно повторно развернуто.
Заключение
Если вы дочитали до этого места, поздравляем.
Вы доверяли мне; и следовал за мной от начала до самого конца. Для меня большая честь.
Использование непрерывного развертывания (CD) позволяет командам часто и быстро предоставлять клиентам обновления. Внедрение CI/CD приводит к повышению скорости работы всей команды, включая выпуск новых функций и исправление ошибок.
Должен сообщить вам, что я прекращу работу инстанса EC2, чтобы мне не выставили счет, ха-ха.
Я активен в LinkedIn. Свяжитесь со мной, если у вас есть какие-либо вопросы или вы ищете бэкэнд-инженера, который присоединился бы к вашей удаленной команде разработчиков/разработчиков продукта.
Оригинал