Cursor пишет код по описанию: вы просите — и через полчаса в папке лежит рабочий проект, который открывается по адресу localhost:3000, пока открыт редактор. Закройте ноутбук — и проекта в интернете нет. Между «работает у меня» и «работает по ссылке» лежат несколько правок, которые Cursor сделает по первой просьбе. Рассказываем по шагам, что поправить и как получить HTTPS-адрес на Dockbox.
Что Cursor пишет и чего в этом коде нет
Cursor — редактор с ИИ и встроенным терминалом, поэтому он доводит проект ровно до того состояния, в котором его удобно запускать на вашей машине. Всё, что начинается за пределами папки, остаётся за кадром. Чаще всего не хватает четырёх вещей:
- Файла зависимостей.
requirements.txtдля Python илиpackage.jsonдля Node.js — по нему сервер поймёт, что устанавливать. - Порта из переменной окружения. Модель ставит число, удобное здесь: 3000, 5000, 8000. На сервере порт назначает платформа.
- Секретов вне кода. Токен бота или ключ платного API нередко остаётся прямо в файле рядом с логикой.
- Места для данных. Если проект пишет базу файлом рядом с кодом, при первой же пересборке она обнулится.
Это не ошибка редактора: он решает задачу «написать код», а не «держать его в интернете». Дальше — пять шагов, каждый из которых Cursor закроет сам, если попросить.
Шаг 1. Определите, что именно вы собрали
Всё остальное зависит от типа проекта. Сайт открывается по ссылке, бот сам пишет в мессенджер и своего адреса не требует, а фоновый скрипт просто работает и делает своё дело. Посмотрите, что поднимается при запуске: веб-сервер (Flask, FastAPI, Express, Next.js) — значит, будет ссылка; библиотека мессенджера — значит, бот.
Заодно загляните в файл с командами:
"scripts": {
"dev": "vite",
"build": "vite build",
"start": "node server.js"
}
Если есть start, проект запускается как приложение и должен слушать порт из окружения. Если только build — у вас статика, и адрес получится ещё проще.
Шаг 2. Уберите порт и localhost из кода
Самая частая причина «собралось, а ссылка пустая»: приложение слушает не там, куда приходит трафик. Cursor почти всегда пишет адрес так, как удобно на вашем компьютере.
Плохой вариант:
app.run(host="127.0.0.1", port=5000)
Правильный — порт из переменной PORT, адрес 0.0.0.0:
port = int(os.environ.get("PORT", 5000))
app.run(host="0.0.0.0", port=port)
Правка на две строки. Просто попросите Cursor: «бери порт из переменной окружения PORT и слушай 0.0.0.0». Для Node.js это process.env.PORT, для Go — os.Getenv("PORT").
Шаг 3. Вынесите ключи в переменные окружения
Второй след ИИ-кода — токен или ключ прямо в файле. Так делать нельзя хотя бы потому, что код вы будете показывать, кому-то отдавать или заливать в Git.
Плохой вариант:
BOT_TOKEN = "7123456789:AAG..."
Правильный:
BOT_TOKEN = os.environ["BOT_TOKEN"]
Для Python это os.environ, для Node.js — process.env. Значения задаются отдельно, в разделе секретов панели: при настройке проекта платформа спросит их и подставит в зашифрованном виде, так что они не попадут ни в архив, ни в репозиторий. Файл .env, если он есть в папке, в архив не кладите.
Шаг 4. Соберите чистый архив
Проект из Cursor — обычная папка. Забирайте её целиком, но без служебных каталогов: они в разы тяжелее самого кода и всё равно пересоздаются при сборке.
.venv/
node_modules/
__pycache__/
dist/
.cursor/
Список зависимостей, наоборот, оставьте: requirements.txt, package.json вместе с package-lock.json, go.mod. Второй путь — отправить код в GitHub прямо из Cursor, включая приватный репозиторий: тогда обновления выкатываются одним действием в панели.
Шаг 5. Загрузите проект и подключите домен
Загрузите архив или подключите репозиторий: Dockbox определит язык, поставит зависимости, соберёт проект и выдаст публичный HTTPS-адрес. Если что-то пошло не так, причина видна в логах панели — обычно это отсутствующая библиотека или список зависимостей, собранный через pip freeze вместе с локальными путями вашей машины.
Публичного адреса хватает для теста и для показа проекта. Для постоянного сайта подключите свой домен: укажите его в панели и пропишите DNS-запись на адрес проекта — сертификат HTTPS выпустится сам, а ссылка останется прежней при всех следующих обновлениях кода.
Сколько это стоит и как работают контейнеры
Starter — 990 ₽/мес, первый месяц бесплатно: 1 vCPU, 2 ГБ RAM, 20 ГБ SSD, один проект. Контейнеры работают постоянно — ни лимита по часам, ни засыпания при простое: ссылка отвечает в момент открытия, без «прогрева» после паузы.
Pro — 2 490 ₽/мес: 2 vCPU, 4 ГБ RAM, до пяти проектов — если фронтенд живёт вместе с сервером или проектов несколько. Team — 4 990 ₽/мес — для команд с запасом ресурсов. Отдельного счёта за сборки и трафик нет, упавший процесс платформа перезапускает сама, а тариф действует месяц и сам не списывается.
Частые вопросы
Надо ли выкладывать код через Git, если проект писал Cursor?
Нет. Достаточно архива: уберите из папки служебные каталоги и загрузите её. Git удобнее, если проект будет развиваться — Cursor умеет отправить код в репозиторий, включая приватный, а обновление потом выкатывается одним действием в панели.
Проект открывается в Cursor, но ссылка не работает. Почему?
Почти всегда из-за жёстко прописанного порта или адреса localhost: приложение слушает не там, куда приходит трафик. Уберите свои значения, читайте порт из переменной PORT и слушайте 0.0.0.0. Вторая причина — проект падает при старте, и это видно в логах панели.
Что делать с ключами API, которые Cursor вставил в код?
Вынести в переменные окружения и удалить из файлов. Значения задайте в секретах проекта: они хранятся в зашифрованном виде, а код читает их из окружения. Если ключ уже попал в Git, считайте его скомпрометированным и выпустите новый.
Нужно ли разбираться в коде, который написал Cursor?
Глубоко — нет. Достаточно трёх вещей: порт из переменной окружения, секреты вне кода и данные в постоянном хранилище. Сборку, запуск и перезапуск после сбоя платформа берёт на себя, а сами правки Cursor внесёт по вашему запросу.
Где хранить базу данных, если Cursor создал её файлом?
Сам файл остаётся рабочим, но жить он должен в постоянной папке /data: то, что лежит там, переживает обновление кода и перезапуск, а файлы рядом с кодом пересоздаются при каждом деплое. Путь к базе удобно задавать переменной окружения, чтобы он отличался локально и на сервере.