Автоматический деплой на VPS через GitHub Actions — это способ выкатывать изменения на сервер без ручного scp, SSH-команд и лишних ошибок. Подход особенно полезен для pet-проектов, лендингов, API и небольших production-сервисов.
Что нужно для настройки
- VPS с доступом по SSH
- GitHub-репозиторий с проектом
- SSH-ключ для безопасного подключения
- установленный на сервере runtime: Node.js / Python / Docker — в зависимости от проекта
- GitHub Secrets для хранения чувствительных данных 🔐
Какие данные добавить в GitHub Secrets
Обычно нужны:
HOST— IP или домен VPSUSERNAME— пользователь сервераSSH_KEY— приватный SSH-ключPORT— SSH-порт, если не стандартный
Если проект требует переменные окружения, их тоже лучше хранить в Secrets, а не в коде.
Базовый сценарий деплоя
- Вы пушите код в
main - GitHub Actions запускает workflow
- Runner подключается к VPS по SSH
- На сервере обновляется код
- Устанавливаются зависимости
- Перезапускается приложение ⚙️
Пример workflow
name: Deploy to VPS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.PORT }}
script: |
cd /var/www/app
git pull origin main
npm install
npm run build
pm2 restart appЧто должно быть на VPS
- проект уже один раз склонирован в нужную папку
- настроены права доступа
- установлен
pm2,systemdили Docker для перезапуска сервиса - сервер умеет получать изменения из GitHub
Важный момент с SSH-ключами
Лучше создать отдельный deploy key, а не использовать личный ключ администратора. Это снижает риски и упрощает отзыв доступа. Также стоит отключить вход по паролю, оставив только авторизацию по ключу 🛡️
Частые ошибки
Permission denied— неверный ключ или права на сервереgit pullне работает — сервер не авторизован в GitHub- приложение не перезапускается — проблема в
pm2или service unit - деплой проходит, но сайт не обновился — забыли пересобрать фронтенд или очистить кэш
Как сделать деплой надежнее
- запускать workflow только для
main - добавить тесты перед деплоем
- использовать
npm ciвместоnpm installдля предсказуемой сборки - хранить логи деплоя
- делать релизы через Docker, если нужен более стабильный rollout 📦
GitHub Actions + VPS — это простой способ получить CI/CD без сложной инфраструктуры. Для небольших команд и независимых разработчиков такой деплой часто дает лучший баланс между скоростью, ценой и контролем ✅
Посмотрите подборку каналов про IT — там есть полезные материалы по DevOps, backend, автоматизации и production-практике.