Облачная платформаEvolution

Развертывание CI/CD-платформы для пет-проектов на базе Dokploy и GitVerse

Эта статья полезна?

С помощью этого руководства вы научитесь настраивать полный цикл непрерывной интеграции и доставки (CI/CD) для веб-приложения в Docker-контейнере на виртуальном сервере с помощью GitVerse и Dokploy.

Вы будете использовать следующие сервисы:

  • «Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина для размещения приложения.

  • «Публичные IP» — сервис для организации доступа к виртуальной машине через интернет.

  • Docker — система контейнеризации.

  • Docker Compose — инструмент для запуска и управления Docker-контейнерами.

  • GitVerse — платформа для совместной работы с исходным кодом.

  • Dokploy — open-source платформа CI/CD.

Шаги:

Перед началом работы

Если вы уже зарегистрированы, войдите под своей учетной записью.

1. Разверните ресурсы в облаке

На этом шаге вы подготовите инфраструктуру проекта: создадите виртуальную машину с публичным IP-адресом и настроите для нее правила фильтрации трафика.

Внимание

Все создаваемые ресурсы должны располагаться в одной

.

  1. Создайте группу безопасности с названием 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

  2. Создайте виртуальную машину со следующими параметрами:

    • Названиеvm-dokploy.

    • Зона доступности — та же, что у группы безопасности.

    • Образ — на вкладке Публичные выберите образ Ubuntu 22.04.

    • Гарантированная доля vCPU10%.

    • vCPU, шт4.

    • RAM, ГБ8.

    • Диски — SSD-диск 30 ГБ.

    • Сетевой интерфейс — выберите тип Публичный IP.

    • Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.

    • Группы безопасностиsg-dokploy и группа безопасности по умолчанию.

    • Логин — оставьте значение по умолчанию или укажите новый.

    • Метод аутентификацииПубличный ключ и Пароль.

    • Пароль — задайте пароль пользователя.

    • Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.

  3. Убедитесь, что ресурсы созданы и отображаются в личном кабинете:

    1. На странице Сети → Группы безопасности отображается группа безопасности sg-dokploy со статусом «Создана».

    2. На странице Инфраструктура → Виртуальные машины отображается виртуальная машина vm-dokploy со статусом «Запущена».

2. Настройте окружение виртуальной машины и установите Docker

На этом шаге вы настроите окружение виртуальных машин и установите Docker.

В терминале выполните следующие действия:

  1. Подключитесь к виртуальной машине по SSH с использованием публичного IP-адреса.

  2. Обновите систему и установите утилиты:

    sudo apt update && sudo apt upgrade -y
  3. Установите Docker и Docker Compose:

    sudo apt install -y docker.io docker-compose
    sudo systemctl enable --now docker
  4. Добавьте текущего пользователя виртуальной машины в группу Docker:

    1. Выполните команду:

      sudo usermod -aG docker $USER
      newgrp docker
    2. Перезагрузите систему.

    3. Проверьте работоспособность Docker:

      docker run hello-world

      Появится сообщение, подтверждающее успешность установки и настройки.

    Примечание

    В некоторых случаях права на использование Docker без префикса sudo не сохраняются и командная строка возвращает ошибку permission denied. В этом случае вы можете продолжить работу с Docker, добавляя в начало каждой команды префикс sudo.

  5. Установите Node.js, выполнив команды:

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
    sudo apt install -y nodejs

3. Подключите GitVerse

На этом шаге вы настроите GitVerse как Git-сервер для хранения исходного кода.

  1. Авторизуйтесь в GitVerse.

  2. Создайте репозиторий с названием hello-dokploy.

  3. Добавьте раннер для CI.

    1. В настройках репозитория перейдите на вкладку Раннер и нажмите Добавить раннер.

    2. Выберите платформу Docker.

    3. В терминале виртуальной машины выполните команды, указанные на странице в разделах Способ установки и Конфигурация.

    4. Чтобы убедиться, что раннер добавлен в репозиторий, обновите страницу в GitVerse.

      ../_images/runner.webp

