Это практический гайд по настройке оркестрации CI/CD на VPS, размещённом в Беларуси. Поясню, зачем это нужно: ускорить релизы, снизить количество ручных ошибок и держать сервисы доступными для клиентов в Минске, Гомеле и других городах. Материал ориентирован на кафе, небольшие интернет‑магазины, салоны и сервисы с командой до 10 человек.
Выбор стека и быстрая сборка образов — пример для интернет‑магазина в Гомеле
Сценарий: два разработчика, магазин на Node.js, хочется переходить в прод автоматически после тестов. Решение: использовать GitLab CI или GitHub Actions для сборки Docker‑образов, хранить образы в приватном реестре на VPS и запускать в лёгком Kubernetes‑кластере k3s.
Как сделать:
- Создайте репозиторий с Dockerfile и простым .gitlab-ci.yml: стадии test → build → push → deploy.
- Собирайте образ с тегом по SHA коммита и пушьте в приватный реестр на VPS.
- Разверните k3s на 1–3 VPS для теста; используйте k3s на белорусском VPS как стартовую инструкцию.
- В деплое используйте манифесты Kubernetes или Helm‑чарты, указывая imagePullPolicy: IfNotPresent и тег по SHA.
- Добавьте простые unit‑тесты в pipeline, чтобы пайплайн прерывался при падении тестов.
Zero‑downtime деплой — пример для сайта кафе в Минске
Сценарий: сайт кафе получает пик трафика в обед, простой недопустим. Стратегия: blue‑green или канареечный выпуск с контролем готовности приложения.
Как сделать:
- Настройте readinessProbe и livenessProbe в Pod‑манифестах, чтобы контролировать готовность контейнера.
- Используйте балансировщик (NGINX/HAProxy) с двумя наборами бэкэндов для blue/green. Подробные подходы описаны в тексте про Zero‑downtime деплой.
- Выполняйте миграции базы отдельно: сначала добавьте обратную совместимую логику, затем переключайте трафик.
- Мониторьте ошибки при выпуске и откатывайте с помощью автоматического скрипта на основе статуса readiness.
Мониторинг и оповещения — пример для салона красоты в Барановичах
Сценарий: владелец заметил, что иногда записи не проходят из‑за таймаутов сервера. Нужен базовый мониторинг сервисов, метрик и логов с оповещением.
Как сделать:
- Соберите метрики CPU, память, дисковое пространство и ошибки приложения. Для старта подойдёт связка Prometheus + Grafana или Zabbix; инструкция по установке и настройке доступна в материале по мониторингу и оповещениям на белорусском VPS.
- Настройте оповещения на критические пороги: высокое использование CPU, высокий процент 5xx, исчезновение Heartbeat от сервиса.
- Централизуйте логи через Loki или простую файловую агрегацию и настройте ротацию логов, чтобы диск не заполнялся.
- Проведите тест оповещений: симулируйте падение сервиса и проверьте доставку сообщения владельцу.
Безопасность и доступы в CI/CD — пример для маркетингового агентства в Бресте
Сценарий: подрядчики получают доступ к репозиторию и деплою. Нужно разграничение прав и секреты под контролем.
Как сделать:
- Используйте deploy‑ключи и сервисные аккаунты с минимальными правами. Не храните приватные ключи в репозитории.
- Храните секреты в защищённом хранилище (Vault или Sealed Secrets для Kubernetes) и выдавайте доступ по роли.
- Ограничьте доступ к реестру образов и логам, ведите журнал входов для аудита.
- Планируйте ротацию ключей ежеквартально и удаляйте устаревшие токены.
Типичные ошибки
- Развертывание на прод прямо из ветки разработки без staging‑среды.
- Отсутствие readiness/liveness‑проверок, что приводит к некорректной балансировке.
- Хранение секретов в открытом виде в репозитории.
- Игнорирование логов и алертов до тех пор, пока клиенты не пожалуются.
- Миграции базы без резервного плана отката.
Три шага, которые можно сделать на неделе: 1) подготовить репозиторий с Dockerfile и простым CI‑конфигом для сборки образа; 2) поднять один тестовый k3s‑нод и выполнить пробный деплой; 3) настроить один простой алерт на доступность приложения и проверку дискового пространства.
Полезные ссылки: инструкция по развёртыванию k3s на белорусском VPS, материал про Zero‑downtime деплой и гайд по мониторингу и оповещениям на белорусском VPS.