
Добрый день, с вами ваш писатель-программист из компании SimplGroup. В этой статье я, насколько могу, подробно расскажу вам, как настроить SSH для подключения к виртуальной машине (VM) и интегрировать процесс CI/CD для вашего проекта с использованием Docker и GitLab/GitHub. Мы пройдем через все необходимые шаги, чтобы вы могли легко развернуть ваше приложение.
Стоит сказать, что сама я новичок и вообще бэкенд разработчик, которому неожиданно пришлось развернуть проект на виртуальной машине, так что, если сюда забрел такой же новичок, то, дружище, я может и не достаточно хорошо, но постараюсь тебе все объяснить.
Оглавление
Шаг 1: Подключение к виртуальной машине (VM)
Первым делом убедимся, что мы можем подключиться к нашей виртуальной машине с помощью SSH.
1. Создание SSH ключа
SSH ключи используются для безопасного подключения к удаленным серверам. Чтобы создать SSH ключ, выполните следующую команду в терминале:
ssh-keygen -t ed25519 -C "your_email@example.com"
-
-t ed25519указывает тип ключа (еще можно rsa — побольше в размере, но постарше). -
-C "your_email@example.com"добавляет метку для ключа (обычно это ваш email), но можно в целом не писать, если не хотите.
Далее протыкиваем везде Enter, чтобы сильно не морочиться дальше. Если что, там задавался путь (по умолчанию (ваш пользователь)/.ssh/) и пароль к ключу.
2. Прокидывание публичной части ключа в VM
После создания ключа вам нужно добавить его публичную часть на вашу виртуальную машину. Выполните следующую команду:
ssh-copy-id user@your_vm_ip
-
user— это ваш логин на VM. -
your_vm_ip— это IP-адрес вашей виртуальной машины.
Эта команда добавит ваш публичный ключ в файл ~/.ssh/authorized_keys на VM, что позволит вам подключаться без пароля.
3. Подключение к VM
Теперь вы можете подключиться к вашей виртуальной машине с помощью команды:
ssh user@your_vm_ip
Если вы все сделали правильно, вы должны войти в систему без ввода пароля.
Шаг 2: Настройка SSH в VM для Git
Теперь настроим SSH для работы с Git, чтобы вы могли безопасно взаимодействовать с вашими репозиториями на GitLab или GitHub.
1. Создание SSH ключа (если вы еще этого не сделали)
В VM выполним знакомую нам команду:
ssh-keygen -t ed25519 -C "your_email@example.com"
2. Прокидывание публичной части ключа в ваш Git
Теперь добавьте публичную часть ключа в настройки вашего репозитория на GitLab или GitHub.
Для GitHub:
-
Перейдите в настройки вашего аккаунта.
-
Выберите «SSH and GPG keys».
-
Нажмите «New SSH key».
-
Вставьте содержимое файла
~/.ssh/id_ed25519.pubв поле «Key». -
Нажмите «Add SSH key».
Для GitLab:
-
Перейдите в настройки вашего аккаунта.
-
Выберите «SSH Keys» в боковом меню.
-
Вставьте содержимое файла
~/.ssh/id_ed25519.pubв поле «Key». -
Нажмите «Add key».
3. Проверка подключения
После добавления ключа проверьте, что все работает, выполнив команду в VM:
Для GitHub:
ssh -T git@github.com
Для GitLab:
ssh -T git@gitlab.com
Если все настроено правильно, вы увидите сообщение о том, что вы успешно аутентифицированы.
Шаг 3: Клонирование репозитория
Теперь, когда SSH настроен, вы можете клонировать репозиторий на свою локальную машину. Выполните команду:
git clone git@github.com:username/repository.git
Замените username и repository на ваши данные.
Шаг 4: Разработка и тестирование
Будем считать что локально, на вашем пк или ноутбуке, вы разработали некое приложение. Чтобы запустить это все на VM, для начала, нам нужно убедиться, что докер образ у вас вообще соберется, поэтому протестим.
(Дальше убедитесь, что у вас установлен докер на компьютере. Docker Desktop самый оптимальный вариант.)
В корневой папке вашего проекта (cd корень) создайте файл Dockerfile, чтобы описать, как собирать ваш проект в контейнер.
Пример простого Dockerfile для приложения на Node.js:
FROM node:14 WORKDIR /app COPY . . RUN npm install CMD ["npm", "start"]
После создания Dockerfile убедитесь, что образ собирается локально:
docker build -t myapp .
Пока не соберется, лучше не переходить дальше, но если докер не устанавливали и хотите разворачивать сразу на VM, то хотя бы убедитесь, что ваш проект сам по себе запускается, даже без докера.
Шаг 5: Настройка CI/CD в GitLab/GitHub
Теперь создадим переменную в репозитории, куда вставим приватную часть своего SSH ключа.
1. Создание переменной
Для GitLab:
-
Перейдите в настройки вашего репозитория.
-
Выберите «CI/CD» в боковом меню.
-
Нажмите «Variables».
-
Добавьте новую переменную с именем SSH_PRIVATE_KEY и вставьте в нее содержимое файла
~/.ssh/id_ed25519(открывать можно через блокнот).
Пометка:
— Visibility лучше поставить Visible, потому что другие запрещают пробелы.
— Flags ставим Expand variable reference, чтобы можно было использовать
Для GitHub:
-
Перейдите в настройки вашего репозитория.
-
Выберите «Secrets and variables» в боковом меню.
-
Нажмите «Actions».
-
Нажмите «New repository secret».
-
Введите имя SSH_PRIVATE_KEY и вставьте содержимое вашего приватного ключа
~/.ssh/id_ed25519(открывать можно через блокнот).
2. Создание файла CI/CD
Создайте файл .gitlab-ci.yml (для GitLab) или .github/workflows/ci.yml (для GitHub) в корне вашего репозитория.
Пример для GitLab:
stages: - build - deploy before_script: - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | sed 's/\\n/\n/g' > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H your_vm_ip >> ~/.ssh/known_hosts build: stage: build script: - docker build -t myapp . deploy: stage: deploy only: - master script: - ssh user@your_vm_ip " cd /path/to/app && sudo docker stop myapp || true && sudo docker rm myapp || true && git pull origin master sudo docker build -t myapp . && sudo docker run -d -p 3000:3000 --name myapp myapp "
Пример для GitHub:
name: CI/CD on: push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Build Docker image run: docker build -t myapp . deploy: runs-on: ubuntu-latest needs: build steps: - name: SSH into VM and deploy env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} run: | echo "$SSH_PRIVATE_KEY" > private_key chmod 600 private_key ssh -o StrictHostKeyChecking=no -i private_key user@your_vm_ip << 'EOF' cd /path/to/app sudo docker stop myapp || true sudo docker rm myapp || true git pull origin master sudo docker build -t myapp . sudo docker run -d -p 3000:3000 --name myapp myapp EOF
Шаг 6: Объяснение CI/CD файла
-
before_script (для GitLab):
— Получаем наш ключ из переменной и создаем файл ~/.ssh/id_rsa.
— Устанавливаем права на файл ключа.
— Добавляем IP адрес VM в known_hosts, чтобы избежать предупреждений о безопасности. -
build:
— Проверяем, что образ собирается с помощью команды docker build. -
deploy:
— Подключаемся по SSH к нашей VM.
— Переходим в нужную директорию.
— Останавливаем и удаляем предыдущий контейнер, если он существует.
— Подтягиваем изменения из гита.
— Собираем образ заново и запускаем его на порту 3000. -
only (для GitLab) и on: push: branches: (для GitHub):
— Указываем, что деплой должен выполняться только на ветке master.
Заключение
Теперь у вас настроен процесс CI/CD, который автоматически развертывает ваше приложение на виртуальной машине при каждом обновлении ветки master.
Это значительно упрощает процесс развертывания и управления приложением. Следуя этому руководству, вы сможете легко настроить свою среду разработки и развертывания, используя SSH, Docker и CI/CD.
Ну и, напоминаю, строго не судите, я только учусь. Девиз всех начинашек: «работает и ладно»:‑)
ссылка на оригинал статьи https://habr.com/ru/articles/897654/
Добавить комментарий