Простой пример реализации API калькулятора, который собирается в DockerHub и разворачивается на сервере.
- Проверка исходного кода с помощью SAST Bandit
- Сборка контейнера
- Отправка собранного контейнера в DockerHub
- Логин в WireGuard
- Отправка запроса на развертывание нового образа на специальную ручку на сервере по виртуальной сети
- Развертывание нового образа на сервере
Название переменной | Значение | Пример |
---|---|---|
DOCKERHUB_USERNAME |
Имя на DockerHub | username |
DOCKERHUB_TOKEN |
Токен с DockerHub | dckr_fds_faslkdfjas... |
DOCKERHUB_REPOSITORY |
Название репозитория | repository |
WG_PRIVATE_KEY |
Приватный ключ WireGuard клиента | fsdaasfasvckjnx |
WG_ADDERSS |
Адрес WireGuard клиента в виртуальной сети | 10.0.0.12/24 |
WG_PUBLIC_KEY |
Публичный ключ WireGuard сервера | fasdsajwlrjwfs |
WG_ENDPOINT |
Адрес и порт WireGuard сервера | 11.23.31.43:51141 |
WG_ALLOWED_IPS |
Подмаска адресов, с которыми клиент связан через сервер WireGuard | 10.0.0.0/24 |
CD_HOST |
Адрес CD-сервера внутри виртуальной сети WireGuard | http://10.0.0.13:8080 |
CD_SECRET |
Токен, необходимый для прохождения аутентификации на CD-сервере | fsadjsadfgsafas |
Весь CI запускается в одном github action, он состоит из двух работ и 9 этапов.
Исходный код копируется в экшен посредством actions/checkout@v3
.
Устанавливается Python 3.9.
Устанавливаются зависимости, Bandit готовит отчет.
Результат работы Bandit сохраняется в артефакты экшена.
Результат работы Bandit проверяется на наличие high-level уязвимостей.
Исходный код копируется в экшен посредством actions/checkout@v3
.
Авторизация происходит по токену с помощью docker/login-action@v2
.
На данном этапе создается окружение для сборки образа.
Образ собирается внутри экшена и отправляется в DockerHub.
Процесс CD запускается с помощью одного экшена в 3 этапа.
Исходный код копируется в экшен
посредством actions/checkout@v3
.
На данном этапе происходит установка клиента WireGuard и его настройка на работу с сервером.
Из экшена формируется запрос на специальную ручку на сервере, запрос выполняется внутри виртуальной сети WireGuard. Тело данного запроса состоит из формы, в которой передаются:
- Токен — необходим для подтверждения запроса
entry.sh
— Файл, который будет запускать процесс развертыванияmyFiles
— остальные файлы, которые необходимы для развертывания
Калькулятор слушает 8000
порт.
Swagger находится на ручке /docs
Ручка /expression проводит вычисления для двух чисел. Используется GET
запрос с параметрами:
Параметр | Тип |
---|---|
n1 |
int |
n2 |
int |
operation |
a | s | m | d |
Ответ возвращается в формате JSON
:
{
"answer": 5,
"expression": "2 + 3"
}
curl --location --request GET \
'http://localhost:8000/expression?n1=2&n2=3&operation=a