ЧАСТНАЯ ИНФРАСТРУКТУРА / БЕЗ IDПрочитать доктрину приватности
Заметки о поле KoalaVPS

Сделайте агента сервисом, а не забытым терминалом.

Запускайте долгоживущие рабочие процессы с явным состоянием, ограниченными правами и планом восстановления.

Упакуйте воркер

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

Сохраняйте прогресс, прежде чем действия станут важны

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

Добавьте полезную наблюдаемость

Отслеживайте завершение задач, возраст очереди, частоту ошибок и стоимость, а не только наличие процесса. Держите журналы достаточно малыми для проверки и скрывайте токены, запросы и документы, которые не нужно хранить.

Установите чёткий предел

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

Используйте супервизор и продуманное расписание

Systemd и Docker — распространённые способы сохранить процесс при отключении терминала. Для службы systemd параметр Type=exec может сообщать о сбое выполнения более прямо, чем простой фоновый запуск, а Restart=on-failure может перезапускать сбои по ограниченной политике. Запланированные задачи не должны выполняться с перекрытием. Явно задавайте рабочий каталог, пользователя службы и окружение. Пример предполагает, что пользователь koala-agent, виртуальное окружение, модуль воркера и файл приватного окружения уже существуют; адаптируйте их перед установкой юнита.

  • Используйте выделенную учётную запись службы
  • Задайте задержку перезапуска и предел сбоев
  • Проверьте состояние предыдущего задания перед запуском запланированного выполнения
[Unit]
Description=Example agent worker
After=network-online.target

[Service]
Type=exec
User=koala-agent
WorkingDirectory=/opt/koala-agent
EnvironmentFile=/etc/koala-agent.env
ExecStart=/opt/koala-agent/.venv/bin/python -m worker
Restart=on-failure
RestartSec=10
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Задайте дневной бюджет и границу дублирования

Задайте воркеру максимальное число запросов, лимит расходов и тайм-аут выполнения. Используйте надёжную запись идемпотентности для действий, влияющих на внешний мир. Успешный клик в браузере может произойти до того, как процесс получит ответ; проверьте внешнее состояние, прежде чем повторять попытку. Монтирование секретов в Docker Compose позволяет не включать секрет в образ, но права доступа и потребляющее приложение всё равно требуют проверки.

Задайте периодической задаче явную политику догоняющего выполнения

Используйте долго работающий сервис для постоянного обработчика очереди и сервис oneshot, запускаемый таймером, для ограниченной запланированной задачи. С календарным таймером systemd параметр Persistent=true может запустить одну пропущенную активацию после простоя; он не воссоздаёт весь накопившийся бизнес-объём. Решите, желательно ли такое догоняющее выполнение. RandomizedDelaySec может распределять запуски, а аренда на уровне приложения не позволяет двум репликам обрабатывать одну и ту же запланированную работу.

  • Запишите предполагаемый часовой пояс и проверьте время следующих запусков перед включением расписания.
  • Держите срок выполнения задачи короче интервала, который не должен пересекаться, или используйте надёжную аренду с истечением срока и владением.
  • Пусть задание выбирает невыполненную работу из сохранённого состояния, а не предполагает, что каждое предыдущее событие таймера сработало.
  • Проверьте установленную версию systemd, прежде чем использовать директиву из последнего руководства.
# Read-only checks after creating your own matching units.
systemctl list-timers --all
systemctl status koala-agent.service
journalctl -u koala-agent.service --since today --no-pager

Отличите цикл сбоев от зависшего воркера

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

  • Задайте бюджет провайдера и тайм-аут запроса в приложении, а также границу CPU/памяти на уровне среды выполнения.
  • Контейнеры Docker не получают полезного ограничения памяти под конкретную нагрузку только потому, что они контейнеры; настраивайте и тестируйте ограничения осознанно.
  • Храните секрет вне образа и публичного дерева, затем проверьте, что журналы сбоев и диагностика его скрывают.
  • Сохраняйте ручной маршрут остановки и требуйте надлежащей проверки для расходов, производственных записей или внешних сообщений.
НАСТРОЙТЕ СВОЮ ИНФРАСТРУКТУРУ

Возьмите контроль.
Развёртывайте на своих условиях.

Без документов об идентификации. Полный доступ администратора. Оплата в криптовалюте.