Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ShilGen/f0f24a1c5258e199bacc6c428e8756b0 to your computer and use it in GitHub Desktop.
Save ShilGen/f0f24a1c5258e199bacc6c428e8756b0 to your computer and use it in GitHub Desktop.
Настройка CI/CD

ШАГ 1: Настроить SSH-доступ к VPS

GitHub Actions будет деплоить проект через SSH, поэтому нам нужно создать ключ и добавить его на сервер.

1.1. Создать SSH-ключ

На локальном ПК выполни:

ssh-keygen -t rsa -b 4096 -C "github-deploy-key"

Нажми Enter несколько раз, не вводя пароль. Ключи создадутся в ~/.ssh/ (или C:\Users\юзер.ssh\ на Windows).

Файлы:

  • id_rsa — приватный ключ (НЕ делись им).
  • id_rsa.pub — публичный ключ (его добавим на сервер).

1.2. Добавить ключ на сервер

Скопируй публичный ключ в VPS:

cat ~/.ssh/id_rsa.pub

Скопируй его содержимое.

На сервере (через SSH) добавь его в ~/.ssh/authorized_keys:

nano ~/.ssh/authorized_keys

1.3. Проверить соединение

На локальном ПК выполни:

ssh root@IP_ТВОЕГО_VPS

Если подключение успешно, значит SSH настроен.

ШАГ 2: Добавить ключ в GitHub Secrets

Открой GitHub → Твой репозиторий → Settings → Secrets and variables → Actions. Нажми New repository secret.

Добавь секреты: SSH_PRIVATE_KEY → вставь содержимое id_rsa (приватный ключ). VPS_HOST → IP-адрес твоего сервера. VPS_USER → root или другой пользователь. VPS_PATH → путь, куда загружать проект (/var/www/my-portfolio-site).

ШАГ 3: Создать GitHub Actions Workflow

Создай папку .github/workflows/ в корне проекта и файл deploy.yml:

name: Deploy to VPS

on:
  push:
    branches:
      - main  # Запуск при пуше в main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup SSH
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H ${{ secrets.VPS_HOST }} >> ~/.ssh/known_hosts

      - name: Deploy to VPS
        run: |
          ssh ${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} << 'EOF'
            cd ${{ secrets.VPS_PATH }}
            git pull origin main

            # Установка зависимостей и перезапуск backend
            cd backend
            npm install
            pm2 restart my-backend || pm2 start server.js --name my-backend

            # Установка зависимостей и билд frontend
            cd ../frontend
            npm install
            npm run build

            # Перезапуск Nginx (если нужно)
            sudo systemctl restart nginx
          EOF

ШАГ 4: Настроить сервер для деплоя

На VPS установи всё нужное:

apt update && apt install -y git nodejs npm nginx
npm install -g pm2

Клонируй проект на сервер:

mkdir -p /var/www/my-portfolio-site
cd /var/www/my-portfolio-site
git clone https://github.com/Pavelob7/tarakani.git .
npm install

Настрой PM2 для бэкенда:

cd backend
pm2 start server.js --name my-backend
pm2 save

Настрой Nginx для фронтенда:

nano /etc/nginx/sites-available/default

Добавь:

server {
    listen 80;
    server_name _;

    location / {
        root /var/www/my-portfolio-site/frontend/build;
        index index.html;
        try_files $uri /index.html;
    }

    location /api/ {
        proxy_pass http://localhost:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Перезапусти Nginx:

systemctl restart nginx

ШАГ 5: Проверить CI/CD

Закоммить изменения:

git add .
git commit -m "Настроен CI/CD"
git push origin main

Открой GitHub → Actions и проверь выполнение workflow. После успешного деплоя сайт автоматически обновится на сервере. 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment