GitHub Actions будет деплоить проект через SSH, поэтому нам нужно создать ключ и добавить его на сервер.
На локальном ПК выполни:
ssh-keygen -t rsa -b 4096 -C "github-deploy-key"
Нажми Enter несколько раз, не вводя пароль. Ключи создадутся в ~/.ssh/ (или C:\Users\юзер.ssh\ на Windows).
Файлы:
id_rsa
— приватный ключ (НЕ делись им).id_rsa.pub
— публичный ключ (его добавим на сервер).
Скопируй публичный ключ в VPS:
cat ~/.ssh/id_rsa.pub
Скопируй его содержимое.
На сервере (через SSH) добавь его в ~/.ssh/authorized_keys
:
nano ~/.ssh/authorized_keys
На локальном ПК выполни:
ssh root@IP_ТВОЕГО_VPS
Если подключение успешно, значит SSH настроен.
Открой 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).
Создай папку .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
На 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
Закоммить изменения:
git add .
git commit -m "Настроен CI/CD"
git push origin main
Открой GitHub → Actions и проверь выполнение workflow. После успешного деплоя сайт автоматически обновится на сервере. 🚀