Талисман NordBastion — белый медведь — сидит на каменной скамье в сводчатом северном зале ночью рядом с закрытым ноутбуком и смотрит на серверную стойку под голубыми голографическими фигурами в виде петель и часов
Инструкция · 25 мин практики·Обновлено в 2026 году

Запустите ИИ-агента в режиме 24/7 на VPS.
Не с ноутбука — на железе, которое не спит.

Чтобы запускать ИИ-агента в режиме 24/7 на VPS, нужны четыре вещи, и ни одна из них не хитрая: сервер, который не выключается, супервизор, который его перезапускает, секреты, которые никогда не попадают в образ, и лимит расходов — плюс хостинг, который не требует вашей личности.

Коротко
  • 01

    Большинство агентов — это упирающаяся в I/O обвязка вокруг размещённого API модели. Инференс выполняется не на вашем сервере, поэтому сервер небольшой: 2 vCPU и 4 GB тянут агента с одним циклом.

  • 02

    Аптайм — это задача супервизора, а не оборудования. Юнит systemd или политика перезапуска Docker — включённая и проверенная настоящей перезагрузкой — вот и всё, что нужно.

  • 03

    По-настоящему больно кусают только две вещи: секрет, запечённый в слой образа, и агент без потолка расходов, всю ночь бьющийся в тарифицируемый API.

Глава 1

Почему ноутбук — это не деплой. Четыре сценария отказа, и все они скучные.

Агент, который работает на вашей машине, — это работающий агент, но не развёрнутый. Разрыв между этими понятиями — четыре неброские проблемы, ни одна из которых не связана с prompt engineering.

Сон. Закрываете крышку — процесс приостанавливается. Управление питанием урезает фоновую работу задолго до закрытия крышки, что даёт худший вариант этого сбоя: агент, который всё же работает, но с опозданием и непредсказуемо.

Смена IP. Домашнее или кафешное подключение выдаёт новый адрес при каждом переподключении. Всё, что ограничено по IP, любой webhook, которому нужен стабильный callback, любой allowlist, в который вас внесли, время от времени ломается.

Перезагрузки. Обновления операционной системы перезагружают машину по собственному расписанию. Если агент не зарегистрирован в менеджере служб, после перезагрузки вы получаете рабочий стол, а не работающий цикл. Большинство замечает это лишь неделю спустя.

Переезд. Вы путешествуете, меняете машины, переустанавливаете систему. Всё, что живёт только в истории вашей shell, невоспроизводимо — у агента, настроенного за один вечер в марте, вообще нет процедуры развёртывания.

Сервер решает именно эти четыре проблемы — и больше ничего: ни корректность, ни стоимость, ни безопасность. Он даёт вам среду выполнения, чьи сбои вам придётся устранять самим. Отнеситесь с подозрением к любому, кто продаёт его как нечто большее.

Глава 2

Подбор конфигурации сервера. Какой тариф VPS — под какую форму агента.

Инстинкт подсказывает брать с избытком, потому что «искусственный интеллект» звучит тяжеловесно. На деле это не так, пока модель работает на чужом оборудовании: агент, вызывающий размещённый API, проводит время в ожидании сетевого I/O. Третий вариант — запуск модели самостоятельно — здесь не рассматривается: такой нагрузке нужен GPU, а не виртуальная машина.

Форма первая — одиночный цикл. Один процесс, цикл опроса или расписания, размещённый API модели, состояние в SQLite. Так устроено большинство независимых агентов и ботов-наблюдателей, и это действительно немного.

Форма вторая — небольшой стек. Агент плюс Postgres, очередь на Redis, воркер и векторное хранилище. Теперь узкое место — память: модель эмбеддингов, загруженная в процесс, требует гигабайт-другой только для себя.

Сверяясь с каталогом: Sentinel (NB-V1 — 2 vCPU, 4 GB RAM, 120 GB NVMe, 1 Gbps, безлимитный трафик, $3.90/month) покрывает первую форму с запасом. Garrison (NB-V2 — 4 vCPU, 8 GB, 240 GB, $7.90/month) — честный минимум для второй формы, как только в дело вступают Postgres и очередь. Ravelin (NB-V3 — 8 vCPU, 16 GB, 480 GB, 2.5 Gbps, $16.90/month) — для нескольких агентов на одном сервере. Локальному инференсу место на выделенном железе.

