С помощью этого руководства вы научитесь настраивать полный цикл непрерывной интеграции и доставки (CI/CD) для веб-приложения в Docker-контейнере на виртуальном сервере с помощью GitVerse и Dokploy.
Вы будете использовать следующие сервисы:
«Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина для размещения приложения.
«Публичные IP» — сервис для организации доступа к виртуальной машине через интернет.
Docker — система контейнеризации.
Docker Compose — инструмент для запуска и управления Docker-контейнерами.
GitVerse — платформа для совместной работы с исходным кодом.
Dokploy — open-source платформа CI/CD.
Шаги:
Если вы уже зарегистрированы, войдите под своей учетной записью.
На этом шаге вы подготовите инфраструктуру проекта: создадите виртуальную машину с публичным IP-адресом и настроите для нее правила фильтрации трафика.
Все создаваемые ресурсы должны располагаться в одной
.Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.
Создайте группу безопасности с названием sg-dokploy и добавьте в нее правила со следующими параметрами:
Трафик | Протокол | Порт | Тип источника/адресата | Источник/Адресат |
|---|---|---|---|---|
Входящий | TCP | 5000 | IP-адрес | 0.0.0.0/0 |
Входящий | TCP | 3000 | IP-адрес | 0.0.0.0/0 |
Входящий | TCP | 2222 | IP-адрес | 0.0.0.0/0 |
Входящий | TCP | 443 | IP-адрес | 0.0.0.0/0 |
Входящий | TCP | 80 | IP-адрес | 0.0.0.0/0 |
Создайте виртуальную машину со следующими параметрами:
Название — vm-dokploy.
Зона доступности — та же, что у группы безопасности.
Образ — на вкладке Публичные выберите образ Ubuntu 22.04.
Гарантированная доля vCPU — 10%.
vCPU, шт — 4.
RAM, ГБ — 8.
Диски — SSD-диск 30 ГБ.
Сетевой интерфейс — выберите тип Публичный IP.
Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.
Группы безопасности — sg-dokploy и группа безопасности по умолчанию.
Логин — оставьте значение по умолчанию или укажите новый.
Метод аутентификации — Публичный ключ и Пароль.
Пароль — задайте пароль пользователя.
Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.
Убедитесь, что ресурсы созданы и отображаются в личном кабинете:
На странице Сети → Группы безопасности отображается группа безопасности sg-dokploy со статусом «Создана».
На странице Инфраструктура → Виртуальные машины отображается виртуальная машина vm-dokploy со статусом «Запущена».
На этом шаге вы настроите окружение виртуальных машин и установите Docker.
В терминале выполните следующие действия:
Подключитесь к виртуальной машине по SSH с использованием публичного IP-адреса.
Обновите систему и установите утилиты:
sudo apt update && sudo apt upgrade -y
Установите Docker и Docker Compose:
sudo apt install -y docker.io docker-composesudo systemctl enable --now docker
Добавьте текущего пользователя виртуальной машины в группу Docker:
Выполните команду:
sudo usermod -aG docker $USERnewgrp docker
Перезагрузите систему.
Проверьте работоспособность Docker:
docker run hello-world
Появится сообщение, подтверждающее успешность установки и настройки.
В некоторых случаях права на использование Docker без префикса sudo не сохраняются и командная строка возвращает ошибку permission denied. В этом случае вы можете продолжить работу с Docker, добавляя в начало каждой команды префикс sudo.
Установите Node.js, выполнив команды:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -sudo apt install -y nodejs
На этом шаге вы настроите GitVerse как Git-сервер для хранения исходного кода.
Авторизуйтесь в GitVerse.
Создайте репозиторий с названием hello-dokploy.
Добавьте раннер для CI.
В настройках репозитория перейдите на вкладку Раннер и нажмите Добавить раннер.
Выберите платформу Docker.
В терминале виртуальной машины выполните команды, указанные на странице в разделах Способ установки и Конфигурация.
Чтобы убедиться, что раннер добавлен в репозиторий, обновите страницу в GitVerse.
На этом шаге вы создадите простой Node.js-проект.
В терминале создайте директорию проекта и перейдите в нее:
mkdir hello-dokploy && cd hello-dokploy
Создайте новый проект Node.js и установите в него библиотеку Express для создания веб-сервера:
npm init -ynpm install express
Создайте файл index.js и добавьте в него код:
const express = require('express');const app = express();app.get('/', (req, res) => res.send('Привет из Dokploy на порту 5000!'));app.listen(5000 , '0.0.0.0', () => console.log('Сервер запущен на порту 5000'));
Создайте файл Dockerfile и добавьте в него код:
FROM node:20WORKDIR /appCOPY . .RUN npm installCMD ["node", "index.js"]EXPOSE 5000
В файле конфигурации указана версия Node.js 20, если на шаге 2 вы устанавливали другую версию, измените ее в Dockerfile.
Настройте подключение к GitVerse:
Сгенерируйте SSH-ключ для работы с GitVerse, выполнив команду:
ssh-keygen -t ed25519
Нажмите клавишу ENTER или return четыре раза подряд и получите ключ.
Прочитайте файл SSH-ключа, выполнив команду:
cat ~/.ssh/id_ed25519.pub
Скопируйте SSH-ключ.
Откройте GitVerse и перейдите в настройки профиля, на вкладку SSH ключи.
Нажмите Добавить SSH ключ.
В поле Ключ вставьте скопированный ключ и нажмите Добавить SSH ключ.
Добавленный ключ появится в списке SSH-ключей профиля.
Настройте Git в вашем проекте:
В терминале установите Git и укажите глобальные настройки пользователя:
sudo apt install -y gitgit config --global user.name "<your_gitverse_user_name>"git config --global user.email "<your_gitverse_email>"
Где:
<your_gitverse_user_name> — ваше имя пользователя в GitVerse.
<your_gitverse_email> — ваш email в GitVerse.
Инициализируйте Git в проекте и свяжите с удаленным репозиторием:
git initgit remote add origin ssh://git@gitverse.ru:2222/<your_gitverse_user_name>/hello-dokploy.git
Где <your_gitverse_user_name> — ваше имя пользователя в GitVerse.
Отправьте первый коммит в удаленный репозиторий:
git add .git commit -m "first commit"git push -u origin master
Откройте репозиторий GitVerse и убедитесь, что в него добавлены файлы проекта.
На этом шаге вы настроите Dokploy для выполнения сборки проекта по событию push.
В терминале установите и настройте клиент Dokploy:
mkdir ~/.npm-globalnpm config set prefix '~/.npm-global'echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrcsource ~/.bashrcnpm install -g @dokploy/cli
Проверьте работу интерфейса Dokploy:
dokploy --version
Установите Dokploy:
curl -sSL https://dokploy.com/install.sh | sudo sh
Дождитесь окончания установки и запуска приложения на виртуальной машине. Затем в браузере перейдите по ссылке http://<public_ip>:3000, где <public_ip> — публичный IP-адрес виртуальной машины.
Откроется страница регистрации пользователя.
Создайте учетную запись.
Добавьте SSH-ключ для подключения к GitVerse и серверу:
В меню справа выберите SSH Keys и нажмите Add SSH Key.
Выберите Generate ED25519 SSH Key.
В поле Name укажите название ключа.
В поле Public Key скопируйте значение отображенного ключа.
Нажмите Create.
Ключ будет добавлен в список SSH-ключей.
Откройте GitVerse и перейдите в настройки профиля, на вкладку SSH ключи.
Нажмите Добавить SSH ключ.
В поле Ключ вставьте скопированный ключ и нажмите Добавить SSH ключ.
Добавленный ключ появится в списке SSH-ключей профиля.
Создайте ключ аутентификации для своего профиля Dokploy:
Откройте приложение Dokploy.
В правом нижнем углу нажмите на название аккаунта и выберите Profile.
В нижней части страницы нажмите Generate New Key.
В поле Name укажите название ключа.
В поле Organization выберите организацию.
Нажмите Generate.
Отобразится окно со сгенерированным публичным ключом.
Скопируйте и сохраните ключ, после чего закройте окно.
Выполните аутентификацию клиента Dokploy в терминале:
Выполните команду:
dokploy authenticate
Введите адрес портала http://<public_ip>:3000, где <public_ip> — публичный IP-адрес виртуальной машины.
Введите ключ аутентификации, сгенерированный на портале Dokploy.
Создайте проект и приложение на портале Dokploy:
Откройте веб-интерфейс Dokploy и в меню справа выберите Projects.
Нажмите Create Project.
В поле Name введите hello-dokploy и нажмите Create.
Проект будет создан.
Нажмите Create Service и затем — Application.
В поле Name введите myapp и нажмите Create.
Приложение будет создано.
Нажмите на название приложения.
Скопируйте и сохраните идентификаторы проекта и приложения из адресной строки браузера.
Они понадобятся при настройке развертывания приложения:
идентификатор проекта — буквенно-числовое выражение после project;
идентификатор приложения — буквенно-числовое выражение после application.
Настройте параметры развертывания приложения:
На вкладке General в блоке Provider нажмите Git и укажите параметры провайдера:
Repository URL — https://gitverse.ru/<your_gitverse_user_name>/hello-dokploy.git, где <your_gitverse_user_name> — ваше имя пользователя в GitVerse.
SSH Key — SSH-ключ, который был создан ранее на этом шаге.
Branch — master.
Build Path — /.
В нижней части блока Provider нажмите Save.
В блоке Build Type выберите тип сборки Dockerfile и укажите параметры:
Docker File — ./Dockerfile.
Docker Context Path — ..
В нижней части блока Build Type нажмите Save.
Настройте подключение к серверу приложения:
В меню справа выберите Remote Servers и нажмите Create Server.
Укажите параметры удаленного сервера:
Name — название сервера, например dokploy-vm.
Server Type — Deploy Server.
Select a SSH Key — SSH-ключ, созданный ранее на этом шаге.
IP Address — публичный IP-адрес виртуальной машины.
Port — 22.
Username — root.
Нажмите Create.
В списке серверов появится карточка добавленного сервера.
Нажмите Setup Server.
Скопируйте команду для добавления SSH-ключа и выполните ее в терминале виртуальной машины с правами корневого пользователя sudo.
В веб-интерфейсе Dokploy перейдите на вкладку Deployments и нажмите Setup Server.
Дождитесь окончания установки.
На этом шаге вы настроите CI/CD для развертывания приложения из репозитория GitVerse.
Откройте сессию терминала виртуальной машины и в директории hello-dokploy создайте файл конфигурации приложения:
nano dokploy.yaml
Вставьте следующий код:
app: myappbuild:context: .dockerfile: Dockerfiledeploy:replicas: 1ports:- 5000:5000restart_policy: alwaysnetworks:- dokploy_network- defaultlabels:- "traefik.enable=true"- "traefik.http.routers.myapp.rule=Host(`<public_ip>`)"- "traefik.http.services.myapp.loadbalancer.server.port=5000"
Где:
myapp — название приложения в Dokploy.
<public_ip> — публичный IP-адрес виртуальной машины.
Отправьте изменения в GitVerse, выполнив команды:
git add dokploy.yamlgit commit -m "added dokploy.yaml"git push origin master
В корне проекта создайте директорию и файл конфигурации пайплайна:
mkdir -p .gitverse/workflowsnano .gitverse/workflows/dokploy.yml
Вставьте следующий код:
name: Deploy with Dokployon:push:branches: [master]jobs:deploy:runs-on: img-ubuntu-20.04steps:- name: Checkout codeuses: actions/checkout@v3- name: Setup Node.jsuses: actions/setup-node@v3with:node-version: 20cache: 'npm'- name: Install Dokploy CLIrun: npm install -g @dokploy/cli- name: Authenticate dokployrun: dokploy authenticate -u http://<public_ip>:3000 -t $DOKPLOY_TOKENenv:DOKPLOY_TOKEN: ${{ secrets.DOKPLOY_TOKEN }}- name: Remove Dokploy containersrun: |docker ps -a --filter "name=myapp-" --format "{{.ID}}" | xargs -r docker rm -f- name: Deploy applicationrun: dokploy app deploy -y -p <project_id> -a <application_id>
Где:
<public_ip> — публичный IP-адрес виртуальной машины.
myapp — название приложения. Если вы использовали другое название, измените этот параметр.
<project_id> — идентификатор проекта, полученный из адресной строки веб-интерфейса Dokploy.
<application_id> — идентификатор приложения, полученный из адресной строки веб-интерфейса Dokploy.
Добавьте секретный токен в GitVerse:
Скопируйте сохраненный ключ аутентификации Dokploy.
На портале GitVerse откройте настройки репозитория и перейдите на вкладку Секреты и переменные.
Нажмите Добавить секрет.
Заполните поля:
Name — DOKPLOY_TOKEN.
Value — вставьте скопированный ключ аутентификации Dokploy.
Отправьте изменения в GitVerse, выполнив команды:
git add .gitverse/git commit -m "added CI/CD"git push origin master
Откройте портал GitVerse и перейдите на вкладку CI/CD вашего репозитория. Дождитесь выполнения всех заданий (jobs).
В браузере перейдите по ссылке http://<public_ip>:5000, где <public_ip> — публичный IP-адрес виртуальной машины.
На открытой странице отобразится текст развернутого приложения: «Привет из Dokploy на порту 5000!».
Если текст не отобразился, настройте порты приложения:
Откройте карточку приложения в веб-интерфейсе Dokploy и перейдите на вкладку Advanced.
В блоке Ports нажмите Add Port.
В открывшемся окне укажите порты:
Published Port — 5000.
Published Port Mode — Ingress.
Target Port — 5000.
Protocol — TCP.
Нажмите Create.
Перейдите на вкладку General и нажмите Reload.
Настройки проброса портов будут изменены, в результате чего приложение начнет работать.
На этом шаге вы проверите работу CI/CD при внесении изменений в код приложения.
В терминале виртуальной машины в директории hello-dokploy измените файл index.js вашего проекта:
const express = require('express');const app = express();app.get('/', (req, res) => res.send('Проверяем работу CI/CD в Dokploy на порту 5000!'));app.listen(5000, '0.0.0.0',() => console.log('Сервер запущен на порту 5000'));
Отправьте изменения в GitVerse, выполнив команды:
git add index.jsgit commit -m "Проверяем CI/CD пайплайн"git push origin master
На вкладке CI/CD вашего репозитория вы можете отследить статус развертывания проекта.
В браузере перейдите по ссылке http://<public_ip>:5000, где <public_ip> — публичный IP-адрес виртуальной машины.
На открытой странице отобразится измененый текст приложения: «Проверяем работу CI/CD в Dokploy на порту 5000!».
Вы развернули платформу на базе Dokploy и GitVerse для хостинга и сборки пет-проектов, используя облачный сервер.
В дальнейшем вы можете добавить:
автоматическое тестирование в пайплайн, например jest для Node.js;
проверки форматирования и линтеры, например ESLint;
мультиокружение, например staging и production, с отдельной инфраструктурой под каждое.