
Ноутбук засыпает, закрывается или теряет Wi-Fi в кафе - и вместе с ним обрывается любая задача для Claude Code длиннее пары минут. Переносим агента на постоянный VPS: установка без единой строки Node.js, вход в аккаунт с сервера, у которого нет браузера, tmux вместо надежды на стабильный Wi-Fi, и разговор о том, что реально означает дать программе с доступом к shell отдельный сервер.

Три docker run с разными флагами - это три места, где конфигурация может разъехаться при первом же ребуте. Один docker-compose.yml с reverse proxy и парой сервисов за ним решает это раз и навсегда: сервисы видят друг друга по имени, наружу торчит только один порт, у каждого контейнера свой потолок по памяти и CPU, а обновление - это pull и up -d, а не ритуал. Собираем стек из Caddy, Vaultwarden и Uptime Kuma и разбираем, где у него границы.

n8n.cloud считает активные workflow и запуски и не достаёт до сервисов в вашей частной сети. Свой n8n на VPS снимает оба ограничения за цену тарифа в пару долларов. Разбираем docker compose, том с данными, три переменные окружения, которые молча ломают вебхуки, если задать их неправильно, вход через встроенную учётную запись владельца, периметр из nginx и ufw и то, что нужно бэкапить, чтобы не потерять workflow вместе с сервером.

Ollama даёт API и больше ничего: ни истории чатов, ни загрузки документов, ни логина. AnythingLLM закрывает ровно эту дырку - веб-интерфейс, workspace'ы и встроенная векторная база для RAG поверх ваших файлов. Разбираем развёртывание через docker compose: как контейнер дотягивается до Ollama на хосте, где живут данные, почему авторизацию надо включить до того, как вы выдадите ссылку коллеге, и почему привычное

Живой тест на PM2 7.0.4: короткий всплеск памяти в 100 МБ, который длится 2 секунды и опускается обратно, PM2 не замечает вообще - а устойчивый рост убивает процесс на следующей проверке, что подтверждено логом демона. Разбираем источник кода PM2 (Worker.js, God/Reload.js), разницу между RSS и

pm2 reload не даёт настоящего zero downtime в fork-режиме - замер показал провал около секунды, 11 из 57 запросов вернули connection refused. Рабочая схема: два процесса Next.js на разных портах, переключение upstream nginx и curl-петля, которая это доказывает.

nginx берёт на себя TLS, роутинг по домену и защиту от битого конфига через nginx -t; ufw закрывает всё, кроме SSH и 80/443 - но только если приложение не спрятано за Cloudflare Tunnel. Разбираем конфиг, заголовки прокси и самую частую дыру в периметре - открытый порт приложения в обход nginx.

Боевой разбор: почему PM2 должен запускать next start напрямую, а не через npm start, почему сборке даже пустого приложения нужно ~1.2 ГБ памяти, что писать в конфиг nginx и как пустить трафик через Cloudflare Tunnel по config.yml, не открыв ни одного входящего порта. Плюс атомарная выкладка с откатом.

Load average 15 при почти простаивающем процессоре - это не сбой датчика, а сигнал, который половина админов читает неправильно. Разбираем, что на самом деле считает load average, когда за дело берётся OOM killer и по какому принципу выбирает жертву, почему контейнер может умереть от собственного лимита памяти при свободных гигабайтах на хосте, и какая из трёх стандартных «починок» - своп, лимиты или апгрейд RAM - решает проблему, а какая просто её откладывает.