Тарификация помесячная, со скидкой за более долгие обязательства — 10% при оплате на три месяца, 20% на шесть, 30% на двенадцать. Если ваш агент — это Windows-only торговый клиент, а не Python-процесс, для такого случая есть тарифы удалённого рабочего стола.

Глава 3

Путь развёртывания — запустить ИИ-агента на VPS примерно за пятнадцать минут.

Разверните сервер на Ubuntu 24.04 LTS или Debian 13 — оба варианта предлагаются при заказе, наряду с Ubuntu 22.04, Debian 12, AlmaLinux 9 и Rocky Linux 9. Вы получаете root-доступ; первое, что стоит с ним сделать, — перестать им пользоваться. Если аутентификация по SSH-ключу — незнакомая территория, сначала прочитайте руководство по усилению защиты, ссылка на которое есть ниже.

1 — Создайте служебного пользователя. adduser --system --group --home /srv/agent agent. Агент не должен работать от root и не должен иметь интерактивный shell. Одна команда сейчас — и радиус поражения останется небольшим, если позже один из вызываемых им инструментов обратят против него.

2 — Доставьте код на сервер. git clone в /srv/agent, или rsync, если не хочется оставлять на сервере deploy-ключ. Зафиксируйте версии зависимостей: lockfile — это разница между повторным деплоем, который воспроизводится, и тем, который вас удивляет.

3 — Соберите окружение. python3 -m venv /srv/agent/.venv, затем установите зависимости из lockfile через pip этого virtualenv. Либо установите uv и позвольте ему управлять и интерпретатором, и lockfile. Годится любой вариант; смешивать оба — нет.

4 — Запустите один раз вручную. sudo -u agent /srv/agent/.venv/bin/python -m agent --once. Не пропускайте этот шаг, чтобы сразу перейти к юниту службы. Девять сбоев из десяти здесь — это отсутствующая переменная окружения или путь, завязанный на ваш ноутбук, а оба они гораздо понятнее читаются в терминале, чем в journald.

5 — Передайте супервизору. Об этом — следующая глава. Именно это превращает скрипт, который вы запустили, в службу, которой владеет сама машина. Если вся последовательность заняла заметно больше пятнадцати минут, причина почти всегда — неявная зависимость от вашей машины разработки: глобальный бинарник, учётные данные в профиле shell, путь вне репозитория.

Глава 4

Поддержание работы 24/7. systemd, Docker и ловушка crash-loop.

Процесс, запущенный вами в SSH-сессии, умирает вместе с её завершением и не возвращается после перезагрузки. Супервизия — не опция, и у вас есть два разумных варианта.

systemd — для одного процесса. Юнит в /etc/systemd/system/agent.service с User=agent, WorkingDirectory=/srv/agent, ExecStart, указывающим на интерпретатор virtualenv, Restart=always и RestartSec=5. Затем systemctl daemon-reload, затем systemctl enable --now agent. Именно enable переживает перезагрузку; запуск без enable — самый частый способ потерять агента три недели спустя.

Docker — для набора сервисов. Когда у агента есть соседи — база данных, очередь, headless-браузер — опишите их в одном файле Compose с restart: unless-stopped на каждом сервисе. unless-stopped отличается от always в одном существенном моменте: контейнер, который вы намеренно остановили, остаётся остановленным после перезапуска демона.

Ловушка crash-loop. По умолчанию systemd ограничивает частоту перезапусков. Упадите достаточно часто в пределах интервала — и юнит перейдёт в состояние failed и перестанет пытаться: агент как будто тихо умер, хотя файл юнита прямо говорит Restart=always. Задайте StartLimitIntervalSec=0, чтобы перезапускать бесконечно, и увеличьте RestartSec, чтобы сломанный агент не крутил ядро всю ночь.

Живой — не значит здоровый. Цикл, зависший на чтении сокета девять часов подряд, для systemd по всем признакам остаётся работающим процессом. Выведите наружу heartbeat: watchdog с WatchdogSec, Docker HEALTHCHECK, либо файл с меткой времени, который агент обновляет на каждом цикле, и таймер, оповещающий, когда метка устаревает.

Глава 5

Секреты. Файл окружения, который никогда не должен попасть в образ.

Агент держит в руках более опасные вещи, чем веб-приложение. Ключ API модели — это платёжный инструмент; торговый ключ — инструмент с плечом; ключ кошелька — это сами средства. И в отличие от веб-приложения, агент действует на основе текста, который написал не он сам, из-за чего граница между «ключ у агента» и «ключ у злоумышленника» становится тонкой.

Не пускайте их в образ. Значения ENV и ARG в Dockerfile записываются в слои образа и читаются командой docker history любым, кто получит образ. Используйте env_file: в Compose или EnvironmentFile= в юните systemd и держите файл вне контекста сборки.

Не пускайте их в репозиторий. .gitignore и .dockerignore — в первом коммите, а не в пятидесятом. Ключ, который хоть раз попал в коммит, скомпрометирован даже после переписывания истории, потому что объект переживает в клонах и форках. Замените ключ, а не переписывайте историю.

Ограничьте доступ к файлу. Сделайте владельцем файла окружения служебного пользователя и выставьте права 600. В сочетании с непривилегированным служебным пользователем скомпрометированная зависимость где-то ещё на сервере не сможет просто прочитать ваши ключи с диска.

Ограничивайте права каждого ключа у эмитента. Один ключ на агента, с самыми узкими правами, какие предлагает провайдер — read-only там, где достаточно чтения, вывод средств отключён на биржевых ключах, привязка по IP-allowlist к серверу. Стабильный IP — незаметное преимущество переезда с ноутбука: allowlisting наконец-то становится возможным. Если одни и те же учётные данные нужны нескольким людям, спрячьте их за self-hosted хранилищем из сопутствующего руководства.

Глава 6

Планирование. Циклы, таймеры и часовой пояс, который вас подставит.

За словами «работает непрерывно» скрываются три разные архитектуры, и выбор не той — частая причина задвоенной работы и пропущенных запусков.

Резидентный цикл. Один долгоживущий процесс, который засыпает между циклами. Проще всего рассуждать о нём, и это правильный вариант по умолчанию. Его слабость — состояние: всё, что в памяти, теряется при перезапуске, поэтому всё, что должно пережить сбой, должно жить в SQLite или Postgres, а не в переменной.

Запуск по расписанию. Процесс, который стартует, выполняет одну единицу работы и завершается. Таймер systemd с OnCalendar здесь инструмент получше — в основном из-за Persistent=true: после простоя такой таймер выполнит пропущенный запуск, тогда как cron его просто пропустит.

Очередь. Producer ставит задачи в очередь, воркеры их разбирают. Это то, что нужно в тот момент, когда задачи приходят быстрее, чем успевают завершаться. Заодно вы получаете повторные попытки, обработку dead-letter и потолок параллелизма.

Два правила при любом выборе. Делайте каждую задачу идемпотентной — супервизор, перезапускающий процесс после сбоя, будет повторять задачи, а повторённая задача не должна дважды опубликовать пост или дважды оформить заказ. И держите часы сервера в UTC, конвертируя время только на границах системы: расписание, которое дважды в год сдвигается на час, — утомительный баг для поиска.

Глава 7

Инструменты для агента. Сервер инструментов на том же сервере.

Агент без инструментов — это просто чат-цикл. Именно инструменты позволяют ему читать репозиторий, делать запросы к базе данных, оформлять заказ или заводить issue — и раз агент живёт на сервере, инструментам там место тоже.

Model Context Protocol стал общепринятым способом предоставлять такие инструменты, и приватно запущенный сервер легко разместить рядом с агентом: тот же сервер, тот же приватный интерфейс, без необходимости в публичном доступе. Сопутствующие руководства разбирают это подробно — размещение удалённого MCP-сервера проходит через TLS, streamable-HTTP транспорт, OAuth и agent card, а взгляд на хостинг без ID рассматривает тот же стек со стороны идентичности.

Сначала привяжите его к localhost. Если единственный потребитель — это агент на той же машине, у сервера инструментов нет причин занимать публичный порт. Привяжитесь к loopback-адресу и обойдитесь без сертификата. Открывайте наружу только тогда, когда доступ нужен второй машине, — и тогда нужны и TLS, и аутентификация, а не что-то одно.

Давайте инструментам минимум прав, при котором всё ещё работает. Агент решает, какой инструмент вызвать, на основе текста, а часть этого текста приходит извне. Prompt injection — не гипотетическая угроза для агента, читающего веб-страницы или почтовые ящики: это ожидаемый сценарий. Инструмент, который умеет только читать, невозможно уговорить писать. Там, где инструмент обязан писать, сделайте так, чтобы разрушительные действия требовали подтверждения человеком.

