У даній статті розглянемо яким чином можна реалізувати деплой проекту на DigitalOcean з використанням GithubAction базуючись на підходах CI/CD.

Створюємо новий droplet на digitalocean

На стороні digitalocean створюємо новий droplet (аналог віртуальної машини). У моєму випадку droplet не прив'язаний до домену, оскільки на даному етапі у цьому немає потреби. Створений droplet ви можете використовувати як серверне середовище для веб-сайту.

В якості операційної системи вибрано Ubuntu, оскільки вона є однією із найпопулярніших для розгортання веб - серверів, до того ж найкраще підходить для навчальних цілей.

1

Тепер потрібно отримати доступ до нашої системи. Для можна підключитись по SSH або підключитись використовуючи графічний інтерфейс digitalocean.

2

В результаті - отримуємо доступ до сервера з допомогою терміналу. Тепер ми можемо працювати на сервері та виконувати всі команди ОС Ubuntu з root - доступами.

3

Створення github - репозиторію

У нас є сервер на якому ми можемо розмістити наш проект, однак тепер потрібно створити репозиторій в якому буде зберігатись наш проект (код). Для цього потрібно мати акаунти на github та перейти на вкладку Repositories.

4

У даній репозиторії снаходитиметься код нашого проекту (наприклад, php проект, node.js - проект тощо) та конфігурації файли для реалізації ci/cd.

5

Генерування SSH ключів на стороні сервера

Для реалізації можливості CI/CD необхідно налаштувати звязок між github - репозиторієм та сервером. Для цього переходимо до терміналу та запускаємо команду:

ssh-keygen

В результаті виконання команди,  в директорії .ssh згенерувались два ключі приватний та публічний

6

Щоби переглянути вміст публічного ключа

cat .ssh/id_rsa.pub

7

Додавання ключів та SECRETS параметрів у Github

На стороні Github створимо Secrets - константи. Для цього перейдемо у необхідний репозиторій на github -> вкладку Settings -> Secrets -> Action

SERVER_PASSPHRASE

SSH_HOST - IP адреса сервера (в нашому випадку digitalocean)

SSH_KEY - приватний ключ, згенерований вище. Для перегляду ключа необхідно в терміналі виконати команду cat .ssh/id_rsa та скопіювати в буфер обміну. Після чого вставити на стороні Github

SSH_USERNAME - користувач (наприклад, root)

8

Створення deploy.yml файлу

Для реалізації ci/cd підходу необхідно розробити правила за якими наш проект буде розгортатись на сервері і таким чином впроваджуватись у production mode.

Створимо таку структуру директорій і файлів у проекті

.github/workflows/deploy.yml

У файл deploy.yml внесемо такий вміст

9

Відповідно до вищенаписаного ми вказуємо константи, що відповідають за під'єднання та авторизаціюю на сервері, копіюємо наш проект у певну директорію на сервері та з допомогою команд ОС Linux - створюємо додаткові директорії та файли.

Результат

При створенні нового коміта у вітку main буде відбуватись розгортання проекту на сервері використовуючи методологію ci/cd

Створимо новий файл та закомітимо його.

10

Переходимо у вкладку Actions

В результатів бачимо повідомлення про успішне виконання деплою.

Що ж відбувається на нашому сервері?

11

В результаті виконання деплою ми скопіювали останню версію проекту у папку cicdex та створили новий файл. Таким чином, у нас сервері знаходиться актуальна версія ПЗ.