Перейти к содержимому

Установка через ИИ-агента

Дайте кодовому агенту SSH-доступ к чистому Linux-серверу, вставьте промпт ниже и один раз ответьте на его вопросы. Он поставит Docker, соберёт стек, применит миграции, создаст админа и прогонит smoke-тест из шести проверок, прежде чем отчитаться.

Работает с любым агентом, умеющим выполнять команды в шелле, — Claude Code, Codex/GPT, Qwen, Kimi.

У тебя SSH/root-доступ к чистому Linux-серверу. Установи на него slimTDS.
git clone https://github.com/izzipizzy/slimtds.git slimtds && cd slimtds
Прочитай docs/AI-INSTALL.md и выполни его точно, сверху вниз.
Задай все вопросы ОДНИМ сообщением в начале (§1), дальше работай до конца
без остановок. Секреты не печатай. Если падает проверка из §2 — остановись и
скажи мне, не обходи её. Заверши отчётом из §9.
  • Сервер — минимум 2 ГБ RAM и 20 ГБ свободного диска, порты 80 и 443 не заняты.
  • Домен, A-запись которого уже указывает на этот сервер. Обязателен для TLS в режиме direct; можно пропустить, только если ставите за Cloudflare.
  • Опционально: лицензионный ключ MaxMind GeoLite2 — без него гео-таргетинг молча ни с чем не совпадает — и токен Telegram-бота с chat ID для дайджеста и алертов.

Пароль администратора агент генерирует сам и сообщает его один раз, в конце.

Он следует рантбуку docs/AI-INSTALL.md из репозитория. Десять пронумерованных разделов, строго по порядку.

  1. Собирает ввод — режим развёртывания, домен, таймзона и опциональные интеграции, всё одним сообщением. Дальше он вас не отвлекает.

  2. Preflight — дистрибутив и архитектура, права root, RAM и диск, свободны ли порты 80/443, резолвится ли DNS на этот сервер, есть ли исходящая сеть. Провалившаяся проверка останавливает установку, а не обходится.

  3. Ставит Docker из официального репозитория — не из snap и не пакет docker.io из дистрибутива, потому что Compose v2 должен быть доступен как docker compose.

  4. Гигиена ОС — открывает 22/80/443 в фаерволе (только добавляет правила, никогда не сбрасывает политику), создаёт swap-файл на 2 ГБ, если RAM меньше 2 ГБ, ставит таймзону.

  5. Клонирует и настраиваетgit clone, затем make env, который пишет .env со случайными APP_SECRET и паролем админа, затем значения под выбранный режим.

  6. Запускает стекmake prod-up-direct или make prod-up-cf. Первый запуск собирает образ (ассеты Bun → vendor Composer → рантайм FrankenPHP) и занимает несколько минут.

  7. Инициализирует — миграции Phinx, затем partitions:rotate для создания месячных партиций таблиц статистики, затем admin:init для учётной записи администратора.

  8. Smoke-тест — шесть проверок; установка не считается завершённой, пока не пройдут все.

  9. Отчитывается — URL, доступы, режим, какие интеграции включены, куда складываются бэкапы, и таблица smoke-теста, включая провалы, если они были.

Агент спросит, какой нужен. Выбор — по топологии сети:

РежимКогда выбирать
directСервер сам является публичным origin, Caddy получает сертификаты Let’s Encrypt. Порты 80 и 443 должны быть доступны извне. Выбор по умолчанию для обычного VPS.
cf_flexДомен проксируется через Cloudflare, и обычный HTTP между Cloudflare и origin вас устраивает. Caddy слушает :80.
cf_fullПроксируется через Cloudflare и origin отдаёт HTTPS с Origin-сертификатом Cloudflare. Caddy слушает :443.
devТолько локальная машина. Не публикует порты и полагается на доменную маршрутизацию локального окружения, поэтому на обычном сервере недоступен.

Значения .env, которые различаются:

APP_ENV=prod
APP_DEBUG=false
DEPLOY_MODE=direct
DOMAIN=tds.example.com
APP_URL=https://tds.example.com
DB_PASSWORD=<сменить со значения по умолчанию>
ПроверкаОжидание
1Контейнерыapp, db, cron запущены; app — healthy
2GET /__health200
3Миграциини одной в состоянии down
4GET /admin/login200
5TLSбез ошибки сертификата
6Вход в админку302 на /admin

Плюс проверка, которая ловит поломку, прячущуюся за шестью зелёными галочками: что /assets/app.<hash>.css и /p.js отдают 200, а не 404.

Настраивать нечего. В режимах cf_* Caddyfile.cf уже доверяет диапазонам Cloudflare и читает CF-Connecting-IP; дальше приложение проходит цепочку X-Slim-IP → X-Real-IP → CF-Connecting-IP → True-Client-IP → X-Forwarded-For → REMOTE_ADDR. Агенту запрещено править Caddyfile.* руками — нужный файл выбирает entrypoint.sh по значению DEPLOY_MODE.

Рантбук заканчивается таблицей «симптом → причина → команда», покрывающей реальные отказы этого стека: админка без стилей, воркер в цикле перезапусков, Let’s Encrypt не выдаёт сертификат, ломается аутентификация в БД после поздней смены пароля, гео-фильтры ни с чем не совпадают, порты заняты. Агенту предписано свериться с ней, а не изобретать патч, и сообщать о провалившейся проверке, а не тихо объявлять успех.

Ручной, «человеческий» вариант той же установки — Режимы развёртывания.