Если вы создаёте инструменты для чужих агентов, а не для своего собственного, machine API и интерфейс для агентов описывают, как эта платформа напрямую открывает провижининг агенту.

Глава 8

Наблюдаемость и стоимость. Что логировать и аварийный выключатель для агента, вышедшего из-под контроля.

В реальных развёртываниях агентов преобладают два сценария отказа, и ни один из них — не падение. Первый — агент, который прекрасно работает и не производит ничего полезного. Второй — агент, который прекрасно работает и за одну ночь выставляет счёт за API на четыре цифры.

Логируйте форму, а не содержимое. Временная метка, id задачи, число шагов, названия вызванных инструментов, суммарное число токенов, длительность, результат. Этого достаточно, чтобы ответить на любой практический эксплуатационный вопрос. Полные промпты и ответы модели — это стенограмма всего, что агенту когда-либо поручали, в открытом виде, на диске в чужом здании.

Ограничьте срок хранения. journald продолжает расти, пока вы не скажете ему остановиться. SystemMaxUse и MaxRetentionSec в journald.conf задают потолок и по размеру, и по возрасту. Иначе болтливый агент заполнит диск за недели, а переполненный диск отказывает куда менее понятными способами, чем чистое падение.

Три уровня контроля расходов. На стороне провайдера — жёсткий лимит на ключ API: единственное ограничение, которое не обойти никакой ошибкой в коде, и именно его чаще всего пропускают. В самом агенте — счётчик токенов за прогон с порогом прерывания. Вокруг агента — максимальное число шагов и таймаут по времени, чтобы модель, спорящая сама с собой, останавливалась после двадцати итераций, а не после четырёх тысяч.

Постройте аварийный выключатель до того, как он понадобится. Одна команда, которая всё останавливает: systemctl stop agent или docker compose down. Убедитесь, что для неё не нужен именно ваш ноутбук с конкретным ключом на нём. Разница между плохой ночью и плохим месяцем — в том, займёт ли остановка вышедшего из-под контроля агента десять секунд или час.

Глава 9

Минимум по идентичности. Что знает хостинг — и от чего он не может вас защитить.

Агент — это долгоживущий процесс с учётными данными, непрерывно действующий от вашего имени с постоянного адреса. Из-за этого запись об аренде становится куда интереснее, чем для статичного сайта: она отражает действия, которые можно приписать вам, каждый час, месяцами.

Минимум здесь — это email и пароль для регистрации, оплата в восьми активах — Bitcoin, Ethereum, Tether в двух сетях, Monero, Litecoin, TRON и Solana — и ни одного документа, удостоверяющего личность, ни на одном этапе. Дата-центры расположены в четырёх североевропейских юрисдикциях: Stockholm, Helsinki, Oslo и Reykjavík. Операционная доктрина описывает, что сохраняется; страница о сети — маршрутизацию.

Теперь о пределе — а это важнее самого предложения. Хостинг, который не спрашивает документов, убирает запись об аренде. Он никак не касается уровня инференса: ваш агент аутентифицируется у провайдера модели по ключу, привязанному к аккаунту, с постоянного IP, при каждом обращении. Если этот аккаунт оформлен на ваше настоящее имя — а для большинства людей это так, — личность устанавливается именно там, независимо от того, у кого арендовано железо. Уровень хостинга убирает одно звено: настоящее, и только одно.

Дальше — вещи не самые эффектные. Разделяйте по отсекам: один агент, один сервер, один ключ, один кошелёк. Укрепляйте защиту сервера в первый день, а не на тридцатый — чек-лист первого часа — это час, потраченный не зря на машине, которая месяцами работает без присмотра. Если агенту нужен доступ к приватной сети, заводите туннель прямо на сервере, а не открывайте сервисы наружу — руководство по туннелю разбирает настройку. И платите криптовалютой с кошелька, который не тот, с которого торгует ваш агент.

Ничего из этого не экзотика, и ничего из этого — не гарантия. Это обычная дисциплина эксплуатации того, что действует от вашего имени, пока вы спите, — а именно это и означает непрерывная работа. Остальные руководства кластера — на странице со всеми руководствами.

FAQ · Агенты на VPS

Вопросы, и ответы на них.

