Vps deploy auditor
Деплой Python-приложений на VPS без Docker и аудит существующего деплоя: nginx + systemd + redis + postgresql. Django/FastAPI под gunicorn/uvicorn и aiogram-боты под systemd; TLS (certbot), статика, security-заголовки, бэкапы pg_dump, redis persistence, безопасность хоста (не-root, ufw, секреты в EnvironmentFile, fail2ban). Режимы: генерация шаблонов конфигов и аудит с уровнями риска. Используй когда пользователь деплоит на VPS, просит unit-файл, конфиг nginx, настройку postgres/redis или бэкап БД, спрашивает «как задеплоить без Docker», «безопасен ли мой сервер», «почему сервис падает после рестарта», или упоминает gunicorn, uvicorn, certbot, ufw, systemd.From its SKILL.md
npx -y skills add goldenprofile/llm-skills --skill vps-deploy-auditorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.4 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
VPS Deploy Auditor
Помощник по деплою Python-приложений на одиночный VPS без Docker (nginx + systemd + redis + postgres) и аудитор существующего деплоя. Цель — рабочая, безопасная и переживающая рестарт конфигурация: сервис не падает молча, переживает ребут, отдаёт TLS, не теряет состояние и не светит секреты. По итогу — либо сгенерированные шаблоны конфигов, либо отчёт с уровнями риска.
Два режима
- Генерация — создать рабочие шаблоны (unit-файл, server-блок nginx, cron-бэкап, настройку redis/postgres) под конкретный тип приложения. См. справочники, бери шаблоны как основу.
- Аудит — пройтись по существующему деплою, классифицировать риски, объяснить, что отвалится на проде или при рестарте. Отчёт по references/output-format.md.
Контекст — установить ПЕРВЫМ делом
- Тип приложения — Django (WSGI/gunicorn или ASGI/uvicorn), FastAPI (ASGI/uvicorn), aiogram-бот (polling-воркер, без HTTP). От этого зависит unit и нужен ли nginx.
- Привязка процесса — unix-socket (предпочтительно для HTTP за nginx) или TCP-порт.
- Внешние зависимости — postgres и/или redis; нужны ли в
After=юнита. - Домен и TLS — есть ли домен под certbot; HTTP-only недопустим в проде.
- Сервисный пользователь — НЕ root; отдельный системный пользователь под приложение.
Процесс
- Собрать факты: unit-файлы (
/etc/systemd/system/*.service),systemctl status, server-блоки nginx (/etc/nginx/), конфиги postgres/redis, cron/таймеры бэкапов,ufw status, под кем и откуда запускается процесс, где лежат секреты. - Прогнать по чеклисту рисков (ниже) и справочникам.
- Классифицировать риск, объяснить почему ломается у него (одиночный VPS, соло-эксплуатация).
- Предложить рабочий конфиг/правку.
- Режим генерации — выдать шаблоны; режим аудита — отчёт по output-format.md.
Уровни риска
- CRITICAL — потеря данных или сервис недоступен/уязвим: нет бэкапов postgres (или они не
проверены), сервис/postgres/redis слушает
0.0.0.0без firewall, секреты закоммичены в репо, приложение работает под root, нет TLS на публичном HTTP. - HIGH — сервис падает и не поднимается, или деградирует под нагрузкой: нет
Restart=always, нетWantedBy/enable(не стартует после ребута), redis безmaxmemory/policy как cache (OOM-kill), маленький/отсутствующийTimeoutStopSecрвёт graceful shutdown, postgresmax_connectionsне согласован с числом воркеров (отказы соединений). - MEDIUM — нет security-заголовков/
server_tokens off, нетlock_timeoutбэкапа в off-peak, redis без persistence там, где он broker/FSM, нет лимитов ресурсов юнита, gzip выключен, таймауты nginx по умолчанию, нетfail2ban/rate-limit на SSH/входы. - LOW — стиль, именование юнитов, мелкие улучшения логирования/комментарии.
Быстрый чеклист (детали — в справочниках)
- Сервис под не-root системным пользователем,
Restart=always,enable-нут (стартует после ребута)? TimeoutStopSecдостаточен для graceful shutdown (gunicorn/uvicorn/бот закрывают пулы/сессии)?- Секреты в
EnvironmentFile(права600, владелец — сервис), а НЕ в репо/в unit-строке? - HTTP-приложения за nginx: TLS (certbot+auto-renew), редирект 80→443, security-заголовки, gzip?
- nginx проксирует на unix-socket, статика/медиа отдаются nginx (не приложением)?
- postgres: отдельные пользователь+БД,
pg_hbaбезtrust, есть проверенныйpg_dump-бэкап по cron? - redis:
bind 127.0.0.1,maxmemory+policy (если cache), persistence (если broker/FSM)? - Firewall (ufw): открыты только нужные порты (22/80/443), БД/redis не наружу?
- Число воркеров согласовано с CPU и с
max_connectionspostgres? - Миграции БД применяются при деплое безопасно (см.
migration-safety-auditor)?
Связь с библиотекой навыков
- Применение миграций в процессе деплоя →
migration-safety-auditor(не уронить прод DDL). - Готовность кода к проду перед деплоем (антипаттерны, безопасность, highload) →
python-project-audit. - Зафиксировать процедуру деплоя как заметку в репозитории (Makefile/runbook) →
harness-engineering. - Деплой aiogram-бота под systemd детальнее (single instance, FSM) →
aiogram-bot-auditor.
Справочники
- references/systemd.md — unit-файлы для gunicorn (Django WSGI),
uvicorn (FastAPI/Django ASGI) и polling-бота;
Restart,TimeoutStopSec,EnvironmentFile, не-root, sandboxing, socket-activation, число воркеров. - references/nginx.md — reverse-proxy: TLS (certbot), 80→443, проксирование на socket/порт, статика/медиа, gzip, таймауты, размеры тела, security-заголовки.
- references/postgres-redis.md — postgres: пользователь/БД,
pg_hba,max_connections, бэкап pg_dump по cron + проверка восстановления; redis:bind,maxmemory+policy, RDB/AOF под cache vs broker/FSM. - references/security.md — не-root, ufw, секреты в EnvironmentFile, least privilege, SSH-hardening, fail2ban, права на файлы, обновления.
- references/output-format.md — формат отчёта аудита.
What ships with it: 5 files
31.9 KB alongside SKILL.md
references/
- nginx.md5.6 KB
- output-format.md5.4 KB
- postgres-redis.md7.8 KB
- security.md5.7 KB
- systemd.md7.4 KB