4. Создайте проект

На этом шаге вы создадите простой Node.js-проект.

  1. В терминале создайте директорию проекта и перейдите в нее:

    mkdir hello-dokploy && cd hello-dokploy
  2. Создайте новый проект Node.js и установите в него библиотеку Express для создания веб-сервера:

    npm init -y
    npm install express
  3. Создайте файл 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'));
  4. Создайте файл Dockerfile и добавьте в него код:

    FROM node:20
    WORKDIR /app
    COPY . .
    RUN npm install
    CMD ["node", "index.js"]
    EXPOSE 5000

    В файле конфигурации указана версия Node.js 20, если на шаге 2 вы устанавливали другую версию, измените ее в Dockerfile.

  5. Настройте подключение к GitVerse:

    1. Сгенерируйте SSH-ключ для работы с GitVerse, выполнив команду:

      ssh-keygen -t ed25519
    2. Нажмите клавишу ENTER или return четыре раза подряд и получите ключ.

    3. Прочитайте файл SSH-ключа, выполнив команду:

      cat ~/.ssh/id_ed25519.pub
    4. Скопируйте SSH-ключ.

    5. Откройте GitVerse и перейдите в настройки профиля, на вкладку SSH ключи.

    6. Нажмите Добавить SSH ключ.

    7. В поле Ключ вставьте скопированный ключ и нажмите Добавить SSH ключ.

       Добавленный ключ появится в списке SSH-ключей профиля.

  6. Настройте Git в вашем проекте:

    1. В терминале установите Git и укажите глобальные настройки пользователя:

      sudo apt install -y git
      git 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.

    2. Инициализируйте Git в проекте и свяжите с удаленным репозиторием:

      git init
      git remote add origin ssh://git@gitverse.ru:2222/<your_gitverse_user_name>/hello-dokploy.git

      Где <your_gitverse_user_name> — ваше имя пользователя в GitVerse.

  7. Отправьте первый коммит в удаленный репозиторий:

    git add .
    git commit -m "first commit"
    git push -u origin master
  8. Откройте репозиторий GitVerse и убедитесь, что в него добавлены файлы проекта.

5. Настройте Dokploy

