Created
March 2, 2025 12:49
-
-
Save Pavelob7/fe4cc9a992c7274f55b7b25aab00fad3 to your computer and use it in GitHub Desktop.
Настройка CI/CD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ШАГ 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