Семь вопросов, которые разработчики задают перед переносом агента с localhost — и в первый месяц после этого.

Какой VPS нужен, чтобы запускать ИИ-агента в режиме 24/7?

Меньше, чем кажется, потому что инференс выполняется на оборудовании провайдера, а не на вашем. Агент, который обращается к размещённому API модели и работает в режиме поллинга, — это процесс, упирающийся в I/O: тариф Sentinel (2 vCPU, 4 GB RAM, 120 GB NVMe, $3.90/month) подходит с запасом. Переходите на Garrison (4 vCPU, 8 GB, $7.90/month), как только добавите Postgres, очередь и локальную модель эмбеддингов.

Что использовать для поддержания работы агента — systemd или Docker?

Подойдёт и то, и другое — различаются только сценарии отказа. Юнит systemd с Restart=always — самый короткий путь для одного процесса: заодно бесплатно получаете journald, лимиты ресурсов и порядок загрузки. Docker с restart: unless-stopped лучше подходит, когда у агента есть соседние сервисы, потому что Compose описывает весь набор в одном файле. Куда важнее другое — действительно включить автозапуск и проверить его на реальной перезагрузке, прежде чем оставить систему без присмотра.

Почему агент перестаёт перезапускаться после нескольких падений?

Потому что systemd ограничивает частоту перезапусков. StartLimitBurst и StartLimitIntervalSec допускают небольшое число перезапусков в коротком окне; превысьте их — и юнит переходит в состояние failed и остаётся в нём, что выглядит как тихая смерть процесса. Либо устраните первопричину падения — это правильный ответ, — либо задайте StartLimitIntervalSec=0, чтобы отключить ограничитель, и RestartSec=10, чтобы зациклившийся в падениях агент не сжигал ядро на бесконечных попытках.

Куда помещать ключи API?

В файл, который образ контейнера никогда не увидит. Держите файл окружения вне контекста сборки — на него ссылаются через EnvironmentFile= в юните systemd или env_file: в Compose, владелец файла — служебный пользователь, права 600. Никогда не используйте ENV или ARG в Dockerfile для секрета: эти значения запекаются в слои образа и читаются командой docker history. Добавьте файл в .gitignore и .dockerignore ещё до первого коммита.

Как не дать агенту потратить весь бюджет на API за одну ночь?

Три уровня защиты, и нужны все три. На стороне провайдера — жёсткий лимит расходов на ключ API: единственное ограничение, которое не обойти никакой ошибкой в вашем коде. В самом агенте — счётчик токенов или вызовов за прогон с прерыванием при превышении порога. Вокруг агента — потолок числа шагов на задачу и таймаут по времени. Ни один хостинг не сделает это за вас — VPS — это арендованные мощности, а не страж бюджета для чужого API.

Что никогда нельзя писать в логи агента?

Полные промпты и ответы модели, необработанные аргументы инструментов, ключи API, материалы кошельков и всё, что ввёл пользователь. Вместо этого логируйте форму прогона: временную метку, id задачи, число шагов, названия инструментов, суммарное число токенов, длительность, результат. Подробный лог агента — это стенограмма всего, что агенту когда-либо поручали, в открытом виде, на диске, который физически не под вашим контролем.

Делает ли хостинг без KYC моего агента анонимным?

Нет, и здесь важна точность формулировки. Регистрация без документов и оплата криптовалютой означают, что у хостинга нет юридической личности, которую можно привязать к серверу. Но это никак не касается провайдера модели: ваш агент аутентифицируется в этом API по ключу, привязанному к аккаунту, с постоянного IP-адреса сервера, при каждом обращении. Уровень хостинга убирает одно звено цепочки — запись об аренде — и только его.

Получите железо

Арендуйте VPS без KYC, платите криптовалютой, перенесите агента с ноутбука уже сегодня вечером.

Sentinel — 2 vCPU, 4 GB RAM, 120 GB NVMe, безлимитный трафик, $3.90/month — тянет агента с одним циклом, да ещё и с запасом для сервера инструментов рядом. Email и пароль для регистрации; ни одного документа ни на одном этапе.

Последняя проверка · 2026-08-24 · Источники · страницы руководства systemd.service, systemd.timer и journald.conf, документация Docker по restart-policy и Compose, спецификация Model Context Protocol, каталог NordBastion · Периодичность · ежегодно