На этом шаге вы настроите Dokploy для выполнения сборки проекта по событию push.

  1. В терминале установите и настройте клиент Dokploy:

    mkdir ~/.npm-global
    npm config set prefix '~/.npm-global'
    echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc
    npm install -g @dokploy/cli
  2. Проверьте работу интерфейса Dokploy:

    dokploy --version
  3. Установите Dokploy:

    curl -sSL https://dokploy.com/install.sh | sudo sh
  4. Дождитесь окончания установки и запуска приложения на виртуальной машине. Затем в браузере перейдите по ссылке http://<public_ip>:3000, где <public_ip> — публичный IP-адрес виртуальной машины.

    Откроется страница регистрации пользователя.

  5. Создайте учетную запись.

  6. Добавьте SSH-ключ для подключения к GitVerse и серверу:

    1. В меню справа выберите SSH Keys и нажмите Add SSH Key.

    2. Выберите Generate ED25519 SSH Key.

    3. В поле Name укажите название ключа.

    4. В поле Public Key скопируйте значение отображенного ключа.

    5. Нажмите Create.

      Ключ будет добавлен в список SSH-ключей.

    6. Откройте GitVerse и перейдите в настройки профиля, на вкладку SSH ключи.

    7. Нажмите Добавить SSH ключ.

    8. В поле Ключ вставьте скопированный ключ и нажмите Добавить SSH ключ.

      Добавленный ключ появится в списке SSH-ключей профиля.

  7. Создайте ключ аутентификации для своего профиля Dokploy:

    1. Откройте приложение Dokploy.

    2. В правом нижнем углу нажмите на название аккаунта и выберите Profile.

    3. В нижней части страницы нажмите Generate New Key.

    4. В поле Name укажите название ключа.

    5. В поле Organization выберите организацию.

    6. Нажмите Generate.

      Отобразится окно со сгенерированным публичным ключом.

    7. Скопируйте и сохраните ключ, после чего закройте окно.

  8. Выполните аутентификацию клиента Dokploy в терминале:

    1. Выполните команду:

      dokploy authenticate
    2. Введите адрес портала http://<public_ip>:3000, где <public_ip> — публичный IP-адрес виртуальной машины.

    3. Введите ключ аутентификации, сгенерированный на портале Dokploy.

  9. Создайте проект и приложение на портале Dokploy:

    1. Откройте веб-интерфейс Dokploy и в меню справа выберите Projects.

    2. Нажмите Create Project.

    3. В поле Name введите hello-dokploy и нажмите Create.

      Проект будет создан.

    4. Нажмите Create Service и затем — Application.

    5. В поле Name введите myapp и нажмите Create.

      Приложение будет создано.

    6. Нажмите на название приложения.

    7. Скопируйте и сохраните идентификаторы проекта и приложения из адресной строки браузера.

      Они понадобятся при настройке развертывания приложения:

      • идентификатор проекта — буквенно-числовое выражение после project;

      • идентификатор приложения — буквенно-числовое выражение после application.

  10. Настройте параметры развертывания приложения:

    1. На вкладке General в блоке Provider нажмите Git и укажите параметры провайдера:

      • Repository URLhttps://gitverse.ru/<your_gitverse_user_name>/hello-dokploy.git, где <your_gitverse_user_name> — ваше имя пользователя в GitVerse.

      • SSH Key — SSH-ключ, который был создан ранее на этом шаге.

      • Branchmaster.

      • Build Path/.

    2. В нижней части блока Provider нажмите Save.

    3. В блоке Build Type выберите тип сборки Dockerfile и укажите параметры:

      • Docker File./Dockerfile.

      • Docker Context Path..

    4. В нижней части блока Build Type нажмите Save.

  11. Настройте подключение к серверу приложения:

    1. В меню справа выберите Remote Servers и нажмите Create Server.

    2. Укажите параметры удаленного сервера:

      • Name — название сервера, например dokploy-vm.

      • Server TypeDeploy Server.

      • Select a SSH Key — SSH-ключ, созданный ранее на этом шаге.

      • IP Address — публичный IP-адрес виртуальной машины.

      • Port22.

      • Usernameroot.

    3. Нажмите Create.

      В списке серверов появится карточка добавленного сервера.

    4. Нажмите Setup Server.

    5. Скопируйте команду для добавления SSH-ключа и выполните ее в терминале виртуальной машины с правами корневого пользователя sudo.

    6. В веб-интерфейсе Dokploy перейдите на вкладку Deployments и нажмите Setup Server.

      Дождитесь окончания установки.

6. Настройте пайплайн CI/CD

