VPS для разработки и CI/CD: что важно
Свой сервер для сборок и тестов окупается, как только бесплатных минут в GitHub Actions или GitLab CI перестаёт хватать. Собственный раннер не ограничен по времени, на нём остаются кэши зависимостей и Docker-образов, а значит повторные сборки идут в разы быстрее. Тот же VPS удобно использовать как удалённое рабочее окружение или тестовый стенд.
Ядра и память: сборке нужно много и ненадолго
Компиляция, сборка фронтенда и прогон тестов распараллеливаются по ядрам, поэтому для раннера число ядер важнее, чем для веб-сервера. Ориентиры:
- 2 ядра и 4 ГБ — небольшие проекты на Node.js, Python или PHP, линтеры и юнит-тесты;
- 4 ядра и 8 ГБ — сборка Docker-образов, фронтенд на Webpack или Vite, интеграционные тесты с базой;
- 8 ядер и 16 ГБ — компиляция Go, Rust, Java или C++, сборки Android, параллельные задачи.
Если сборок немного в день, сервер большую часть времени простаивает. Здесь выручает почасовая оплата: мощный сервер поднимается на время работы и удаляется, а платите вы только за часы. Многие хостеры позволяют делать это через API, так что раннер можно включать автоматически.
Диск: кэши занимают больше, чем кажется
Docker-образы, кэш npm, pip, Maven или Gradle, артефакты сборок быстро занимают десятки гигабайт. Берите NVMe от 50–80 ГБ и настройте очистку: docker system prune по расписанию и ограничение срока хранения артефактов. Скорость диска напрямую влияет на время установки зависимостей — на медленном диске она может занимать больше, чем сама сборка.
Как подключить раннер
- GitHub Actions — self-hosted runner ставится одной командой из настроек репозитория или организации и работает как служба.
- GitLab CI —
gitlab-runnerс исполнителем Docker: каждая задача идёт в чистом контейнере, а образы кэшируются на сервере. - Gitea, Forgejo, Woodpecker, Drone — лёгкие альтернативы, если вы держите и сам репозиторий на своём сервере; см. также VPS для GitLab.
Виртуализация и безопасность
Для Docker-сборок нужен KVM: на контейнерной виртуализации Docker часто не запускается или работает с ограничениями (подробнее на странице VPS для Docker). Не подключайте self-hosted раннер к публичным репозиториям: чужой pull request сможет выполнить любой код на вашем сервере. Секреты передавайте через переменные CI, а не храните на диске, и обновляйте раннер вместе с системой.
Где разместить
Сервер ближе к вашему Git-хостингу и реестру образов быстрее скачивает зависимости. Для GitHub и Docker Hub удобны серверы в Европе и США; из России доступ к некоторым реестрам бывает затруднён, поэтому заранее настройте зеркала или прокси-кэш.