![](https://habrastorage.org/getpro/habr/post_images/3f7/449/9fb/3f74499fbc2c0f4ee1f44c634962939b.png)
Перевели для вас статью Юлиуса Минмо о настройке непрерывного развертывания (Continuous Deployment) для своего проекта. Автоматизация позволяет сэкономить кучу времени и сил. Статья будет полезна, в первую очередь, начинающим программистам.
Непрерывное развертывание — отличная штука. Один раз коммитим проект и далее все происходит в автоматическом режиме, наблюдение за этим процессом просто гипнотизирует. В этой статье я покажу, как можно все настроить для домашнего проекта.
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».Итак, для начала давайте посмотрим на схему, где объясняется разница между Continuous Delivery и Continuous Deployment.
Skillbox рекомендует: Онлайн-курс «Профессия Frontend-разработчик».
![](https://habrastorage.org/getpro/habr/post_images/067/06d/2c0/06706d2c0caf97f57ceb16ded3605527.png)
В случае с домашним проектом выбираем Continuous Deployment, поскольку никто, кроме вас, с ним (проектом) не работает и никто от него не зависит. Ну а поскольку в большинстве случаев хочется, чтобы изменения были немедленно развернуты, то выбор очевиден. Если же вам позже захочется изменить процесс, вы всегда сможете это сделать.
Вы изучите следующее:
- Как сделать Dockerfile.
- Как выгрузить проект на GitHub.
- Как автоматически построить образ docker на Docker Hub.
- Как автоматически загрузить и запустить образ с Watchtower.
Что требуется:
- Базовое понимание того, что представляют собой Docker и Dockerfile.
- Установленный Git.
- Учетная запись на <a href='https://hub.docker.com/">Docker Hub
Сервер (физический или виртуальный) с запущенным Docker.
Вот мои репозиторий GitHub и Docker Hub, с которыми я работаю.
Почему я использую Docker?
Он дает возможность использовать одно и то же окружение для разных процессов, что исключает появление гейзенбагов и проблемы «это работает только на моей машине». Контейнеры изолированы, что хорошо с точки зрения кибербезопасности. Есть и больше преимуществ, но, на мой взгляд, эти два являются главными.
Настройка Dockerfile
Сначала нам нужен Dockerfile для проекта. Этот файл всегда называется именно так и не имеет расширения. Он всегда находится в главной директории проекта.
Он начинается с оператора FROM, который сообщает Docker, с какого базового образа мы начинаем. Вы можете провести аналогию с живописью. Можем представить себе этот образ как готовый холст с нарисованным фоном и отсутствующим главным элементом композиции (вашей программой).
Далее копируем файлы проекта в контейнер при помощи команды COPY…
Она позволяет забрать файлы из начального расположения в текущее — конечно, внутри контейнера.
Далее необходимо установить зависимости, для этого я использую Python PIP. Главное, что нужно запомнить, — это запуск команд в контейнере с RUN.
From python:3.7
COPY..
RUN pip install -r requirements.txt
Все просто, правда? Теперь можно запускать программу в контейнере.
CMD [«python», "./my_script.py"]
Теперь все, вы закончили Dockerfile и можете вручную создать образ и контейнер. Сейчас просто пропустим этот момент.
Теперь давайте создадим репозиторий в GitHub, но помните, что строку “Initialize this repository with a README” не нужно трогать.
![](https://habrastorage.org/getpro/habr/post_images/849/d2b/e01/849d2be018ed12e984dc3aeab0ed77ab.png)
Теперь копируем URL.
![](https://habrastorage.org/getpro/habr/post_images/00b/908/e1c/00b908e1c752e2eafda336ee1c23d0cb.png)
Открываем cmd/shell корневой директории проекта. Теперь необходимо инициализировать репозиторий, добавить файлы, сконфигурировать remote-режим, закоммитить файлы и отправить проект на GitHub.
git init
git add *
git remote add origin https://github.com/<user>/<repository>.git
git commit -a -m "Make Dockerfile ready for CD"
git push -u origin master
Если все ОК, GitHub-репозиторий будет выглядеть вот так:
![](https://habrastorage.org/getpro/habr/post_images/78b/3b1/5a4/78b3b15a44f8e5a5c17497652204f67f.png)
Мы на полпути к успеху!
Теперь нужно подключить GitHub к Docker Hub. Для этого нужно отправиться в настройки учетной записи.
![](https://habrastorage.org/getpro/habr/post_images/7e2/006/4c6/7e20064c60289e6965ddbf21ca540c4b.png)
Скролим вниз и подключаемся.
![](https://habrastorage.org/getpro/habr/post_images/dff/cc6/7f7/dffcc67f700952d39c6e6c7f82eb3614.png)
Теперь создаем репозиторий в Docker Hub.
![](https://habrastorage.org/getpro/habr/post_images/3ae/424/472/3ae424472fecc07a62001cc3c0f21308.png)
Называем свой репо и кликаем по иконке GitHub или Bitbucket. Потом выбираем организацию (обычно это ваш ник) и название проекта. При желании настройки можно изменить.
![](https://habrastorage.org/getpro/habr/post_images/3ed/a42/d4c/3eda42d4c16e4424ae70f99d2628f30f.png)
Ну а теперь последний шаг — здесь нам необходим Watchtower на целевой машине. Это программа, которая позволяет автоматизировать процесс. Если появляется апдейт, то Watchtower убирает оригинальный контейнер и создает контейнер из нового образа с такими же настройками.
Хорошая новость в том, что можно установить Watchtower с Docker, для этого необходимо ввести в терминал такую команду:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower
И теперь запускаем контейнер для своего проекта!
docker run -d --name <my-project> <username>/<my-project>
-d позволяет программе работать в фоне, так что она не закроется, если вы закроете терминал.
Завершая сказанное, если вы отправите коммит к репозиторию GitHub, Docker Hub автоматически создаст образ Docker. Затем с ним уже будет взаимодействовать Watchtower.
Что касается тестов, то вы сможете использовать Travis CI. Вы можете прочитать об этом здесь, но суть в том, что вы добавляете в свой репозиторий еще один файл, в котором есть инструкции для внешнего сервера для выполнения модульных тестов или любые другие инструкции.
Skillbox рекомендует:
- Онлайн-курс «Python-разработчик с нуля».
- Практический годовой курс «PHP-разработчик с нуля до PRO».
- Образовательный онлайн-курс «Профессия Java-разработчик».