У даній статті розглянемо яким чином можна реалізувати деплой проекту на DigitalOcean з використанням GithubAction базуючись на підходах CI/CD.
Створюємо новий droplet на digitalocean
На стороні digitalocean створюємо новий droplet (аналог віртуальної машини). У моєму випадку droplet не прив'язаний до домену, оскільки на даному етапі у цьому немає потреби. Створений droplet ви можете використовувати як серверне середовище для веб-сайту.
В якості операційної системи вибрано Ubuntu, оскільки вона є однією із найпопулярніших для розгортання веб - серверів, до того ж найкраще підходить для навчальних цілей.
Тепер потрібно отримати доступ до нашої системи. Для можна підключитись по SSH або підключитись використовуючи графічний інтерфейс digitalocean.
В результаті - отримуємо доступ до сервера з допомогою терміналу. Тепер ми можемо працювати на сервері та виконувати всі команди ОС Ubuntu з root - доступами.
Створення github - репозиторію
У нас є сервер на якому ми можемо розмістити наш проект, однак тепер потрібно створити репозиторій в якому буде зберігатись наш проект (код). Для цього потрібно мати акаунти на github та перейти на вкладку Repositories.
У даній репозиторії снаходитиметься код нашого проекту (наприклад, php проект, node.js - проект тощо) та конфігурації файли для реалізації ci/cd.
Генерування SSH ключів на стороні сервера
Для реалізації можливості CI/CD необхідно налаштувати звязок між github - репозиторієм та сервером. Для цього переходимо до терміналу та запускаємо команду:
ssh-keygen
В результаті виконання команди, в директорії .ssh згенерувались два ключі приватний та публічний
Щоби переглянути вміст публічного ключа
cat .ssh/id_rsa.pub
Додавання ключів та SECRETS параметрів у Github
На стороні Github створимо Secrets - константи. Для цього перейдемо у необхідний репозиторій на github -> вкладку Settings -> Secrets -> Action
SERVER_PASSPHRASE
SSH_HOST - IP адреса сервера (в нашому випадку digitalocean)
SSH_KEY - приватний ключ, згенерований вище. Для перегляду ключа необхідно в терміналі виконати команду cat .ssh/id_rsa та скопіювати в буфер обміну. Після чого вставити на стороні Github
SSH_USERNAME - користувач (наприклад, root)
Створення deploy.yml файлу
Для реалізації ci/cd підходу необхідно розробити правила за якими наш проект буде розгортатись на сервері і таким чином впроваджуватись у production mode.
Створимо таку структуру директорій і файлів у проекті
.github/workflows/deploy.yml
У файл deploy.yml внесемо такий вміст
Відповідно до вищенаписаного ми вказуємо константи, що відповідають за під'єднання та авторизаціюю на сервері, копіюємо наш проект у певну директорію на сервері та з допомогою команд ОС Linux - створюємо додаткові директорії та файли.
Результат
При створенні нового коміта у вітку main буде відбуватись розгортання проекту на сервері використовуючи методологію ci/cd
Створимо новий файл та закомітимо його.
Переходимо у вкладку Actions
В результатів бачимо повідомлення про успішне виконання деплою.
Що ж відбувається на нашому сервері?
В результаті виконання деплою ми скопіювали останню версію проекту у папку cicdex та створили новий файл. Таким чином, у нас сервері знаходиться актуальна версія ПЗ.