Самостоятельно размещённые runner GitHub Actions в ЕС
Те же workflow, на машине в Праге или Ковильяне, которая ваша на месяц, а не на минуту - с ещё тёплым кешем сборки и одним адресом, который файрвол действительно может разрешить.
Для кого это
Команда, следящая за счётчиком минут
Минута Linux на 2 ядрах стоит 0,006 USD, а на 16 ядрах - 0,042 USD, поэтому матричная сборка, которая сделала набор тестов быстрым, - это то же самое, что сделало счёт интересным.
Workflow, которому нужно дотянуться до чего-то приватного
Шаг развёртывания должен говорить с базой данных, реестром или устройством, которое принимает только известные адреса, а размещённые runner GitHub приходят из диапазона, слишком большого, чтобы его разрешить.
Сборка, которой нужно больше, чем несёт образ
Лицензированный компилятор, эмулятор, 30 ГБ тестовых данных или просто больше диска, чем есть у размещённого runner - а переустанавливать это каждый раз и составляет большую часть конвейера.
Что меняется, когда runner ваш
- Рабочий каталог и кеши сохраняются между задачами, поэтому восстановление зависимостей перестаёт быть самым долгим шагом workflow.
- Статический IPv4 из AS204057, который ваша база данных, реестр или VPN могут разрешить по адресу.
- То, что вы установили, остаётся установленным - наборы инструментов, лицензированные SDK, эмуляторы, большие наборы тестовых данных, всё, чего нет в размещённом образе.
- Runner, зарегистрированные на уровне репозитория, организации или предприятия, с метками на ваш выбор и workflow, который выбирает их через runs-on.
- Диск и память на ваш выбор, а не фиксированная форма, в которой приходит размещённый runner.
- Машина в Праге или Ковильяне по кипрскому договору - это ответ о резидентности данных, а не настройка региона.
Размер по тому, что конвейер делает на самом деле
Одна служба runner - это одна задача за раз, поэтому параллельность здесь есть число процессов runner, а не ступень тарифа: несколько на одном хосте, каждая в собственном каталоге, - обычная форма. Подбирайте по самой тяжёлой задаче, а не по средней, и оставьте запас диска: рабочий каталог, кеш инструментов и слои контейнеров живут именно там, и именно это постоянство и есть причина размещать у себя. Честная половина сделки: фиксированный месячный хост стоит столько же в неделю без пушей, когда минуты у провайдера не стоят ничего. Оно окупается, как только конвейер работает почти каждый день.
Как установить runner GitHub Actions на новом хосте
Linux x64, в порядке, который документирует GitHub. Регистрационный токен генерируется для каждого runner и истекает через час после открытия страницы, поэтому берите его последним.
-
Создайте для него непривилегированного пользователя
sudo adduser --disabled-password --gecos "" runner sudo -iu runnerRunner выполняет то, что говорит ему workflow, поэтому он не должен быть root и не должен делить домашний каталог ни с чем другим. Всё ниже выполняется от этого пользователя.
-
Скачайте и распакуйте runner
mkdir actions-runner && cd actions-runner curl -O -L https://github.com/actions/runner/releases/download/v2.336.0/actions-runner-linux-x64-2.336.0.tar.gz echo "04cf0be1aff4c3ec3554466c39124ca250e3effd8873bb7e8d68535aa9505d5d actions-runner-linux-x64-2.336.0.tar.gz" | shasum -a 256 -c tar xzf ./actions-runner-linux-x64-2.336.0.tar.gzЭта версия и эта контрольная сумма - те, что опубликованы с выпуском v2.336.0. Проверьте, нет ли более новой, на странице выпусков, прежде чем это копировать: дальше runner обновляет себя сам, но первую загрузку проверяете вы.
-
Настройте его на репозиторий или организацию
./config.sh --url https://github.com/YOUR-ORG/YOUR-REPO --token AXXXXXXXXXXXXXXXXXXXXXXXXX --labels self-hosted,linux,x64,euТокен возьмите в Settings, затем Actions, затем Runners, затем New self-hosted runner - он ограничен по времени и истекает через час после выдачи. Направьте URL на организацию вместо репозитория, чтобы делить один runner между репозиториями.
-
Запустите как службу
sudo ./svc.sh install runner sudo ./svc.sh start sudo ./svc.sh statussvc.sh принимает пользователя, от которого должна работать служба, - именно поэтому пользователь runner создан первым. Возьмите вместо этого ./run.sh, если хотите лишь увидеть, как приходит одна задача, прежде чем решаться на службу.
-
Не дайте needrestart убивать задачи посреди работы
echo '$nrconf{override_rc}{qr(^actions\.runner\..+\.service$)} = 0;' | sudo tee /etc/needrestart/conf.d/actions_runner_services.confВ Debian и Ubuntu needrestart перезапускает службы, чьи библиотеки обновлены, - в том числе runner посреди задачи. GitHub документирует именно этот файл как способ его исключить.
-
Направьте на него workflow
name: smoke on: [push] jobs: build: runs-on: [self-hosted, linux, x64, eu] steps: - uses: actions/checkout@v6 - run: cat /etc/os-releaseruns-on совпадает с каждой меткой в списке, поэтому задача, просящая четыре метки, попадает только на runner, несущий все четыре. Если она остаётся в очереди, не хватает одной метки - а задача, ждущая более 24 часов, завершается неудачей.
Сверено с официальной документацией 2026-08-15 - читать первоисточник
Чем мы не являемся
- Мы не GitHub. GitHub, GitHub Actions и runner принадлежат им, и ничто на этой странице ими не одобрено. Мы продаём машину, на которой работает runner.
- Это не заменяет ваш тариф GitHub. Самостоятельно размещённые runner не стоят минут Actions, в этом и смысл, но лицензии, хранилище и всё остальное остаются в их счёте.
- Мы не обслуживаем runner, если вы об этом не попросите. Вы устанавливаете его сами или добавляете нашу услугу администрирования, и мы держим его обновлённым, зарегистрированным и под наблюдением.
- Самостоятельно размещённые runner задокументированы как плохо подходящие для публичных репозиториев: форк может предложить изменение файла workflow, и этот изменённый workflow выполнился бы на вашей машине. Держите их на приватных репозиториях, если вы это как следует не обдумали.
- Здесь нет плоскости управления с автомасштабированием. Если вы хотите runner, создаваемые и уничтожаемые на каждую задачу, это Actions Runner Controller на кластере Kubernetes - который мы с удовольствием разместим, на другой странице.
Части, которые команды обнаруживают поздно
- Одна служба runner выполняет одну задачу за раз. Параллельность возникает из установки нескольких, каждой в собственном каталоге и со своей службой, а не из настройки.
- Регистрационный токен истекает через час после выдачи, поэтому генерируйте его тогда, когда вы готовы запустить config.sh, а не в начале дня.
- Метки - это весь механизм маршрутизации. runs-on совпадает с каждой меткой в списке, поэтому опечатка не даёт ошибки: задача просто ждёт и завершается неудачей через 24 часа в очереди.
- Runner требует наличия lttng-ust, OpenSSL, Kerberos, zlib и libicu. Debian и Ubuntu их несут; минимальный образ контейнера часто нет.
- x64 и ARM64 поддерживаются на Linux, а ARM32 - только на Linux. Debian 10 и новее и Ubuntu 20.04 и новее - задокументированные базовые версии.
- Всё, что workflow оставляет после себя, остаётся на диске - в этом и преимущество, и именно поэтому самостоятельно размещённому runner нужны плановая уборка и снимок.
Минуты CI у провайдера против собственного runner
| Минуты CI на стороне провайдера | Раннер на DCXV | |
|---|---|---|
| За что вы платите | За каждую минуту каждой задачи, пока существует проект | За фиксированный месячный хост, что бы конвейер ни делал в этом месяце |
| Сборка, которая замедляется | Стоит дороже каждый месяц, пока остаётся медленной | Не стоит ничего дополнительно - машина уже оплачена |
| Кеш слоёв Docker | Холодный на каждой задаче, если вы сами его не выгружаете и не загружаете | Тёплый на локальном NVMe, между задачами и между днями |
| Параллельность | Ступень тарифа, которую повышают | Число, которое вы задаёте в собственном файле конфигурации |
| Куда попадает checkout | На общий парк машин, часто в регионе, который невозможно зафиксировать | На одну машину в Праге или Ковильяне, по кипрскому договору |
| Исходящий адрес | Огромный общий диапазон, который ничем не разрешить | Один статический IPv4 из AS204057, ваш, чтобы его разрешать |
| Что может вместить машина | То, что случайно несёт образ runner | Любой набор инструментов, лицензию или набор тестовых данных, установленный один раз |
Как это запускается на вашем хосте
Скажите, что делает конвейер
Самая тяжёлая задача, которую вы выполняете сегодня, сколько их должно идти одновременно и собирает ли она образы контейнеров. Этого достаточно, чтобы подобрать хост без догадок.
Мы передаём машину
Прага или Ковильян, доступ root и статический IPv4, менее чем за десять минут. Принесите собственный образ, если runner уже внутри него.
Выполните пошаговую инструкцию с этой страницы
Это последовательность производителя, взятая из его текущей документации, а не из записи в блоге, и на чистом хосте она занимает несколько минут.
Сделайте снимок, а потом добавьте второй
Сделайте снимок, как только первый конвейер станет зелёным, чтобы следующая машина была восстановлением, а не сборкой с нуля. Пул растёт добавлением хостов, а не раздуванием одного.
Почему выбирают нас
- Сертифицированные объекты Tier III, SLA объекта 99,982 %
- Собственная сеть, AS204057, IPv4 и IPv6
- Поддержка 24/7/365 со средним временем ответа около 10 минут
- Компания на Кипре, юрисдикция ЕС, соответствие GDPR с 2007 года
FAQ
Частые вопросы
Сколько стоят размещённые runner GitHub по сравнению с собственными?
GitHub тарифицирует размещённые runner Linux поминутно: 0,006 USD за 2 ядра, 0,012 за 4, 0,022 за 8 и 0,042 за 16, Windows - 0,010 за 2 ядра, а macOS - 0,062 за машину с 3 или 4 ядрами. Самостоятельно размещённые runner не расходуют минут Actions. Хост у нас начинается от 16,49 EUR в месяц, что примерно равно стоимости 2700 минут на размещённом runner с 2 ядрами - значит, точка пересечения лежит около 45 часов сборок в месяц
Как настроить самостоятельно размещённый runner GitHub Actions?
Создайте непривилегированного пользователя, скачайте архив runner для linux-x64 из выпусков actions/runner и проверьте контрольную сумму, запустите ./config.sh с URL вашего репозитория или организации и регистрационным токеном из Settings, Actions, Runners, а затем установите его как службу командой sudo ./svc.sh install и запустите. Точные команды есть на этой странице. Регистрационный токен истекает через час после выдачи
Сколько задач один runner выполняет одновременно?
Одну. Служба runner берёт одну задачу за раз, поэтому параллельность означает установку нескольких служб runner на хосте, каждой в собственном каталоге. Именно поэтому подбор размера на этой странице считает службы runner, а не задачи, и именно поэтому машина с 8 vCPU с запасом тянет небольшую матричную сборку
Какие операционные системы и архитектуры поддерживаются?
На Linux - Debian 10 и новее, Ubuntu 20.04 и новее, RHEL 8 и новее, CentOS 8 и новее, Fedora 29 и новее, openSUSE 15.2 и новее и их родственники, на x64, ARM64 и ARM32. Runner также требует lttng-ust, OpenSSL, Kerberos, zlib и libicu, которые Debian и Ubuntu несут штатно
Безопасно ли использовать самостоятельно размещённый runner в публичном репозитории?
GitHub этого не советует, и причина конкретна: любой может открыть pull request, меняющий файл workflow, и этот изменённый workflow выполнился бы на вашей машине. Держите самостоятельно размещённые runner на приватных репозиториях, если вы это внимательно не прочитали и не настроили настоящую изоляцию. К тому же всё, что задача оставляет после себя, сохраняется на диске - преимущество для кеша и риск для секретов
Может ли один runner обслуживать несколько репозиториев?
Да. Зарегистрируйте его на уровне организации, а не репозитория, и любой репозиторий организации сможет его выбрать, маршрутизируя работу метками в runs-on. Задача, просящая метку, которой нет ни у одного runner, просто ждёт и завершается неудачей через 24 часа в очереди - именно так выглядит опечатка в runs-on
Если вам нужна помощь или у вас возникли дополнительные вопросы, пожалуйста, обращайтесь к менеджерам или напишите в службу поддержки по адресу support@dcxv.com
Готовы начать?
- Оплата ежемесячно
- Без платы за подключение
- Без привязки