Сколько раз у меня было так: поправила пару строк кода, залила на GitHub — и сижу, руками деплою. Сначала
git pull
В один момент я села и настроила себе нормальный CI/CD с GitHub Actions и Docker — чтобы пуш в репозиторий автоматически обновлял приложение на моём сервере. Ни панелей, ни Jenkins — только GitHub и VPS. Ниже расскажу, как я это сделала — простым языком, без модных фреймворков.
Почему вообще GitHub Actions?
Я пробовала GitLab CI, Travis, Circle — всё классно, но для большинства задач мне хватает GitHub. У меня почти все репы там, и если можно построить GitHub pipeline прямо внутри репозитория — зачем тянуть что-то ещё?
Плюсы GitHub CI/CD лично для меня:
- не надо настраивать отдельный CI-сервер;
- всё в одном месте — и код, и пайплайн;
- красиво, удобно, и работает по SSH;
- бесплатно, если не используешь большие runner’ы.
Что в итоге я хотела от CI/CD
У меня простое приложение на Node.js, которое крутится в Docker-контейнере на VPS от CloudVPS.by. Цель — чтобы при пуше в ветку
main
- Приложение пересобиралось;
- Заливался образ на сервер;
- Контейнер перезапускался.
Готовим VPS к приёму CI/CD
У меня обычный VPS на Ubuntu 22.04. Сначала установила Docker и Docker Compose:
apt update && apt install docker.io docker-compose -y systemctl enable docker
Создала пользователя
deploy
docker
usermod -aG docker deploy
Дальше — стандартно: подняла
docker-compose.yml
Добавляем GitHub Actions
Теперь переходим к GitHub CI/CD. Внутри репозитория создаю папку:
.github/workflows/deploy.yml
Вот мой минимальный
deploy.yml
name: Deploy to VPS on: push: branches: - main jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Deploy via 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/my-app git pull docker compose down docker compose up -d --build
Безопасность: как храню доступы
Все ключи и IP я добавляю через GitHub Secrets. Зачем палить данные в конфиге?
- — IP моего сервера;
VPS_HOST
- — имя пользователя (
VPS_USER
);deploy
- — приватный SSH-ключ.
VPS_KEY
Ключ генерирую через
ssh-keygen
Как это работает в реальности
- Пишу код → пуш в ;
main
- Через пару минут на сервере: ,
git pull
и всё работает;docker-compose up -d
- Если где-то косяк — вижу логи прямо на GitHub.
У меня сейчас так крутятся два pet-проекта и клиентский лендинг. Всё обновляется, даже когда я в пути, с телефона заливаю коммит — и CI/CD сам всё решает.
Пару советов от себя
- Используйте , чтобы Docker собирал свежие образы.
--build
- Разделите логику на staging и production — можно по разным веткам.
- Проверяйте, что в нет важных файлов — у меня так однажды ушёл
.dockerignore
..env
GitHub CI/CD с VPS и Docker — это не только для больших команд. Даже если вы работаете в одиночку, это экономит нервы и время. А если у вас есть VPS (у меня он на CloudVPS.by) — можно сделать себе удобную dev-to-prod-площадку без костылей.
👉 Попробуйте — настройка займёт вечер, а сэкономит десятки ценных бумаг.