
Деплой
@dev-deploy
Деплоит готовый проект в интернет, чтобы он открывался по URL: подбирает хостинг под стек (Vercel/Netlify/GitHub Pages/Render/PythonAnywhere/Timeweb/Amvera), готовит .gitignore и переменные окружения, публикует и проверяет curl'ом. Применяйте для «выложи в интернет», «задеплой», «опубликуй сайт/бота», «как развернуть», «нужен хостинг». Не подходит для написания кода (dev-build), тестирования (dev-test), сбора требований (dev-spec) или ведения проекта (dev-project).
Деплой: выложить MVP в интернет
Последний шаг цикла SPEC → BUILD → TEST → DEPLOY: сделать так, чтобы проект открывался по URL, а не только на машине пользователя. Локально работающий код — полдела; польза появляется, когда по ссылке может зайти другой человек.
Когда активирован
- «Выложи в интернет / задеплой / опубликуй / как развернуть».
- «Нужен хостинг», «куда это поставить», «как показать сайт заказчику».
- Проект прошёл dev-test (критерий приёмки зелёный) и пользователь хочет его «вживую».
Не активируй, пока нет работающего кода (сначала dev-build/dev-test), и не активируй для выбора стека или ТЗ (dev-spec).
Главный принцип: деплой — только с согласия, секреты — только через окружение
Публикация в интернет — необратимое действие: код становится доступен снаружи. Никогда не публикуй без явного согласия пользователя. Секреты (ключи API, токены, пароли БД) никогда не кладутся в код/репозиторий и не показываются в чате — только переменные окружения (env) на стороне хостинга.
Процесс
- Согласие. Спроси: «выложить в интернет?» и какой хостинг предпочитает (иностранный бесплатный / российский платный). Покажи 2–3 варианта с ценами.
- Подготовка (критично).
git init(если нет) и.gitignore:node_modules/,.venv/,__pycache__/,.env, файлы ключей, собранные артефакты. Проверь:git statusне должен показывать ничего похожего на секреты.- Вынеси все ключи/пароли в переменные окружения (
os.environ/process.env), добавь.env.exampleс названиями (без значений) и инструкцией. - Проверь, что есть команда запуска в проде (
npm run start/uvicorn .../python app.py) и она задокументирована вSPEC.md.
- Выбери хостинг по таблице ниже. Условия тарифов меняются — проверь актуальность через web_search/web_reader перед советом, не цитируй по памяти.
- Задеплой. Дай пользователю точные шаги (регистрация, загрузка, команды); сам регистрируй аккаунты только с явного разрешения и данными пользователя.
- Проверь (обязательно).
curl -s -o /dev/null -w '%{http_code}' <URL>→ 200; прогони ключевой путь пользователя (критерий приёмки) на живом URL; убедись, что env-переменные подхватились (функция, которой нужен ключ, работает). - Зафиксируй. URL, хостинг, как обновлять (git push / re-upload), где лежат
env — в журнал
DEV-JOURNAL.md(dev-project). Расскажи пользователю, как вносить изменения после деплоя.
Хостинг под стек (RU-рынок: карты РФ часто не работают на зарубежных сервисах)
| Стек | Варианты | Замечания |
|---|---|---|
| Статика (HTML/CSS/JS) | GitHub Pages, Vercel, Netlify, Timeweb (RU), Beget (RU) | GitHub Pages — бесплатно и просто; RU-хостинг — если нужны карты РФ/домен .ru |
| Node / Next.js | Vercel (Hobby), Render (free), Timeweb Cloud | Render free «засыпает» через ~15 мин простоя; для демо ок, для боевого — Vercel/платный |
| Python (Flask/FastAPI/Django) | PythonAnywhere (free), Render (free), Amvera (RU PaaS), Timeweb Cloud | PythonAnywhere — самый дружелюбный для новичка; Amvera/Timeweb — RU-оплата |
| Telegram-бот | PythonAnywhere/Render (webhook или polling) или локально у пользователя | Для личного бота честный ответ — «можно запускать у себя»; для 24/7 нужен хостинг |
| БД | SQLite (MVP), Postgres на Render/Supabase/Timeweb | SQLite на serverless (Vercel) не работает — файл эфемерный; нужен Postgres |
Правила выбора: самый дешёвый вариант, который реально запускается; для MVP не тащить Docker/K8s; у пользователя из РФ — предлагай RU-варианты наравне с зарубежными, предупреждай про оплату иностранной картой. Сроки простоя и лимиты free-тарифов называй только после проверки документации.
Границы (✅ / ⚠️ / 🚫)
- ✅ Всегда: деплой только с согласия; секреты через env;
.gitignoreдо push; проверить живой URL curl'ом; записать URL и способ обновления в журнал. - ⚠️ Спросить: какой хостинг (показать варианты и цены); перед регистрацией аккаунта за пользователя; перед подключением платного тарифа/домена.
- 🚫 Никогда: не публиковать без согласия; не коммитить/не показывать секреты;
не пушить
node_modules//.venv//данные пользователей; не обещать «бесплатно навсегда» без проверки тарифа; не деплоить то, что не прошло dev-test.
Отговорки и почему они не работают
| Отговорка | Почему мимо |
|---|---|
| «Локально же работает» | Цель деплоя — URL, по которому зайдёт другой человек. Это и есть «рабочее состояние». |
| «Скину пользователю zip» | Zip = пересборка вручную при каждом изменении. Деплой — повторяемый процесс (git push). |
| «Ключ в коде, так проще» | Ключ в репозитории = утечка при первом же push. env — это 5 строк. |
| «Пользователь сам разберётся» | Тогда дай проверенную пошаговую инструкцию под его ОС — не брось на полпути. |
Выходные критерии
- Пользователь согласился на публикацию и выбранный хостинг.
-
.gitignoreна месте,git statusчист от секретов и мусора. - Секреты только в env; есть
.env.example+ инструкция. - Живой URL отвечает
200; ключевой путь проверен на живом URL. - URL, хостинг и способ обновления записаны в
DEV-JOURNAL.md.
До деплоя: прогони тесты (dev-test). После: обнови журнал (dev-project).