Если вы всё ещё вручную заходите на сервер, делаете
git pull
В этой статье расскажу, как я настроила CI/CD с GitHub на VPS с Docker. Никаких сложных терминов, Jenkins и «а вот тут вам надо поднять раннер». Только GitHub CI/CD, ssh-доступ и немного YAML.
Почему GitHub Actions, а не что-то модное?
Ответ простой: потому что он уже есть. Я и так всё храню на GitHub, зачем тащить что-то ещё?
GitHub pipelines работают прямо в репозитории, не надо ставить отдельный сервер. Подключила — и оно всё само: коммит — билд — деплой. Ну почти.
Что особенно нравится:
- конфигурация рядом с кодом;
- можно деплоить хоть на VPS, хоть на любую машину с SSH;
- подходит для pet-проектов, фриланса, да и в команде работает.
Если коротко, CI/CD GitHub — это самый низкий порог входа в автоматизацию.
Что у меня было: минимальный стек, максимум боли
У меня — обычное Node.js-приложение в Docker. Сервер — VPS на CloudVPS.by, Ubuntu 22.04. Раньше деплой был такой: зайти по ssh → pull → пересобрать Docker → рестарт. И каждый раз — «ой, забыла env» или «а почему не обновилось».
Так продолжалось, пока я не настроила свой первый GitHub CI/CD pipeline.
Шаг 1. Готовим VPS к приёму кода
Устанавливаем Docker и docker-compose:
apt update && apt install docker.io docker-compose -y
Создаём пользователя
deploy
adduser deploy usermod -aG docker deploy su - deploy ssh-keygen -t ed25519
Публичный ключ добавляем в GitHub (в Secrets). Приватный оставляем на сервере.
Шаг 2. Пишем GitHub pipeline
В корне репозитория создаём
.github/workflows/deploy.yml
name: Deploy to VPS on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Deploy over SSH uses: appleboy/ssh-action@v0.1.6 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_KEY }} script: | cd /home/deploy/project git pull origin main docker compose down docker compose up -d --build
Никакой магии. Просто зашёл, обновил код, пересобрал, запустил.
Где брать переменные?
В настройках репозитория → Settings → Secrets → New repository secret.
Добавляю:
- — IP сервера,
VPS_HOST
- — имя пользователя (
VPS_USER
),deploy
- — приватный ключ (без пароля, с ограничениями).
VPS_KEY
Так безопасно и всё работает через
ssh
Шаг 3. Проверка
Заливаю коммит в
main
Особенности и советы
- Если не хотите, чтобы билд падал при ошибке, добавьте в ssh-команду.
set -e
- Делайте , чтобы пересобирался свежий образ.
docker compose up -d --build
- Разделите pipeline на и
build
, если проект сложнее.deploy
- Не бойтесь YAML — он проще, чем кажется, особенно если копировать рабочие примеры.
CI/CD GitHub: не только для больших команд
Когда говорят «CI/CD», сразу кажется — это что-то для enterprise или команды в 10 человек. Нет. Это для тех, кто устал делать одно и то же руками. Даже для своего блога на WordPress можно сделать GitHub CI/CD, чтобы деплой шел автоматически.
Если вы до сих пор деплоите руками — я вас не виню, я тоже так делала. Но когда один раз настроишь нормальный CI/CD pipeline на GitHub — назад уже не хочется. Оно просто работает.
А с VPS от CloudVPS.by всё разворачивается за вечер. Я настроила — и теперь даже с телефона могу пушнуть код, и всё обновится само.
👉 Настройте свой пайплайн CI/CD. Пусть сервер работает за вас, а не наоборот.