Тестируем 8 AI-моделей для замены aaPanel на Caddy + FastAPI. Узнайте, какая комбинация справилась лучше всех и стоила всего $1.94.
Вы используете aaPanel или CyberPanel для управления серверами? Возможно, вы замечали, что с каждым обновлением бесплатные функции ломаются, а платные — навязываются. Я решил заменить панель управления на связку Caddy + FastAPI и заодно протестировать 8 AI-моделей, чтобы понять, какая из них способна написать production-ready код. Результаты вас удивят.
Годами я использовал OpenLiteSpeed с CyberPanel. Быстро, LSCache впечатляет, но CyberPanel становился всё багливее. Начиная с версии 2.4.x, установка WordPress ломается на финальном шаге из-за SQL-ошибки. Файлы загружены, но базу данных приходится создавать вручную. А генерация SSL-сертификатов Let's Encrypt стабильно падает из-за кривых конфигов. И конечно, есть платная «улучшенная» версия. Если бесплатная функция работала годами, а теперь сломана — это не баги, а дизайн. Я сделал выводы и перешёл на aaPanel.
aaPanel приятнее, стабильнее, легче. Но она полностью абстрагирует управление OpenLiteSpeed — вы не можете трогать порт 7080, иначе всё сломается. Всё через дашборд aaPanel. Когда мои проекты сместились в сторону Astro и статических сайтов, PHP стал не нужен, и OpenLiteSpeed потерял смысл. Caddy же автоматически настраивает HTTPS, конфиг помещается в несколько строк и нет проблем с реврайтами.
Я поставил задачу: создать минимальный набор инструментов для управления VPS на Ubuntu 24.04. Caddy как веб-сервер, PHP-FPM (две версии), MariaDB и PostgreSQL, Valkey для кэширования. Shell-скрипты для всех операций, FastAPI для автоматизации. Без Docker, без панелей, без лишних абстракций. Четыре типа сайтов: статические, PHP, WordPress (через WP-CLI) и реверс-прокси.
Ожидаемые операции: начальная настройка сервера, создание/удаление сайта с автоматическим бэкапом, создание БД по запросу, деплой через rsync, бэкап, управление сервисами. Полный функциональный бриф доступен в репозитории проекта.
Методология: две фазы — архитектура и код. В фазе архитектуры каждой модели давался одинаковый бриф без подсказок. В фазе кода — единый промпт с утверждённой архитектурой и требованием выдать 30 файлов. Внешний рецензент оценивал код четырёх реализаций (A, B, C, D) по шкале: безопасность, корректность, идемпотентность, качество кода, полнота. Пять файлов на реализацию, максимум 25 баллов.
Комбинации инструментов и моделей:
Haiku 4.5 использовалась трижды на разных инструментах — чтобы изолировать влияние инструмента от модели.
Первое, что бросается в глаза: ни одна модель не задала уточняющих вопросов до выдачи плана. Все сначала выдали полную архитектуру, а потом попросили уточнения. Это противоположно подходу человека-архитектора, который сначала разрешает неоднозначности.
Качество вопросов — первый дискриминирующий сигнал. Две модели задали 4-5 действительно блокирующих вопросов с вариантами и рекомендациями. Одна задала восемь общих вопросов (формат архива, ротация логов), которые ничего не меняли в архитектуре.
Предложенная структура — второй сигнал. Только одна модель спонтанно предложила единую точку входа CLI — bin/vpsmgr, которая диспетчеризирует скрипты. Остальные не подумали об этом.
Одна модель единственная предложила нормализованную документированную конвенцию кодов возврата:
| Код | Значение | HTTP |
|---|---|---|
| 0 | Успех | 200 |
| 1 | Некорректный ввод | 400 |
| 2 | Не найдено | 404 |
| 3 | Конфликт | 409 |
| 4 | Отсутствует зависимость | 422 |
| 5 | Внутренняя ошибка | 500 |
Это контракт между shell-скриптами и FastAPI — без него маппинг HTTP становится произвольным.
Стоимость фазы планирования:
Gemini 3.1 Pro выдал самый лаконичный план (27k токенов) при хорошем качестве. Haiku 4.5 на OpenCode потребила 69k токенов при низшем качестве. Объём токенов не предсказывает качество.
Фаза кода стартовала с единого промпта для четырёх реализаций. Промпт включал утверждённую архитектуру, десять подтверждённых технических решений, конвенцию кодов возврата и однозначную инструкцию: выдать 30 файлов на диск в порядке зависимостей, без сокращений.
Вот что показала общая библиотека common.sh:
require_cmd(), атомарных записей.readonly, normalize_domain() с regex RFC-1035, блокировки конкурентности, атомарные записи через mktemp+mv. Но редактирование секретов пропускает соли WordPress.jq. print_credentials() оборачивает вывод в маркеры <<>>. render_template() без Jinja. Генерация паролей без двусмысленных символов (0/O/1/l/I). Единственная реализация, которая предвидела все краевые случаи из промпта.exit_input_error(), exit_conflict() — читабельнее, чем голый exit 3. И json_output() прямо в common.sh, готовая к API. Нет атомарных записей, require_cmd().Модель C тестировала свой код в процессе. После написания schemas.py запустила тесты, нашла два бага и сразу исправила: неправильная реализация валидатора Pydantic v2 (field_validator вместо model_validator) и ненастроенное взаимное исключение на уровне схемы. Также исправила подстановку sed для путей с / — заменила на чистую подстановку bash.
В конце сессии модель C выдала сводку верификации: bash -n на всех скриптах, Python AST на всех файлах, 19/19 API-роутов проверены через OpenAPI-спецификацию, 18/18 bash-хелперов протестированы, правило fallback PHP проверено (8.5→8.4, 8.4→none, 7.x rejected).
Модель A проверила shebang перед завершением. Модель B выдала отполированную документацию пользователя.
Код четырёх реализаций был отправлен на рецензию модели, не участвовавшей в бенчмарке. Оценка по пяти критериям (безопасность, корректность, идемпотентность, качество кода, полнота), каждый до 5 баллов, максимум 25.
Модель A: 15/25. Безопасность страдает из-за отсутствия атомарных операций и валидации доменов. Корректность: база данных не создаётся, если не указан пароль. Идемпотентность: нет проверок перед созданием. Качество кода: нет require_cmd(). Полнота: не хватает обработки ошибок.
Модель B: 18/25. Безопасность: пропущены соли WordPress. Корректность: отличная валидация, но ошибки в генерации паролей. Идемпотентность: хорошие блокировки. Качество кода: отличное, но отсутствует render_template(). Полнота: документация пользователя, но нет тестов.
Модель C: 23/25. Безопасность: настраиваемое редактирование, атомарные операции. Корректность: все краевые случаи покрыты. Идемпотентность: проверки существования, блокировки. Качество кода: модульная структура, чистый код. Полнота: тесты, верификация, обработка ошибок. Минус: нет require_cmd().
Модель D: 17/25. Безопасность: нет атомарных операций. Корректность: хорошая валидация, но пропущены некоторые проверки. Идемпотентность: нет блокировок. Качество кода: отличные именованные функции, но не хватает require_cmd(). Полнота: json_output() полезна, но нет тестов.
Победитель: Модель C с 23/25.
Модель A: GPT-OSS-120B на OpenCode. Стоимость: ~$0.003 за планирование + ~$0.01 за код = $0.013.
Модель B: DeepSeek V4 Pro на OpenCode. Стоимость: ~$0.044 + ~$0.12 = $0.164.
Модель C: Gemini 3.1 Pro на OpenCode. Стоимость: ~$0.095 + ~$1.85 = $1.945.
Модель D: BigPickle (free) на OpenCode. Стоимость: $0 + $0 = $0.
Победитель — Gemini 3.1 Pro на OpenCode. За $1.94 она выдала production-ready код с тестами, верификацией и обработкой всех краевых случаев. Haiku 4.5 на разных инструментах показала средние результаты: Copilot CLI дал лучшую архитектуру, но код был неполным. OpenCode с той же моделью дал больше кода, но с ошибками. Инструмент влияет, но модель — решающий фактор.
BigPickle (бесплатная) показала удивительно хороший результат для нулевой цены. DeepSeek V4 Pro — твёрдый середняк. GPT-OSS-120B — минимально работоспособный код.
Если вы хотите заменить aaPanel на Caddy + FastAPI, лучший способ — использовать Gemini 3.1 Pro на OpenCode. За менее чем $2 вы получите полный набор скриптов с тестами и верификацией. Альтернативно, BigPickle даёт 80% функционала бесплатно. Не используйте CyberPanel — его баги намеренно толкают к платной версии. А с Caddy вы получаете автоматический HTTPS и простой конфиг без сюрпризов OpenLiteSpeed.
Попробуйте сами: возьмите бриф из репозитория проекта, запустите OpenCode с Gemini 3.1 Pro и получите свой собственный набор инструментов. Или используйте готовый код из репозитория победителя.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →