Пример простого сценария развертывания (deployment) приложения при обновлении главной ветки на github.
- Код отправляется в репозиторий в ветку main
- GitHub запускает виртуальную машину
- Код скачивается
- Устанавливаются зависимости
- Запускаются тесты
- Проект собирается
- Приложение разворачивается на VPS сервер с помощью безопасного протокола SSH
- Код обновляется и сервис перезапускается
Сервер использует Linux с вэб-сервером Nginx, путь для установки приложения: /var/www/myapp
Для использования на github разместите файл со скриптом, написанным на языке YML ваш каталог репозитория .github/workflows/deploy.yml
name: CI/CD Deploy Pipeline # Название пайплайна
on:
push:
branches:
- main # Запуск пайплайна при push в ветку main
jobs:
deploy:
runs-on: ubuntu-latest # Используем Ubuntu-сервер от GitHub
steps:
- name: Checkout code
uses: actions/checkout@v4
# Загружает код репозитория в CI-среду
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
# Устанавливает Node.js (если нужен для сборки фронтенда)
- name: Install dependencies
run: npm install
# Устанавливает зависимости проекта
- name: Run tests
run: npm test
# Запускает тесты (если тесты упадут — деплой не пойдет)
- name: Build project
run: npm run build
# Сборка проекта (например, React/Vue)
- name: Deploy to VPS via SSH
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SERVER_HOST }} # IP или домен сервера
username: ${{ secrets.SERVER_USER }} # Пользователь на сервере
key: ${{ secrets.SERVER_SSH_KEY }} # SSH-ключ
script: |
cd /var/www/myapp
git pull origin main
npm install
npm run build
pm2 restart myapp || pm2 start app.js --name myapp
# Подключение к серверу и деплой приложения
В настройках репозитория (Settings → Secrets) нужно добавить:
SERVER_HOST # IP сервера
SERVER_USER # например: deploy
SERVER_SSH_KEY # приватный SSH-ключ
Обратите внимание на две команды: "run" и "script" - они обе запускают bash-команды или скрипты, но run запускает bash код на CI-сервере, а script - на вашем VPS сервере, где размещено приложение.