На этом шаге вы настроите CI/CD для развертывания приложения из репозитория GitVerse.

  1. Откройте сессию терминала виртуальной машины и в директории hello-dokploy создайте файл конфигурации приложения:

    nano dokploy.yaml
  2. Вставьте следующий код:

    app: myapp
    build:
    context: .
    dockerfile: Dockerfile
    deploy:
    replicas: 1
    ports:
    - 5000:5000
    restart_policy: always
    networks:
    - dokploy_network
    - default
    labels:
    - "traefik.enable=true"
    - "traefik.http.routers.myapp.rule=Host(`<public_ip>`)"
    - "traefik.http.services.myapp.loadbalancer.server.port=5000"

    Где:

    • myapp —  название приложения в Dokploy.

    • <public_ip> — публичный IP-адрес виртуальной машины.

  3. Отправьте изменения в GitVerse, выполнив команды:

    git add dokploy.yaml
    git commit -m "added dokploy.yaml"
    git push origin master
  4. В корне проекта создайте директорию и файл конфигурации пайплайна:

    mkdir -p .gitverse/workflows
    nano .gitverse/workflows/dokploy.yml
  5. Вставьте следующий код:

    name: Deploy with Dokploy
    on:
    push:
    branches: [master]
    jobs:
    deploy:
    runs-on: img-ubuntu-20.04
    steps:
    - name: Checkout code
    uses: actions/checkout@v3
    - name: Setup Node.js
    uses: actions/setup-node@v3
    with:
    node-version: 20
    cache: 'npm'
    - name: Install Dokploy CLI
    run: npm install -g @dokploy/cli
    - name: Authenticate dokploy
    run: dokploy authenticate -u http://<public_ip>:3000 -t $DOKPLOY_TOKEN
    env:
    DOKPLOY_TOKEN: ${{ secrets.DOKPLOY_TOKEN }}
    - name: Remove Dokploy containers
    run: |
    docker ps -a --filter "name=myapp-" --format "{{.ID}}" | xargs -r docker rm -f
    - name: Deploy application
    run: dokploy app deploy -y -p <project_id> -a <application_id>

    Где:

    • <public_ip> — публичный IP-адрес виртуальной машины.

    • myapp — название приложения. Если вы использовали другое название, измените этот параметр.

    • <project_id> — идентификатор проекта, полученный из адресной строки веб-интерфейса Dokploy.

    • <application_id> — идентификатор приложения, полученный из адресной строки веб-интерфейса Dokploy.

  6. Добавьте секретный токен в GitVerse:

    1. Скопируйте сохраненный ключ аутентификации Dokploy.

    2. На портале GitVerse откройте настройки репозитория и перейдите на вкладку Секреты и переменные.

    3. Нажмите Добавить секрет.

    4. Заполните поля:

      • NameDOKPLOY_TOKEN.

      • Value — вставьте скопированный ключ аутентификации Dokploy.

  7. Отправьте изменения в GitVerse, выполнив команды:

    git add .gitverse/
    git commit -m "added CI/CD"
    git push origin master
  8. Откройте портал GitVerse и перейдите на вкладку CI/CD вашего репозитория. Дождитесь выполнения всех заданий (jobs).

    ../_images/cicd_jobs_done.webp
  9. В браузере перейдите по ссылке http://<public_ip>:5000, где <public_ip> — публичный IP-адрес виртуальной машины.

    На открытой странице отобразится текст развернутого приложения: «Привет из Dokploy на порту 5000!».

  10. Если текст не отобразился, настройте порты приложения:

    1. Откройте карточку приложения в веб-интерфейсе Dokploy и перейдите на вкладку Advanced.

    2. В блоке Ports нажмите Add Port.

    3. В открывшемся окне укажите порты:

      • Published Port5000.

      • Published Port ModeIngress.

      • Target Port5000.

      • ProtocolTCP.

    4. Нажмите Create.

    5. Перейдите на вкладку General и нажмите Reload.

    Настройки проброса портов будут изменены, в результате чего приложение начнет работать.

7. Проверьте работу пайплайна CI/CD

На этом шаге вы проверите работу CI/CD при внесении изменений в код приложения.

  1. В терминале виртуальной машины в директории 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'));
  2. Отправьте изменения в GitVerse, выполнив команды:

    git add index.js
    git commit -m "Проверяем CI/CD пайплайн"
    git push origin master

    На вкладке CI/CD вашего репозитория вы можете отследить статус развертывания проекта.

  3. В браузере перейдите по ссылке http://<public_ip>:5000, где <public_ip> — публичный IP-адрес виртуальной машины.

    На открытой странице отобразится измененый текст приложения: «Проверяем работу CI/CD в Dokploy на порту 5000!».

Результат

Вы развернули платформу на базе Dokploy и GitVerse для хостинга и сборки пет-проектов, используя облачный сервер.

В дальнейшем вы можете добавить:

  • автоматическое тестирование в пайплайн, например jest для Node.js;

  • проверки форматирования и линтеры, например ESLint;

  • мультиокружение, например staging и production, с отдельной инфраструктурой под каждое.